Java web之web.xml配置详解

什么是web.xml

web.xml是web项目的配置文件,一般的web工程都会用到web.xml来配置,方便大型开发。web.xml主要用来配置Filter,Listener,Servlet等。但是web.xml并不是必须的,一个web工程可以没有web.xml文件。

web工程加载web.xml过程

web容器的加载顺序ServletContext -> context-param -> listener -> filter -> servlet。并且这些元素可以配置在文件中的任意位置,不会因为filter在web.xml文件中写在listener前面就先加载filter。
加载过程顺序如下

启动一个web项目,web容器会读取它的配置文件web.xml,读取两个结点。
创建一个ServletContext(Servlet上下文),这个web项目的所有部分都将共享这个上下文
容器将转换为键值对,并交给ServletContext
容器创建中的类实例,创建监听器

web.xml配置详解

1、schema
web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素中,都必须标明这个web.xml使用的是哪个模式文件。其他的元素都放在


<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、Web应用名称

用于标记这个特定的Web应用的名称

<display-name>Tomcat Exampledisplay-name>

3、Web应用描述

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

4、上下文参数

声明应用范围内的初始化参数。用于向Servlet+Context提供键值对,即应用程序上下文信息。后续的listener,filter在初始化时会用到这些上下文信息。在servlet里面可以通过getServletContext().getInitParameter(“context/param”)得到

	<context-param>
        <param-name>log4jConfigurationparam-name>
        <param-value>/WEB-INF/log4j2.xmlparam-value>
    context-param>

5、过滤器
filter可以认为是servlet的一种加强版,主要用于对用户请求request进行预处理,也可以对response进行后处理,是个典型的处理链。使用filter的完整流程是,filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet处理并生成响应。最后Filter再对服务器响应HttpServletResponse进行后处理。Servlet与Servlet具有完全相同的生命周期,而Filter也可以通过进行初始化参数的配置,并通过FilterConfig传送给filter
Filter的配置就是将此项目与一个实现javax.servlet.Filter接口的类相关联

<filter>
    <filter-name>setCharacterEncodingfilter-name>
    <filter-class>com.myTest.setCharacterEncodingFilterfilter-class>
    <init-param>
        <param-name>encodingparam-name>
        <param-value>UTF-8param-value>
    init-param>
