一、.启动tomcat,加载项目中的web.xml文件,创建servercontext上下文对象。

可以通过servercontext对象在应用中获取web.xml文件中的值。

web应用加载的顺序与元素节点在文件中的配置顺序无关,web容器的加载顺序是ServletContext -> context-param -> listener -> filter -> servlet

加载过程顺序如下:

  1. 启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。
  2. 紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。
  3. 容器将<context-param>转换为键值对,并交给servletContext。
  4. 容器创建<listener>中的类实例,创建监听器。

二、web.xml文件中各节点的解析

1、schema

  web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素<web-app>中,都必须标明这个 web.xml使用的是哪个模式文件。其它的元素都放在<web-app></web-app>之中。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. </web-app>

 2、<icon>Web应用图标

  指出IDE和GUI工具用来表示Web应用的大图标和小图标。

  1. <icon>
  2. <small-icon>/images/app_small.gif</small-icon>
  3. <large-icon>/images/app_large.gif</large-icon>
  4. </icon>

  3、<display-name>Web应用名称

  提供GUI工具可能会用来标记这个特定的Web应用的一个名称

  1. <display-name>Tomcat Example</display-name>

  4、<disciption>Web应用描述

  给出于此相关的说明性文本

  1. <disciption>Tomcat Example servlets and JSP pages.</disciption>

  5、<context-param>上下文参数

  声明应用范围内的初始化参数。它用于向 ServletContext提供键值对,即应用程序上下文信息。我们的listener, filter等在初始化时会用到这些上下文中的信息。在servlet里面可以通过getServletContext().getInitParameter("context/param")得到。

  1. <context-param>
  2. <param-name>ContextParameter</para-name>
  3. <param-value>test</param-value>
  4. <description>It is a test parameter.</description>
  5. </context-param>

  6、<filter>过滤器

  将一个名字与一个实现javaxs.servlet.Filter接口的类相关联。

  1. <filter>
  2. <filter-name>setCharacterEncoding</filter-name>
  3. <filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
  4. <init-param>
  5. <param-name>encoding</param-name>
  6. <param-value>UTF-8</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>setCharacterEncoding</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

  7、<listener>监听器

  1. <listener>
  2. <listerner-class>com.listener.SessionListener</listener-class>
  3. </listener>

  8、<servlet>

  <servlet></servlet> 用来声明一个servlet的数据,主要有以下子元素:

  • <servlet-name></servlet-name> 指定servlet的名称
  • <servlet-class></servlet-class> 指定servlet的类名称
  • <jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
  • <init-param></init-param> 用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数
  • <load-on-startup></load-on-startup>指定当Web应用启动时,装载Servlet的次序。当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。
  • <servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素
  • <servlet-name></servlet-name> 指定servlet的名称
  • <url-pattern></url-pattern> 指定servlet所对应的URL
  1. <!-- 基本配置 -->
  2. <servlet>
  3. <servlet-name>snoop</servlet-name>
  4. <servlet-class>SnoopServlet</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>snoop</servlet-name>
  8. <url-pattern>/snoop</url-pattern>
  9. </servlet-mapping>
  10. <!-- 高级配置 -->
  11. <servlet>
  12. <servlet-name>snoop</servlet-name>
  13. <servlet-class>SnoopServlet</servlet-class>
  14. <init-param>
  15. <param-name>foo</param-name>
  16. <param-value>bar</param-value>
  17. </init-param>
  18. <run-as>
  19. <description>Security role for anonymous access</description>
  20. <role-name>tomcat</role-name>
  21. </run-as>
  22. </servlet>
  23. <servlet-mapping>
  24. <servlet-name>snoop</servlet-name>
  25. <url-pattern>/snoop</url-pattern>
  26. </servlet-mapping>

  9、<session-config>会话超时配置

  单位为分钟。

  1. <session-config>
  2. <session-timeout>120</session-timeout>
  3. </session-config>

  10、<mime-mapping>

  1. <mime-mapping>
  2. <extension>htm</extension>
  3. <mime-type>text/html</mime-type>
  4. </mime-mapping>

  11、<welcome-file-list>欢迎文件页

  1. <welcome-file-list>
  2. <welcome-file>index.jsp</welcome-file>
  3. <welcome-file>index.html</welcome-file>
  4. <welcome-file>index.htm</welcome-file>
  5. </welcome-file-list>

  12、<error-page>错误页面

 
  1. <!-- 1、通过错误码来配置error-page。当系统发生×××错误时,跳转到错误处理页面。 -->
  2. <error-page>
  3. <error-code>404</error-code>
  4. <location>/NotFound.jsp</location>
  5. </error-page>
  6. <!-- 2、通过异常的类型配置error-page。当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面。 -->
  7. <error-page>
  8. <exception-type>java.lang.NullException</exception-type>
  9. <location>/error.jsp</location>
  10. </error-page>
 

  13、<jsp-config>设置jsp

  <jsp-config> 包括 <taglib> 和 <jsp-property-group> 两个子元素。其中<taglib> 元素在JSP 1.2 时就已经存在;而<jsp-property-group> 是JSP 2.0 新增的元素。

  <jsp-property-group> 元素主要有八个子元素,它们分别为:

  • <description>:设定的说明
  • <display-name>:设定名称
  • <url-pattern>:设定值所影响的范围,如: /CH2 或 /*.jsp
  • <el-ignored>:若为 true,表示不支持 EL 语法
  • <scripting-invalid>:若为 true,表示不支持 <% scripting %>语法
  • <page-encoding>:设定 JSP 网页的编码
  • <include-prelude>:设置 JSP 网页的抬头,扩展名为 .jspf
  • <include-coda>:设置 JSP 网页的结尾,扩展名为 .jspf
  1. <jsp-config>
  2. <taglib>
  3. <taglib-uri>Taglib</taglib-uri>
  4. <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
  5. </taglib>
  6. <jsp-property-group>
  7. <description>Special property group for JSP Configuration JSP example.</description>
  8. <display-name>JSPConfiguration</display-name>
  9. <url-pattern>/jsp/* </url-pattern>
  10. <el-ignored>true</el-ignored>
  11. <page-encoding>GB2312</page-encoding>
  12. <scripting-invalid>true</scripting-invalid>
  13. <include-prelude>/include/prelude.jspf</include-prelude>
  14. <include-coda>/include/coda.jspf</include-coda>
  15. </jsp-property-group>
  16. </jsp-config>

  对于Web 应用程式来说,Scriptlet 是个不乐意被见到的东西,因为它会使得HTML 与Java 程式码交相混杂,对于程式的维护来说相当的麻烦,必要的时候,可以在web.xml 中加上<script-invalid> 标签,设定所有的JSP 网页都不可以使用Scriptlet。

3、Mapping规则

  当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了。

  其匹配规则和顺序如下:

  1. 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
  2. 最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
  3. 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action

  以”/’开头和以”/*”结尾的是用来做路径映射的。以前缀”*.”开头的是用来做扩展映射的。所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

三、web.xml实例

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  3.   <display-name>AdminToolWebService</display-name>
  4.   <servlet>
  5.     <servlet-name>Tiles Dispatch Servlet</servlet-name>
  6.     <servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
  7.   </servlet>
  8.   <servlet-mapping>
  9.     <servlet-name>Tiles Dispatch Servlet</servlet-name>
  10.     <url-pattern>*.tiles</url-pattern>
  11.   </servlet-mapping>
  12.  
  13.   <servlet>
  14.     <servlet-name>ImageServlet</servlet-name>
  15.     <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
  16.   </servlet>
  17.   <servlet-mapping>
  18.     <servlet-name>ImageServlet</servlet-name>
  19.     <url-pattern>/service/reportImages</url-pattern>
  20.   </servlet-mapping>
  21.  
  22.   <!-- Srping MVC -->
  23.   <servlet>
  24.     <servlet-name>spring</servlet-name>
  25.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  26.     <load-on-startup>1</load-on-startup>
  27.   </servlet>
  28.   <servlet-mapping>
  29.     <servlet-name>spring</servlet-name>
  30.     <url-pattern>/</url-pattern>
  31.   </servlet-mapping>
  32.   <context-param>
  33.     <param-name>logbackConfigLocation</param-name>
  34.     <param-value>classpath:logback.xml</param-value>
  35.   </context-param>
  36.   <listener>
  37.     <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
  38.   </listener>
  39.   <!--
  40.   <listener>
  41.     <listener-class>com.ricoh.rapp.ezcx.admintoolweb.listener.ContextDestroyListener</listener-class>
  42.   </listener>
  43.   -->
  44.   <listener>
  45.     <listener-class>com.ricoh.rapp.ezcx.admintoolweb.interceptor.CusSessionListener</listener-class>
  46.   </listener>
  47.  
  48.   <!-- Do not use default webapp.root, it will be duplicated with AdminTool Web Service -->
  49.   <context-param>
  50.     <param-name>webAppRootKey</param-name>
  51.     <param-value>admintoolwebservice.root</param-value>
  52.   </context-param>
  53.  
  54.   <filter>
  55.     <filter-name>encodingFilter</filter-name>
  56.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  57.     <init-param>
  58.       <param-name>encoding</param-name>
  59.       <param-value>UTF-8</param-value>
  60.     </init-param>
  61.     <init-param>
  62.       <param-name>forceEncoding</param-name>
  63.       <param-value>true</param-value>
  64.     </init-param>
  65.   </filter>

  66.   <filter-mapping>
  67.     <filter-name>encodingFilter</filter-name>
  68.     <url-pattern>/*</url-pattern>
  69.   </filter-mapping>
  70.   <welcome-file-list>
  71.     <welcome-file>index.jsp</welcome-file>
  72.   </welcome-file-list>
  73.  
  74.   <servlet-mapping>
  75.     <servlet-name>default</servlet-name>
  76.     <url-pattern>*.css</url-pattern>
  77.   </servlet-mapping>
  78.   <servlet-mapping>
  79.     <servlet-name>default</servlet-name>
  80.     <url-pattern>*.js</url-pattern>
  81.   </servlet-mapping>
  82.  
  83.   <error-page>
  84.     <error-code>405</error-code>
  85.     <location>/index.jsp</location>
  86.   </error-page>
  87. </web-app>

javaweb项目中关于配置文件web.xml的解析的更多相关文章

  1. maven项目中如何创建web.xml

    在web工程创建时创建web.xml:用Eclipse新建一个web项目没有自动生成web.xml 在创建maven工程时,大多没有创建web.xml文件,web.xml路径:src/main/web ...

  2. zookeeper中controller项目中资源配置文件applicationContext.xml配置文件编写

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  3. 1、javaweb学习之配置文件web.xml

    今天这里主要讲述javaweb中的配置文件web.xml中的内容及其作用,都是基础部分,对于初学者需要好好掌握理解. 简单配置: <servlet>    <servlet-name ...

  4. JavaWeb项目中web.xml有关servlet的基本配置

    JavaWeb项目中web.xml有关servlet的基本配置: 我们注意到,tomcat下的conf中也有一个web.xml文件,没错的,所有的JavaWeb项目中web.xml都继承自服务器下的w ...

  5. ssm框架中,项目启动过程以及web.xml配置详解

    原文:https://blog.csdn.net/qq_35571554/article/details/82385838 本篇主要在基于SSM的框架,深入讲解web.xml的配置 web.xml   ...

  6. 转 web项目中的web.xml元素解析

    转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45)   阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...

  7. log4j在javaWeb项目中的使用

    在前边的文章中对log4j的配置文件进行了说明,今天介绍如何在普通的javaWeb项目中使用log4j. 在日常的开发过程中,日志使用的很频繁,我们可以利用日志来跟踪程序的错误,程序运行时的输出参数等 ...

  8. Druid使用起步—在javaWeb项目中配置监控 连接池

    当我们在javaWEB项目中使用到druid来作为我们的连接池的时候,一定不会忘了添加监控功能.下面我们就来看一下,在一个简单的web项目中(尚未使用任何框架)我们是如果来配置我们的web.xml来完 ...

  9. JavaWeb 项目中的绝对路径和相对路径以及问题的解决方式

    近期在做JavaWeb项目,总是出现各种的路径错误,并且发现不同情况下 /  所代表的含义不同,导致在调试路径上浪费了大量时间. 在JavaWeb项目中尽量使用绝对路径  由于使用绝对路径是绝对不会出 ...

随机推荐

  1. Solution -「牛客 NOIP 模拟赛」打拳

    \(\mathcal{Description}\)   现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...

  2. Solution -「洛谷 P4320」道路相遇

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...

  3. Solution -「AGC 003D」「AT 2004」Anticube

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个数 \(a_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数.   \(n\le10^5\) ...

  4. Python基础—函数(Day9)

    一.函数的定义 def 关键字,定义一个函数 my_len 函数名(书写规则与变量名一样) def与函数名中间一个空格. def与函数名中间一个空格. 函数名():加冒号 函数体 my_len()#函 ...

  5. nginx负载均衡初体验

    本例采取简单的轮询策略进行nginx的负载均衡处理. 在反向代理(参考:https://www.cnblogs.com/ilovebath/p/14771571.html)的基础上增加负载均衡处理的n ...

  6. QQ表情代码大全,你知道几个??

    很久没有给大家分享代码了,今天趁着有点时间来给大家分享一下QQ空间的表情代码!不用感谢我,大家拿去用吧! [em]e100[/em] 微笑bai[em]e101[/em] 撇嘴[em]e102[/em ...

  7. SpringBoot实现QQ邮件发送

    建项目 创建一个SpringBoot项目 改pom,导入相关依赖 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE & ...

  8. 网络测试技术——802.1X_MD5认证(上篇)

    一.MD5认证简介 1.认证过程 (1)无隧道 (2)客户端和服务器之间进行 2.单向认证 (1)服务器对客户端认证 3.缺点 (1)用户名明文传输 (2)弱MD5哈希   二.MD5认证过程 1.客 ...

  9. 用商业智能BI做出来的报表,甩别人一条街!

    同样是做数据分析的,会商业智能BI的人做的报表都比别人好看.这里所说的好看其实是包括了两个意义,一是排版.色彩搭配等,颜值上的好看:二是把数据分析结果展现地直观易懂上的"好看".想 ...

  10. LayUI使用注意

    # layui获取.修改checkbox的值 <input type="checkbox" name="MySwitch" value="x&q ...