【Java.Web】web.xml详解

来源:互联网 发布:免费gis软件 编辑:程序博客网 时间:2024/05/17 07:12

web.xml文件是Java Web应用的XML格式的配置文件,存放在WEB-INF子目录下。web.xml文件由开发人员编写,共Servlet容器访问。web.xml文件也被称为Java Web应用的发布描述符文件,Servlet容器在加载和启动Java Web应用时会读取它的web.xml文件,从中获得关于当前Web应用的发布信息。

定义元素

web.xml中定义了如下的元素:

  • <web-app>——Web应用的根元素
  • <display-name>——Web应用的名字
  • <description>——对Web应用的描述
  • <distributalbe>——指定该站点是否可分布式处理
  • <context-param>——设定站点的环境参数
  • <filter>——定义过滤器
  • <filter-mapping>——为过滤器指定URL映射
  • <servlet>——定义Servlet
  • <servlet-mapping>——为Servlet指定URL映射
  • <listener>——用来设定listener接口
  • <mime-mapping>——定义某一个扩展名和某一个MIME TYPE的映射
  • <session-config>——配置HTTP会话
  • <welcome-file-list>——设置Web应用的Welcome文件清单
  • <error-page>——处理错误代码或异常的页面
  • <taglib>——声明引用的标签库
  • <resource-ref>——声明引用的JNDI资源
  • <security-constraint>——配置安全约束
  • <login-config>——配置安全验证登陆界面
  • <security-role>——配置安全角色

配置详解

根元素<web-app>

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"></web-app>


配置站点的环境参数<context-param>

例如:

<context-param>    <param-name>my_param</param-name>    <param-value>hello</param-value></context-param>

在此设定的参数,可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得。

子元素:

  • <param-name>——参数名称
  • <param-value>——参数值

配置参数 —— webAppRootKey

在web容器下部署两个或者多个项目时,web.xml文件中最好定义webAppRootKey参数,不过不定义,将会缺省为”webapp.root“,如下:

<context-param>          <param-name>webAppRootKey</param-name>          <param-value>webapp.root</param-value>  </context-param>

最好对每个项目设置不同的值,以免引起项目冲突:

<!-- 应用1 --><context-param>          <param-name>webAppRootKey</param-name>          <param-value>webapp.root1</param-value>  </context-param>

<!-- 应用2 --><context-param>          <param-name>webAppRootKey</param-name>          <param-value>webapp.root2</param-value>  </context-param>


可以用System.getProperty("webapp.root")来动态获项目的运行路径。
一般返回结果例如:/usr/local/tomcat6/webapps/项目名


对多个项目进行不同的webAppRootKey的设置的目的:主要是为了设置 log 日志的输出目录:

通常,我们想将 log 日志的输出到对应项目的根目录下,在log4j的配置文件.properties或xml中通过指定该参数的值指定对应应用的根目录:

在log4j.properties配置文件,就可以按下面的方式使用${webapp.root}

 log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log 或 log4j.appender.file.File=${webapp.root1}/WEB-INF/logs/sample.log 或 log4j.appender.file.File=${webapp.root2}/WEB-INF/logs/sample.log 

就可以在运行时动态的找出项目的路径,设置log的输出路径。

参见Spring MVC 中的 Listener


配置过滤器<filter>

在Web应用中加入过滤器,需要在web.xml中配置两个元素:<filter>和<filter-mapping>。例如:

<filter>    <filter-name>SampleFilter</filter-name>    <filter-class>mypack.SampleFilter</filter-class></filter>
上面代码定义了一个过滤器,filter元素的子元素描述参见表:

  • <filter-name>——定义过滤器的名字,当Web应用中有多个过滤器时,不允许过滤器重名
  • <filter-class>——指定实现这一过滤器的类,这个类负责具体的过滤事务

<filter-mapping>元素用来设定过滤器负责过滤的URL,

<filter-mapping>    <filter-name>SampleFilter</filter-name>    <url-pattern>*.jsp</url-pattern></filter-mapping>
上面代码指明当客户请求访问Web应用中的所有JSP文件时,将处罚SampleFilter过滤器工作。具体的过滤事务由在<filter>元素中指定的类完成。

<filter-mapping>元素的子元素描述参见表:

  • <filter-name>——指定过滤器名,这里的过滤器名必须和<filter>元素中定义的过滤器名匹配
  • <url-pattern>——指定过滤器负责过滤的URL

配置Servlet<servlet>

<servlet>元素用来定义servlet,例如:

