【Java.Web】web.xml详解

6871 世界杯哥斯达黎加 | 2025-11-10 20:39:56

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

定义元素

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

——Web应用的根元素——Web应用的名字——对Web应用的描述——指定该站点是否可分布式处理——设定站点的环境参数——定义过滤器——为过滤器指定URL映射——定义Servlet——为Servlet指定URL映射——用来设定listener接口——定义某一个扩展名和某一个MIME TYPE的映射——配置HTTP会话——设置Web应用的Welcome文件清单——处理错误代码或异常的页面——声明引用的标签库——声明引用的JNDI资源——配置安全约束——配置安全验证登陆界面——配置安全角色

配置详解

根元素

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">

配置站点的环境参数

例如:

my_param

hello

在此设定的参数,可以在servlet中用

getServletContext().getInitParameter("my_param") 来取得。

子元素:

——参数名称——参数值

配置参数 —— webAppRootKey

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

webAppRootKey

webapp.root

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

webAppRootKey

webapp.root1

webAppRootKey

webapp.root2

可以用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

配置过滤器

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

SampleFilter

mypack.SampleFilter

上面代码定义了一个过滤器,filter元素的子元素描述参见表:

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

元素用来设定过滤器负责过滤的URL,

SampleFilter

*.jsp

上面代码指明当客户请求访问Web应用中的所有JSP文件时,将处罚SampleFilter过滤器工作。具体的过滤事务由在元素中指定的类完成。

元素的子元素描述参见表:

——指定过滤器名,这里的过滤器名必须和元素中定义的过滤器名匹配——指定过滤器负责过滤的URL

配置Servlet

元素用来定义servlet,例如:

SampleServlet

mypack.SampleServlet

initParm1

2

1

元素属性描述参见:

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

配置Servlet映射

元素用来设定客户访问某个Servlet的URL,例如:

SampleServlet

/sample

使得程序中定义的Servlet类名和访问URL彼此独立。当Servlet类名发生改变时,只要修改子元素即可。

元素的子元素参见:

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

url-pattern的设置

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

配置Listener

例如,

com.myTest.ContextListener

子元素,

——定义listener类的名字

配置Session

元素用来设定HTTP Session的生命周期。例如,

30

指明Session可以保持不活动状态的最长时间为30秒,超过这一时间,Servelt容器将把它作为无效的Session处理。

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

配置MIME TYPE映射

例如,

doc

application/vnd.ms-word

xls

application/vnd.ms-excel

子元素,

——扩展名名称——MIME格式

配置Welcome文件清单

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

login.jsp

index.htm

中可以包含多个,当Servlet容器调用Web应用的Welcome文件时,会自动寻找第一个指定的文件(

通常位于Webcontent目录下,与WEB-INF同一层级)。如果这个文件存在,那么把这一文件返回给客户;如果不存在,则Servlet容器依次寻找下一个Welcome文件,直到找到为止;如果元素中指定的所有文件都不存在,服务器向客户端返回“HTTP 404 NOT FOUND”的错误信息。

配置ERROR页面

例如:

404

/error404.jsp

java.lang.Exception

/exception.jsp

子元素,

——错误代码——Java异常类型——相关资源路径

配置Tag Library

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

/mytaglib

/WEB-INF/mytaglib.tld

元素的子元素,

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

在JSP文件中可以引用Tag,

<%@ taglib prefix="c" uri="/mytaglib" %>

注:也可以不在web.xml中显式声明;可以直接在jsp文件中引用,具体参见JSP标签库的使用

配置资源引用

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

表示资源引用的元素为,

DB Connection

jdbc/sampleDB

javav.sql.DataSource

Container

的子元素,

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

安全登陆、验证

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

此XML片段包括一个tomcat-users根元素,它包含一个或多个role和user元素。

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

配置安全约束

用来保护为Web应用定义安全约束,

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

sample application

/*

GET

POST

This applies only to the "tomcat" security role

admin

子元素,

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

注:该元素在web.xml中应该出现在元素的紧前面。

配置安全验证登陆界面

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

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

FORM

Form-Based Authentication Area

/login.jsp

/error.jsp

子元素,

——指定验证方法,有3个可选值:BASIC,DIGEST和FORM——设定安全域的名称——当验证方法为FORM时,配置验证网页和出错网页——当验证方法为FORM时,设定验证网页——当验证方法为FORM时,设定出错网页

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

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

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

元素指明这个Web应用引用的所有角色的名字,

The rile that is required to log in to the sample Application

admin

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

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

配置的加载顺序

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