1. SpringMVC的工作流程
- 用户通过浏览器发送请求至DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping
- HandlerMapping找到具体的处理器链返回给DispatcherServlet
- DispatcherServlet会根据返回的处理器链调用HandlerAdapter
- HandlerAdapter经过适配调用具体的Handler(controller)
- Controller执行完成返回一个执行结果
- HandlerAdapter将Handler的结果ModelAndView对象返回给DispatcherServlet
- DispatcherServlet将ModelAndView对象传给ViewReslover
- ViewReslover解析后得到具体View,并返回给DispatcherServlet
- DispatcherServlet根据View进行视图渲染(即将模型数据填充至视图中)
- DispatcherServlet会将渲染后的视图响应给浏览器
2. SpringMVC的三大组件
处理器映射器 负责根据URL寻找对应的处理器方法
处理器适配器 负责真正的去调用某个处理器方法
视图解析器 负责将逻辑视图转换成物理视图
SpringMVC自带三大组件,如果不进行配置也能正常使用.配置的相当于增强版
<!--视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--SpringMVC的前端控制器允许我们以配置的形式传入前缀和后缀,他会在跳转视图的时候自动拼接--> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>
3.RequestMapping
RequestMapping用于建立请求URL和处理方法之间的对应关系,也可以通过它的属性对请求做出各种限制
value: 用于限制请求URL(和path作用一样)
method:用于限制请求类型
params:用于限制请求参数的条件
此注解可以标注在方法上,也可以标注在类上,标注在类上代表类中的所有方法都可以共用一段URL
@Controller @RequestMapping("/demoController") public class DemoController { /** * 编写控制器 * @RequestMapping:用于为当前方法绑定一个URL地址,作用就是为了前端请求的匹配 */ @RequestMapping("/demo1") public String demo01(){ System.out.println("后台执行了..."); // 返回值就是下一步要转发的页面 return "success"; } }
4. 限制请求路径
4.1 页面
<a href="${pageContext.request.contextPath}/demoController/demo2">demo2@RequestMapping-path</a> <a href="${pageContext.request.contextPath}/demoController/demo3">demo2@RequestMapping-path</a>
4.2 后台
@RequestMapping(path = {"/demo2","/demo3"}) public String demo02(){ System.out.println("后台执行了..."); // 返回值就是下一步要转发的页面 return "success"; }
5. 限制请求类型
method,作用就是用于限定当前方法的提交方式,支持数组写法(同时多个)
如果不写method,代表所有请求方式都能运行
5.1 页面
<form action="${pageContext.request.contextPath}/demoController/demo4" method="post"> <input type="submit" value="demo4@RequestMapping-mothod"> </form>
5.2 后台
/** * 编写控制器 * @RequestMapping:用于为当前方法绑定一个URL地址,作用就是为了前端请求的匹配 * method,作用就是用于限定当前方法的提交方式,支持数组写法(同时多个) * 如果不写method,代表所有请求方式都能运行 */ @RequestMapping(value = "/demo4",method = RequestMethod.POST) public String demo04(){ System.out.println("value = \"/demo3\",method = RequestMethod.POST"); // 返回值就是下一步要转发的页面 return "success"; }
6. 限制请求参数
params用于限定请求参数的必传,不写代表不限制
6.1 页面
<a href="${pageContext.request.contextPath}/demoController/demo5?username=11">demo5@RequestMapping-params</a><br>
6.2 后台
/** * 编写控制器 * @RequestMapping:用于为当前方法绑定一个URL地址,作用就是为了前端请求的匹配 * params用于限定请求参数的必传,不写代表不限制 */ @RequestMapping(value = "/demo5",params = "username") public String demo05(){ System.out.println("username"); // 返回值就是下一步要转发的页面 return "success"; }