Spring MVC的web.xml配置详解
java小课堂
分享人:方广辉
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
1.背景介绍
web.xml是servlet规定的启动配置文件,凡属基于servlet的javaWeb容器必遵守这个规范,而目前主流的容器都是基于servlet的,因此可以理解web.xml是每个javaweb应用都离不开web.xml配置文件.
web.xml完整的名字应该叫做部署描述符文件,当容器启动时会去读这个文件,然后加载相关配置,该文件通常会放在WEB-INF文件夹下。当我们去启动一个WEB项目时,Tomcat首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。
web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的Application。
2.知识剖析
web.xml基本元素
元素1 context-param
含义context-param 元素用来设定web应用的环境参数(context),它包含两个子元素:param-name和param-value.
元素2,3 filter与filter-mapping
含义filter元素用来设定web应用的过滤器,它的两个主要子元素filter-name和filter-class用来定义Filter所对应的class,filter-mapping 元素的两个主要子元素filter-name和url-pattern.用来定义Filter所对应的URL.
元素4 listener
含义listener元素用来定义Listener接口,它的主要子元素为listener-class
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。
元素5,6 servle、servlet-mapping
含义servlet元素的两个主要子元素servlet-name和servlet-class用来定义servlet所对应的class
servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL.
3.常见问题
1)在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?
2)web.xml中标签的加载顺序
4.解决方案
1. 配置一个编码过滤器
1.启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: listener和context-param。
2. 紧接着,容器创建一个ServletContext(application),这个WEB项目所有部分都将共享这个上下文。
3. 容器以context-param的name作为键,value作为值,将其转化为键值对,存入ServletContext。
4. 容器创建listener中的类实例,根据配置的class类路径listener-class来创建监听,
在监听中会有contextInitialized(ServletContextEventargs)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中获得:
context-param的值,得到这个context-param的值之后,你就可以做一些操作了。
5. 接着,容器会读取filter,根据指定的类路径来实例化过滤器。
6. 以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。
如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。
7. 总的来说,web.xml的加载顺序是:context-param-> listener -> filter -> servlet。
其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。
5.编码实战
web.xml各个配置详解
6.扩展思考
7.参考文献
文献一: https://blog.csdn.net/zuoluoboy/article/details/4213053
文献二: http://www.cnblogs.com/hxsyl/p/3435412.html
文献三: https://blog.csdn.net/qing_gee/article/details/50965562
8.更多讨论
url请求在web.xml的servlet里的处理过程是怎么样的
web.xml中的标签有顺序吗
web.xml的加载顺序是:context-param-> listener -> filter -> servlet
过滤器再web.xml中的编写有没有顺序?
没有顺序,多个过滤器会按照web.xml文件中顺序加载