1、springMVC的执行流程:
- 用户申请Tomcat处理web应用请求前端控制器DispatcherServlet。
- DispatcherServlet收到请求并调用HanderMapping处理器映射器。
- 处理器映射器找到具体的处理器(可以根据xml配置、注解查找),生成处理对象及处理器拦截器(如果有就生成)一并返回给前端控制器。
- 前端控制器调用HanderAdapter处理器适配器。
- 处理器适配器经过适配电影具体的处理器(通常是我们设置的controller层,也叫后端控制器)。
- controller完成任务返回modelandview。
- 处理器适配器将controller执行结果modelandview传给viewReslover视图解析器。
- 视图解析器解析后返回具体view。
- 由modelandview返回给Tomcat进行视图渲染返回客户
这就是springMVC执行的过程。
2、spring 新注解@RequestMapping
- 作用:用于建立请求URL和处理请求方法之间的对应关系
- 位置:可以放在类上,也可以放在方法上。注意路径的变化。
- 属性:value:设置的静态路由的值,也叫URL与path的作用一样。method:指定请求方式,默认是GET请求方式。params:用于指定带参数访问的条件。
3、内部资源解析器
- 解析内部的资源,可以添加解析bean,用于识别路径,指定添加文件后缀。
- 详见代码的使用。
4、代码基于昨天的代码框架所以没用到的就不发了,防止水文现象,由于我执行的页面截图都不见了,所以不同语句的不同结果还是测试一下比较好。
- UserController.java
-
package com.hlc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; //springMVC利用注解来设置bean的方法比较快捷,而分层也是MVC最大的亮点,关键在web.xml文件里的配置才是最重要的 @Controller @RequestMapping("/User") public class UserController { //这个注解的作用是请求映射,设置的/hlc是一个自己设置的静态路由, // 当在端口访问时可以执行这个路由下的方法 @RequestMapping("/hlc") // 方法默认get的可以直接获取映射,但是我在后面加入了带参数访问,在访问路由时必须带上username这个参数 // @RequestMapping(value = "/hlc",method = RequestMethod.GET,params = {"username"}) public String jump(){ // 返回一个jump.jsp页面试一下静态页面的跳转 // 注意当我在上面的类加入了访问映射时由于返回的是/User/jump.jsp所以访问失败,只有当我加入/才能找到,具体看截图对比 // forward:就是转发的行为,可以观察截图,端口访问地址其实没有变化 // return "forward:/jump.jsp"; // 如果改为redirect:重定向的行为,去访问就是jsp页面的地址了 // return "redirect:/jump.jsp"; // 有没有觉得加后缀jsp很烦人?我们可以在xml文件里设置内部资源视图解析器 return "/jump"; } }
- spring-mvc.xml
-
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--前几次测试过context命名空间去扫描组件以及读取资源文件的方法--> <context:component-scan base-package="com.hlc.controller"/> <!-- 这里的作用就是在com.hlc全部扫描,但是子标签注明只扫描注解controller组件--> <!-- <context:component-scan base-package="com.hlc">--> <!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>--> <!-- </context:component-scan>--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀解析我们测试没用到--> <!-- <property name="prefix" value="/xxx"></property>--> <!-- 后缀解析--> <property name="suffix" value=".jsp"></property> </bean> </beans>
最近迷迷瞪瞪的,估计我还是得自己先做一个小项目出来加深理解才行,先做在理解应该会好一些,过几天再发学生管理系统小项目的博客。