web.xml文件详解
媒介:平常的web工程中都会用到web.xml,web.xml重要用来设置,能够轻易的开辟web工程。web.xml重要用来设置Filter、Listener、Servlet等。然则要申明的是web.xml并非必需的,一个web工程能够没有web.xml文件。
1、WEB工程加载web.xml历程
经由个人测试,WEB工程加载递次与元素节点在文件中的设置递次无关。即不会由于 filter 写在 listener 的前面而会先加载 filter。WEB容器的加载递次是:ServletContext -> context-param -> listener -> filter -> servlet。而且这些元素能够设置在文件中的恣意位置。
加载历程递次以下:
启动一个WEB项目的时刻,WEB容器会去读取它的设置文件web.xml,读取<listener>和<context-param>两个结点。
紧急着,容建立一个ServletContext(servlet高低文),这个web项目的一切部份都将同享这个高低文。
容器将<context-param>转换为键值对,并交给servletContext。
容器建立<listener>中的类实例,建立监听器。
2、web.xml文件元素详解
1、schema
web.xml的形式文件是由Sun公司定义的,每一个web.xml文件的根元素<web-app>中,都必需标明这个 web.xml运用的是哪一个形式文件。别的的元素都放在<web-app></web-app>当中。
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"></web-app>
2、<icon>Web运用图标
指出IDE和GUI东西用来示意Web运用的大图标和小图标。
<icon> <small-icon>/images/app_small.gif</small-icon> <large-icon>/images/app_large.gif</large-icon></icon>
3、<display-name>Web运用称号
供应GUI东西可能会用来标记这个特定的Web运用的一个称号
<display-name>Tomcat Example</display-name>
4、<disciption>Web运用形貌
给出于此相干的申明性文本
<disciption>Tomcat Example servlets and JSP pages.</disciption>
5、<context-param>高低文参数
声明运用局限内的初始化参数。它用于向 ServletContext供应键值对,即运用程序高低文信息。我们的listener, filter等在初始化时会用到这些高低文中的信息。在servlet内里能够经由过程getServletContext().getInitParameter("context/param")获得。
<context-param> <param-name>ContextParameter</para-name> <param-value>test</param-value> <description>It is a test parameter.</description></context-param>
6、<filter>过滤器
将一个名字与一个完成javaxs.servlet.Filter接口的类相干联。
<filter> <filter-name>setCharacterEncoding</filter-name> <filter-class>com.myTest.setCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param></filter><filter-mapping> <filter-name>setCharacterEncoding</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
7、<listener>监听器
<listener> <listerner-class>com.listener.SessionListener</listener-class> </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
<!-- 基础设置 --><servlet> <servlet-name>snoop</servlet-name> <servlet-class>SnoopServlet</servlet-class></servlet><servlet-mapping> <servlet-name>snoop</servlet-name> <url-pattern>/snoop</url-pattern></servlet-mapping><!-- 高等设置 --><servlet> <servlet-name>snoop</servlet-name> <servlet-class>SnoopServlet</servlet-class> <init-param> <param-name>foo</param-name> <param-value>bar</param-value> </init-param> <run-as> <description>Security role for anonymous access</description> <role-name>tomcat</role-name> </run-as></servlet><servlet-mapping> <servlet-name>snoop</servlet-name> <url-pattern>/snoop</url-pattern></servlet-mapping>
9、<session-config>会话超时设置
单元为分钟。
<session-config> <session-timeout>120</session-timeout></session-config>
10、<mime-mapping>
<mime-mapping> <extension>htm</extension> <mime-type>text/html</mime-type></mime-mapping>
11、<welcome-file-list>迎接文件页
<welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file></welcome-file-list>
12、<error-page>毛病页面
<!-- 1、经由过程毛病码来设置error-page。当体系发作×××毛病时,跳转到毛病处理页面。 --><error-page> <error-code>404</error-code> <location>/NotFound.jsp</location></error-page><!-- 2、经由过程非常的范例设置error-page。当体系发作java.lang.NullException(即空指针非常)时,跳转到毛病处理页面。 --><error-page> <exception-type>java.lang.NullException</exception-type> <location>/error.jsp</location></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
<jsp-config> <taglib> <taglib-uri>Taglib</taglib-uri> <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location> </taglib> <jsp-property-group> <description>Special property group for JSP Configuration JSP example.</description> <display-name>JSPConfiguration</display-name> <url-pattern>/jsp/* </url-pattern> <el-ignored>true</el-ignored> <page-encoding>GB2312</page-encoding> <scripting-invalid>true</scripting-invalid> <include-prelude>/include/prelude.jspf</include-prelude> <include-coda>/include/coda.jspf</include-coda> </jsp-property-group></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了。
其婚配划定规矩和递次以下:
准确途径婚配。例子:比方servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时刻,假如我接见的url为http://localhost/test ,这个时刻容器就会先 举行准确途径婚配,发明/test恰好被servletA准确婚配,那末就去挪用servletA,也不会去剖析其他的servlet了。
最长途径婚配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时接见http://localhost/test/a时,容器会挑选途径最长的servlet来婚配,也就是这里的servletB。
扩大婚配,假如url末了一段包含扩大,容器将会依据扩大挑选适宜的servlet。例子:servletA的url-pattern:*.action
以”/’开首和以”/*”末端的是用来做途径映照的。以前缀”*.”开首的是用来做扩大映照的。所以,为何定义”/*.action”如许一个看起来很正常的婚配会错?由于这个婚配即属于途径映照,也属于扩大映照,致使容器没法推断。
以上就是web.xml文件内容细致分析的细致内容,更多请关注ki4网别的相干文章!