SpringMVC-DispatcherServlet 工作流程及 web.xml 配置(转)

工作流程:

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 配置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容