springmvc概述Springmvc是spring框架的一个模块,spring和springmvc不用中间整合层整合。
Springmvc是一个基于mvc的web框架
表现层的三大任务:
URL到controller的映射设计模式是一种都可以用的应用编程思想。
在MVC设计模式中觉得, 所有应用都可以分为三部分组成:
(1)控制程序流转的控制器(Controller)
(2)封装资料处理资料的模型(Model)
(3)负责展示资料的视图(view)
springmvc的实现原理
(1) .玩家发送请求 至 前端控制器(DispatcherServlet);
提示:DispatcherServlet的作用:接收请求,调用其它组件处理请求,响应结 果,等于转发器、中央处理器,是整个流程控制的中心
(2) .前端控制器(DispatcherServlet)收到请求后调用处理器映射器 (HandlerMapping)
处理器映射器(HandlerMapping)寻找详细的Controller(可以根据xml配置、注解进 行查找),并将Controller返回给DispatcherServlet;
(3) .前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。处理 器适配器经历过适配调用详细的Controller;(Controller-- service -- Dao -- 资料库)
Controller执行完成后返回ModelAndView,
提示:Model(模型资料,即Controller处理的结果,Map) View(逻辑视图名,即 负责展示结果的JSP页面的名字)
处理器适配器(HandlerAdapter)将controller执行的结果(ModelAndView)返回给前 端控制器(DispatcherServlet);
(4) .前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图分析 器(ViewReslover)
视图分析器(ViewReslover)根据View(逻辑视图名)分析后返回详细JSP页面
(5) .前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型资料 填充至视图中);
前端控制器(DispatcherServlet)将填充了资料的网页响应给玩家
springmvc实现第一步:创建maven项目springmvc
第二步:在pom文件中添加依赖
dependencies !-- 单元测试 -- dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.10/version scopetest/scope /dependency !-- SpringMVC的jar包 -- dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version4.1.3.RELEASE/version /dependency !-- servlet 和 jsp的jar包 -- dependency groupIdjavax.servlet/groupId artifactIdservlet-api/artifactId version2.5/version scopeprovided/scope /dependency dependency groupIdjavax.servlet/groupId artifactIdjsp-api/artifactId version2.0/version scopeprovided/scope /dependency !-- java对象转换json的工具类 dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.5.1/version /dependency --/dependencies第三步:web.xml中配置前端控制器
?xml version="1.0" encoding="UTF-8"?web-app xmlns:xsi="
?xml version="1.0" encoding="UTF-8"?beans xmlns="
restController=controller+responsebody:restController返回json对象
controller返回string:modelandview
controller+responsebody返回json对象
package com.tedu.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/* @Controller,如果目前类所在的包配置了Spring容器包扫描,有着 * 该注解的类,就会作为bean注册到spring容器中,由spring容器 * 创建实例。 */@Controllerpublic class HelloController { /* @RequestMapping为目前途径配置采访路径 * 当浏览器采访
在WEB-INF/pages/目录下,创建home.jsp页面。
%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%!DOCTYPE htmlhtmlheadmeta charset="UTF-8"titleInsert title here/title/headbody h1day20-springmvc...home.jsp.../h1/body/html第七步:发送请求,进行测试
打开浏览器,输入url地址: 地址。
重定向和转发重定向redirect和转发forward的区别
1,重定向浏览器地址栏展现新的地址,转发地址栏不变
2,重定向可以重定向其他网址,转发就只能转发到本网址中的途径。
redirect重定向适合用于原先的网页不继续提供服务了。
@Controllerpublic class UserController { //重定向,原先的登录地址 @RequestMapping("/login") public String login() { return "redirect:
转发后浏览器的地址栏变为转发后的地址。
在chrome的调试窗口中network中调查status code
forward转发转发后浏览器地址栏还是原来的地址。所以转发前请求的参数在转发后依然可以读取到。
//第一输入玩家名和密码 @RequestMapping("/loginByName") @ResponseBody public String loginByNamePwd(String username,String password) { return "login" } //再一次登录时,还得输入验证码 @RequestMapping("/loginByCode") public String loginByCode(String username,String password,String code) { //判断验证码是否正确 return "forward:/loginByName" }
restful风味@PathVariable用来将请求URL中的模板变量映射到功能处理途径的参数上
形成RUSTFul形式,这将是未来的进步趋势。它更加简洁,安全。强化URL GET采访方法。
@RestControllerpublic class OrderCotroller { @RequestMapping("/order/{startTime}/{endTime}") public String searchByDate(@PathVariable String startTime, @PathVariable String endTime) { return "restful startTime="+startTime+",endtime="+endtime; }}浏览器采访的URL
全自动将URL 中模板变量{startTime}和{endTime}绑定到@PathVariable注解的同名参数上,即入参后startTime=“2019-10-01”、endTime=“2021-10-10”。