1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
1.背景介绍
web.xml作用:
当我们用IDEA创建一个webapp项目时,往往在WEB-INF文件夹下,会生成一个web.xml文件,这个配置文件的作用,就是初始化配置信息的。
比如:Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。如果工程不需要上述配置时,则web.xml就不是必需的了。
2.知识剖析
web.xml配置元素:
web.xml配置元素
1.根元素
web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素中, 都必须标明这个web.xml使用的是哪个模式文档。其它的元素都放在之中,也是根节点。
2.上下文参数
含有一对或多对参数名和参数值,用作应用的Servlet上下文初始化参数,参数名在整个Web应用中必须是惟一的, 在web应用的整个生命周期中上下文初始化参数都存在,Servlet和jsp任何时候可以对其进行访问。
3.监听器
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。
在application,session,request三个对象创建、销毁或者属性变动时自动执行代码的功能组件。
常见的listener有:ServletContextListener、ServletRequestListener、HttpSessionListener等。
4.过滤器
过滤器对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。
5.servlet
servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。 Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。
servlet后常跟servlet-mapping,该元素在Servlet和URL样式之间定义一个映射,即servlet类提供一个url,在地址栏输入对应的映射路径就可以访问servlet。
3.常见问题
web.xml的加载过程,元素的加载顺序
4.解决方案
WEB容器启动时,加载过程如下:
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取和两个结点。
2.然后,容器创建一个ServletContext,这个web项目的所有部分都将共享这个上下文。
3.容器将转换为键值对,并交给servletContext。
4.容器创建&lft;listener>中的类实例,创建监听器。
首先可以肯定的是,加载顺序与它们在web.xml文件中的先后顺序无关。即不会因为filter写在listener的前面而会先加载filter。 同时还存在着这样一种配置节:context-param,它用于向ServletContext提供键值对,即应用程序上下文信息。
web.xml的加载顺序是:context-param->listener->filter->servlet而同个类型之间的实际程序调用的时候的顺序是根据对应的mapping的顺序进行调用的。
load-on-startup元素标记容器是否在启动的时候就加载这个servlet,当配置了多个servelet的时候,容器就需要读取它的值来决定加载顺序。
当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet。
正数的值越小,该servlet的优先级越高,应用启动时就越先加载。所以,x,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。
5.编码实战
6.扩展思考
filter、listener、interceptor之间的区别
filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应: 在执行servlet之前,首先执行filter程序,并为之做一些预处理工作; 根据程序需要修改请求和响应; 在servlet被调用之后截获servlet的执行
listener的作用则与接口类型有关,监听器是在发生关注的事件后回调开发者提供的方法。
interceptor 拦截器,类似于filter,不过它不在web.xml中配置,跟使用的框架有关,如果使用Spring框架则在spring容器指定的配置文件中配置;并且不是针对URL的,而是针对action,当页面提交 action时,进行过滤操作。
7.参考文献
https://www.cnblogs.com/shangxiaofei/p/5328377.html
http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html
8.更多讨论
web.xml可选元素和出现次数?
web-app (icon?, display-name?, description?, distributable?, context-param*, filter*, filter-mapping*, listener*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*, login-config?, security-role*,env-entry*, ejb-ref*, ejb-local-ref*
问号(?)表示子元素是可选的,而且只能出现一次。星号(*)表示子元素可在部署描述符中出现零次或多次。
url-pattern有哪些匹配规则?
精确匹配 路径匹配 匹配任意的url
ptteng.github.io/PPT/PPT-java/JAVA-task2-web.xml.html#/