一、核心类和接口说明:

1、org.springframework.web.servlet.DispatcherServlet:前端控制器。


在web.xml中的配置如下:


<servlet> 

 

  <servlet-name>springMVC</servlet-name> 

 

  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 

 

  <!--配置文件指定路径 

 

  <init-param> 

 

  <param-name>contextConfigLocation</param-name> 

 

  <param-value>classpath*:config/springAnnotation-servlet.xml</param-value> 

 

  </init-param> 

 

  --> 

 

  <load-on-startup>1</load-on-startup> 

 

  </servlet> 

 
 
 
 

  <servlet-mapping> 

 

  <servlet-name>springMVC</servlet-name> 

 

  <url-pattern>/</url-pattern> 

 

  </servlet-mapping> 

 
load-on-startup: 
 表示启动容器时初始化该Servlet;


url-pattern: 表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”、“*.jsp”表示拦截所有以html为扩展名的请求。


该DispatcherServlet默认使用WebApplicationContext作为上下文,Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”。




springmvc 斜杠_springmvc 斜杠


2、org.springframework.web.servlet.HandlerMapping:处理请求的映射:



springmvc 斜杠_spring_02



3.org.springframework.web.servlet.HandlerMapping的实现类:



SimpleUrlHandlerMapping  通过配置文件,把一个URL映射到Controller,处理url代码如下:



springmvc 斜杠_spring mvc_03



springmvc 斜杠_springmvc 斜杠_04


4、HandlerAdapter接口 -- 处理请求的映射



AbstractHandlerMethodMapping的initHandlerMethods方法中,首先找到Spring容器中初始化所有的Bean,然后isHandler方法是抽象方法,有其子类RequestMappingHandlerMapping去实现



springmvc 斜杠_spring_05



RequestMappingHandlerMapping的isHandler函数是查找是否有含有@Controller或RequestMapping注解的类



springmvc 斜杠_springmvc 斜杠_06



org.springframework.web.servlet.handler.AbstractHandlerMethodMapping通过url获取映射。




springmvc 斜杠_配置文件_07



二、配置文件及说明:


<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
  
@Controller 声明Action组件
  
@Service    声明Service组件    @Service("myMovieLister") 
  
@Repository 声明Dao组件
  
@Component   泛指组件, 当不好归类时. 
  
@RequestMapping("/menu")  请求映射
  
@Resource  用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") 
  
@Autowired 用于注入,(srping提供的) 默认按类型装配 
  
@Transactional( rollbackFor={Exception.class}) 事务管理
  
@ResponseBody
  
@Scope("prototype")   设定bean的作用域


springmvc 斜杠_spring_08



三、工作流程:


1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;


2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;


3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)


4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:


      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息


      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等


      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等


      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中


5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;


6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;


7. ViewResolver 结合Model和View,来渲染视图


8. 将渲染结果返回给客户端。