<servlet>   <servlet-name>SampleServlet</servlet-name>   <servlet-class>mypack.SampleServlet</servlet-class>   <init-param>     <param-name>initParm1</param-name>     <param-value>2</param-value>   </init-param>   <load-on-startup>1</load-on-startup></servlet>
<servlet>元素属性描述参见:

  • <servlet-name>——定义Servlet的名字
  • <servlet-class>——指定实现这个Servlet的类
  • <init-param>——定义Servlet的初始化参数(包括参数名和参数值),在一个<servlet>元素中可以有多个<init-param>,在Servlet类中通过getInitParameter(String name)方法访问初始化参数
  • <laod-on-startup>——指定当web应用启动时,加载Servlet的次序,当这个值为正数或零时,Servlet容器先加载数值较小的Servlet,再依次加载其他数值大的Servlet。如果这个值为负数或者没有设定,那么Servlet容器在Web客户端首次访问这个Servlet时加载它。


配置Servlet映射<servlet-mapping>

<servlet-mapping>元素用来设定客户访问某个Servlet的URL,例如:

<servlet-mapping>  <servlet-name>SampleServlet</servlet-name>  <url-pattern>/sample</url-pattern></servlet-mapping>
<servlet-mapping>使得程序中定义的Servlet类名和访问URL彼此独立。当Servlet类名发生改变时,只要修改<servlet-class>子元素即可。

<servlet-mapping>元素的子元素参见:

  • <servlet-name>——指定Servlet的名字,与<servlet>元素中的名字匹配
  • <url-pattern>——指定访问这个Servlet的URL,这里只需给出相对于整个Web应用的URL路径。参见 Servlet 和 Filter 的 URL 一节

url-pattern的设置

参见 Servlet 和 Filter 的 URL 设置一节。


配置Listener<listener>

例如,

<listener>    <listener-class>com.myTest.ContextListener</listener-class> </listener>

子元素,

  • <listener-class>——定义listener类的名字


配置Session<session-config>

<session-config>元素用来设定HTTP Session的生命周期。例如,

<span style="font-size:10px;font-weight: normal;"><session-config>    <session-timeout>30<session-timeout></session-config></span>
指明Session可以保持不活动状态的最长时间为30秒,超过这一时间,Servelt容器将把它作为无效的Session处理。

<session-config>元素之包括一个子元素<session-timeout>,用来设定Session可以保持不活动状态的最长时间,这里采用的单位是“秒”。


配置MIME TYPE映射<mime-mapping>

例如,

<mime-mapping>    <extension>doc</extension>    <mime-type>application/vnd.ms-word</mime-type></mime-mapping> <mime-mapping>    <extension>xls</extension>    <mime-type>application/vnd.ms-excel</mime-type></mime-mapping>

子元素,

  • <extension>——扩展名名称
  • <mime-type>——MIME格式


配置Welcome文件清单<welcome-file-list>

当客户访问Web应用时,如果仅仅给出Web应用的ROOT URL,没有指定具体的文件名,Servlet容器会自动调用Web应用的Welcome文件。<welcome-file-list>元素用来设定Welcome文件清单。

<welcome-file-list>    <welcome-file>login.jsp</welcome-file>    <welcome-file>index.htm</welcome-file></welcome-file-list>
在<welcome-file-list>中可以包含多个<welcome-list>,当Servlet容器调用Web应用的Welcome文件时,会自动寻找第一个<welcome-file>指定的文件(通常位于Webcontent目录下,与WEB-INF同一层级)。如果这个文件存在,那么把这一文件返回给客户;如果不存在,则Servlet容器依次寻找下一个Welcome文件,直到找到为止;如果<welcome-file-list>元素中指定的所有文件都不存在,服务器向客户端返回“HTTP 404 NOT FOUND”的错误信息。

配置ERROR页面<error-page>

例如:

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

子元素,

  • <error-code>——错误代码
  • <exception-type>——Java异常类型
  • <location>——相关资源路径


配置Tag Library<taglib>

<taglib>元素用来设置Web应用所引用的Tag Library,

<taglib>    <taglib-uri>/mytaglib</taglib-uri>    <taglib-location>/WEB-INF/mytaglib.tld</taglib-location></taglib>

<taglib>元素的子元素,

  • <taglib-uri>——设定Tag Library的唯一标识符,在Web应用中将根据这一标识符来引用Tag Library
  • <taglib-location>——指定Tag Library对应的TLD文件的位置

在JSP文件中可以引用Tag,

<%@ taglib prefix="c" uri="/mytaglib" %>
注:也可以不在web.xml中显式声明<taglib>;可以直接在jsp文件中引用,具体参见JSP标签库的使用


配置资源引用<resource-ref>

如果Web应用访问了由Servlet容器管理的某个JNDI Resource。则必须在web.xml文件中声明对这个JNDI Resource的引用。

表示资源引用的元素为<resource-ref>,

<resource-ref>    <description>DB Connection</description>    <res-ref-name>jdbc/sampleDB</res-ref-name>    <res-type>javav.sql.DataSource</res-type>    <res-auth>Container</res-auth></resource-ref>

