美文网首页
SpringMVC-DispatcherServlet 工作流程

SpringMVC-DispatcherServlet 工作流程

作者: 伐无道 | 来源:发表于2018-07-11 11:48 被阅读0次

    工作流程:

    Web 中,无非是请求和响应;

    1. 在 SpringMVC 中,请求的第一站是 DispatcherServlet,充当前端控制器角色;
    2.DispatcherServlet 会查询一个或多个处理器映射(handler mapping)并根据请求所携带的 URL 信息进行决策,将请求发送给哪个 SpringMVC 控制器(controller);
    3.控制器做两件事:一是将数据打包,二是定义逻辑视图名,然后返回给 DispatcherServlet;
    4.DispatcherServlet 通过视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是 JSP;
    5.交付数据模型,以视图形式响应给客户,整个请求流程完成。


    web.xml
    
    1.  <welcome-file-list>[欢迎页面,可定义多个,会依次查找可用视图]
    2.  <listener>
        1.  <listener-class> 基本配置包含 Log4jConfigListener 和 ContextLoaderListener,且 log4j 监听器在前,[目前已废除 log4j 监听器,原因还在努力追问](https://www.oschina.net/question/2994440_2207684)
    3.  <context-param> 指定上下文配置文件路径,基本配置包含 log4j 和 Spring 配置文件
        1.  <param-name> 指定上下文名称,一般为:名称 + ConfigLocation 后缀,如:contextConfigLocation,不可随意定义,否则指定的配置文件无法加载成功,实际上它是 org.springframework.web.servlet.FrameworkServlet 中的一个成员变量,而 FrameworkServlet 是 DispatcherServlet 的父类,log4jConfigLocation 目前不得而知
        2.  <param-value> 指定上下文路径,如:[classpath](http://www.cnblogs.com/yw0219/p/6025893.html):applicationContext.xml
    4.  <servlet>
        1.  <servlet-name>Servlet 名称,可以自定义,但是需要遵守规则: 比如指定为 Spring,那么最好在 classpath 路径中配置 Spring-servlet.xml,否则需要在子元素 <init-param> 特别指出 
        2.  <servlet-class> 因为要配置 MVC,所以指定为:org.springframework.web.servlet.DispatcherServlet
        3.  <init-param>[定义容器启动时初始化的配置文件,作用主要是指定自定义配置文件的路径,貌似可以指定多个]
            1.  <param-name>[contextConfigLocation,不可更改,原因见 3.1] 
            2.  <param-value>[可以自定义,如:classpath:spring-servlet.xml,如果不定义,那么默认为:classpath:${servlet-name}-servlet.xml,见 4.1]
            3.  <load-on-startup>[定义为 1,表示启动等级,[参考文章](http://blog.csdn.net/enjoyo/article/details/1761033)]
    5.  <servlet-mapping>
    
        1.  <servlet-name> 与 4.1 保持一致
        2.  <url-pattern> 一般定义为 “/”,表示所有请求都通过 DispatcherServlet 来处理
    6.  <filter>[以字符集为例]
    
        1.  <filter-name>[自行指定]
        2.  <filter-class>[org.springframework.web.filter.CharacterEncodingFilter]
        3.  <init-param>
            1.  <param-name>[encoding,不可更改,它是 CharacterEncodingFilter 中定义的一个成员变量]
            2.  <param-value>[UTF-8]
    7.  <filter-mapping>
    
        1.  <filter-name>[与 6.1 保持一致]
        2.  <url-pattern>[/* 表示所有请求都经过此过滤器过滤]
    
    

    示例

    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name></display-name>    
      <welcome-file-list>
        <welcome-file>/WEB-INF/views/home.jsp</welcome-file>
      </welcome-file-list>
    <!-- 加载指定位置的上下文配置文件 -->
      <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
        <context-param>   
       <param-name>log4jConfigLocation</param-name>   
       <param-value>classpath:log4j.properties</param-value>   
    </context-param>
      <!-- 定义LOG4J监听器 -->
    <listener>   
       <listener-class>   
            org.springframework.web.util.Log4jConfigListener   
       </listener-class>   
    </listener> 
    <listener>   
         <listener-class>   
              org.springframework.web.context.ContextLoaderListener   
         </listener-class>   
    </listener>
    <servlet>
          <servlet-name>Spring</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!-- 表示启动容器时初始化该servlet -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:Spring-servlet.xml</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>Spring</servlet-name>
              <!-- 表示哪些请求需要交给Spring Web MVC处理,/是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求 -->
              <url-pattern>/</url-pattern>
          </servlet-mapping>
        <!-- 使用spring解决中文乱码 -->
            <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
          </filter>
          
          <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>  
          </filter-mapping>
    </web-app>
    

    原文地址:DispatcherServlet 工作流程及 web.xml 配置

    相关文章

      网友评论

          本文标题:SpringMVC-DispatcherServlet 工作流程

          本文链接:https://www.haomeiwen.com/subject/xhqhpftx.html