filter>
<filter-mapping>
    <filter-name>setCharacterEncodingfilter-name>
    <url-pattern>/*url-pattern>
filter-mapping>

6、监听器

<listener> 
    <listerner-class>com.listener.SessionListenerlistener-class> 
listener>

7、

servlet老生常谈啦,是运行在服务器端的程序。传送门


<servlet>
    <servlet-name>snoopservlet-name>
    <servlet-class>SnoopServletservlet-class>
servlet>
<servlet-mapping>
    <servlet-name>snoopservlet-name>
    <url-pattern>/snoopurl-pattern>
servlet-mapping>

<servlet>
    <servlet-name>snoopservlet-name>
    <servlet-class>SnoopServletservlet-class>
    <init-param>
        <param-name>fooparam-name>
        <param-value>barparam-value>
    init-param>
    <run-as>
        <description>Security role for anonymous accessdescription>
        <role-name>tomcatrole-name>
    run-as>
servlet>
<servlet-mapping>
    <servlet-name>snoopservlet-name>
    <url-pattern>/snoopurl-pattern>
servlet-mapping>

8、会话超时配置

单位为秒

<session-config>
    <session-timeout>120session-timeout>
session-config>

9、欢迎文件页

<welcome-file-list>
    <welcome-file>index.jspwelcome-file>
    <welcome-file>index.htmlwelcome-file>
    <welcome-file>index.htmwelcome-file>
welcome-file-list>

关于欢迎页面:

访问一个网站时,默认看到的第一个页面就叫欢迎页,一般情况下是由首页来充当欢迎页的。一般情况下,我们会在web.xml中指定欢迎页。但web.xml并不是一个Web的必要文件,没有web.xml,网站仍然是可以正常工作的。只不过网站的功能复杂起来后,web.xml的确有非常大用处,所以,默认创建的动态web工程在WEB-INF文件夹下面都有一个web.xml文件。

当你只指定一个web的根名,没有指定具体页面,去访问时一个web时, 如果web.xml文件中配置了欢迎页,那么就返回指定的那个页面作为欢迎页,而在文中没有web.xml文件,或虽然有web.xml,但web.xml也没指定欢迎页的情况下,那么不同的应用服务器可能会有不同的行为,对于tomcat来说,它默认先查找index.html文件,如果找到了,就把index.html作为欢迎页还回给浏览器。如果没找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作为欢迎页面返回。而如果index.html和index.jsp都没找到,又没有用web.xml文件指定欢迎页面,那此时tomcat就不知道该返回哪个文件了,它就显示The requested resource (/XXX) is not available的页面。其中XXX表示web的根名。但如果你指定了具体页面,是可以正常访问的。(如果web根名下存在index.html和index.jsp,而某些应用服务器在web.xml中没指定欢迎页的情况下默认先查找index.jsp的话,其行为跟tomcat就不一样了,因此可能造成没配置web.xml欢迎页的项目,部署到不同的应用服务器看到不一样的首页的现象)。

10、设置jsp

包括 两个子元素。
元素主要有八个子元素,它们分别为:

<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>Taglibtaglib-uri>
        <taglib-location>/WEB-INF/tlds/MyTaglib.tldtaglib-location>
    taglib>
    <jsp-property-group>
        <description>Special property group for JSP Configuration JSP example.description>
        <display-name>JSPConfigurationdisplay-name>
        <url-pattern>/jsp/* url-pattern>
        <el-ignored>trueel-ignored>
        <page-encoding>GB2312page-encoding>
        <scripting-invalid>truescripting-invalid>
        <include-prelude>/include/prelude.jspfinclude-prelude>
        <include-coda>/include/coda.jspfinclude-coda>
    jsp-property-group>
jsp-config>

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

11、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。

<error-page>
    <error-code>404error-code>
    <location>/error404.jsplocation>
error-page>

<error-page>
    <exception-type>java.lang.Exception<exception-type>
    <location>/exception.jsp<location>
error-page>

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

<icon>    
<small-icon>/images/app_small.gifsmall-icon>    
<large-icon>/images/app_large.giflarge-icon>    
icon>

13、MIME类型配置

   <mime-mapping>    
      <extension>htmextension>    
      <mime-type>text/htmlmime-type>    
   mime-mapping>    

14、TLD配置

<taglib>    
       <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglibtaglib-uri>    
       <taglib-location>/WEB-INF/jsp/debug-taglib.tldtaglib-location>    
   taglib>    
   如果MyEclipse一直在报错,应该把<taglib> 放到 <jsp-config><jsp-config>    
      <taglib>    
          <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglibtaglib-uri>    
          <taglib-location>/WEB-INF/pager-taglib.tldtaglib-location>    
      taglib>    
   jsp-config>    

15、资源管理对象配置

   <resource-env-ref>    
       <resource-env-ref-name>jms/StockQueueresource-env-ref-name>    
   resource-env-ref>  

16、资源工厂配置

   <resource-ref>    
       <res-ref-name>mail/Sessionres-ref-name>    
       <res-type>javax.mail.Sessionres-type>    
       <res-auth>Containerres-auth>    
   resource-ref>   

配置数据库连接池就可在此配置:

    <resource-ref>    
       <description>JNDI JDBC DataSource of shopdescription>    
       <res-ref-name>jdbc/sample_dbres-ref-name>    
       <res-type>javax.sql.DataSourceres-type>    
       <res-auth>Containerres-auth>    
   resource-ref>  


17、安全限制配置

   <security-constraint>    
      <display-name>Example Security Constraintdisplay-name>    
      <web-resource-collection>    
         <web-resource-name>Protected Areaweb-resource-name>    
         <url-pattern>/jsp/security/protected/*url-pattern>    
         <http-method>DELETEhttp-method>    
         <http-method>GEThttp-method>    
         <http-method>POSThttp-method>    
         <http-method>PUThttp-method>    
      web-resource-collection>    
      <auth-constraint>    
        <role-name>tomcatrole-name>    
        <role-name>role1role-name>    
      auth-constraint>    
   security-constraint> 

18、登陆验证配置

   <login-config>    
     <auth-method>FORMauth-method>    
     <realm-name>Example-Based Authentiation Arearealm-name>    
     <form-login-config>    
        <form-login-page>/jsp/security/protected/login.jspform-login-page>    
        <form-error-page>/jsp/security/protected/error.jspform-error-page>    
     form-login-config>    
   login-config>    

19、安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。
分别地声明角色可使高级IDE处理安全信息更为容易。

<security-role>    
     <role-name>tomcatrole-name>    
security-role>    

20、配置DWR

<servlet>    
      <servlet-name>dwr-invokerservlet-name>    
      <servlet-class>uk.ltd.getahead.dwr.DWRServletservlet-class>    
servlet>    
<servlet-mapping>    
      <servlet-name>dwr-invokerservlet-name>    
      <url-pattern>/dwr/*url-pattern>    
servlet-mapping>  

你可能感兴趣的:(学习笔记)