<resource-ref>的子元素,

  • <description>——对所引用的资源的说明
  • <res-ref-name>——指定所引用资源的JNDI名字
  • <res-type>——指定所引用资源的类名字
  • <res-auth>——指定管理所引用资源的Manager,它有两个可选值:Container和Application,Container表示由容器来创建和管理Resource;Application表示由Web应用来创建和管理Resource


安全登陆、验证

配置web.xml来限制对某些资源,servlet的请求。有时我们只希望通过认证的用户才能请求某些servlet的话,就可以在web.xml中来进行相应的配置,来达到此目的。
对于tomcat,如果要在web.xml使用<security-constraint>元素,需要在位于<Tomcat-installation-directory>/conf/tomcat-users.xml的XML文件中创建用户名和密码。例如:

<?xml version='1.0' encoding='utf-8'?><tomcat-users>  <role rolename="tomcat"/>  <role rolename="manager"/>  <role rolename="admin"/>  <user username="tomcat" password="tomcat" roles="tomcat"/>  <user username="both" password="tomcat" roles="tomcat,manager"/>  <user username="admin" password="admin" roles="admin"/></tomcat-users>
此XML片段包括一个tomcat-users根元素,它包含一个或多个role和user元素。


注:可参见《基于Tomcat的Java Web的安全验证机制》(Category: Tomcat)

配置安全约束<security-constraint>

<security-constraint>用来保护为Web应用定义安全约束,

下面指明当用户访问该Web应用下的所有资源时,必须具备admin角色,

<security-constraint>    <web-resource-collection>        <web-resource-name>sample application</web-resource-name>        <url-pattern>/*</url-pattern>        <http-method>GET</http-method>        <http-method>POST</http-method>    </web-resource-collection>    <auth-constraint>        <description>This applies only to the "tomcat" security role</description>        <role-name>admin</role-name>    </auth-constraint></security-constraint>

子元素,

  • <web-resource-collection>——声明受保护的Web资源
  • <auth-constaint>——声明可以访问受保护的资源的角色,可以包含多个<role-name>子元素
  • <web-resource-name>——表示受保护的Web资源
  • <url-pattern>——指定受保护的URL路径
  • <>http-method>——指定安全限制覆盖的HTTP方法

注:该元素在web.xml中应该出现在<login-config>元素的紧前面


配置安全验证登陆界面<login-config>

<login-config>元素指定当Web客户访问受保护的Web资源(<security-constraint>元素中指定)时,系统弹出的登录对话框的类型。

Web应用程序通过login-config元素来认证用户,并确认该用户是否为正确的角色。

<login-config>    <auth-method>FORM</auth-method>    <realm-name>Form-Based Authentication Area</realm-name>    <form-login-config>        <form-login-page>/login.jsp</form-login-page><form-error-page>/error.jsp</form-error-page>    </form-login-config></login-config>

子元素,

  • <auth-method>——指定验证方法,有3个可选值:BASIC,DIGEST和FORM
  • <realm-name>——设定安全域的名称
  • <form-login-config>——当验证方法为FORM时,配置验证网页和出错网页
  • <form-login-page>——当验证方法为FORM时,设定验证网页
  • <form-error-page>——当验证方法为FORM时,设定出错网页

注:登陆验证的后台处理程序为j_security_check;在使用自定义FORM时,用户名和密码的参数名有固定的名称

BASIC是一种常见的Web认证方式,浏览器给用户提示一个对话框,要求输入用户名和密码,随后Tomcat将给出的用户名和密码与tomcat-users.xml中的用户名和密码进行比较,然后使用前面的security-constraint配置来确定用户是否可访问受保护的servlet。


配置对安全验证角色的引用

<security-role>元素指明这个Web应用引用的所有角色的名字,

<security-role>    <description>The rile that is required to log in to the sample Application</description>    <role-name>admin</role-name></security-role>

其实这种认证方法实际上有两个步骤:

  1. 检查提供的用户名和密码是否正确。
  2. 判断用户是否映射到特定的安全角色。例如,用户可能提供了正确的用户名和密码,但没有映射到特定的安全角色,也将被禁止访问特定的Web资源。

配置的加载顺序

  • 对于filter和servlet配置来说,<filter>,<servlet>在web.xml中的位置必须出现在对应<filter-mapping>,<servlet-mapping>之前;
  • 对于filter,web容器启动时按照filter在web.xml中定义的顺序来初始化;当匹配多个filter时,按照<filter-mapping>定义顺序调用doFilter方法;
  • web.xml的加载顺序是context-param -> listener -> filter -> servlet;
  • 同类型之间的调用顺序按照mapping定义的顺序;
  • filter的定义出现在servlet的定义之前;








0 0
原创粉丝点击