本文共 7724 字,大约阅读时间需要 25 分钟。
web.xml文件是Java Web应用的XML格式的配置文件,存放在WEB-INF子目录下。web.xml文件由开发人员编写,共Servlet容器访问。web.xml文件也被称为Java Web应用的发布描述符文件,Servlet容器在加载和启动Java Web应用时会读取它的web.xml文件,从中获得关于当前Web应用的发布信息。
web.xml中定义了如下的元素:
例如:
在此设定的参数,可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得。my_param hello
子元素:
在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中配置两个元素:<filter>和<filter-mapping>。例如:
上面代码定义了一个过滤器,filter元素的子元素描述参见表:SampleFilter mypack.SampleFilter
<filter-mapping>元素用来设定过滤器负责过滤的URL,
上面代码指明当客户请求访问Web应用中的所有JSP文件时,将处罚SampleFilter过滤器工作。具体的过滤事务由在<filter>元素中指定的类完成。SampleFilter *.jsp
<filter-mapping>元素的子元素描述参见表:
<servlet>元素用来定义servlet,例如:
<servlet>元素属性描述参见:SampleServlet mypack.SampleServlet initParm1 2 1
<servlet-mapping>元素用来设定客户访问某个Servlet的URL,例如:
<servlet-mapping>使得程序中定义的Servlet类名和访问URL彼此独立。当Servlet类名发生改变时,只要修改<servlet-class>子元素即可。SampleServlet /sample
<servlet-mapping>元素的子元素参见:
参见 Servlet 和 Filter 的 URL 设置一节。
例如,
com.myTest.ContextListener
子元素,
<session-config>元素用来设定HTTP Session的生命周期。例如,
30
指明Session可以保持不活动状态的最长时间为30秒,超过这一时间,Servelt容器将把它作为无效的Session处理。 <session-config>元素之包括一个子元素<session-timeout>,用来设定Session可以保持不活动状态的最长时间,这里采用的单位是“秒”。
例如,
子元素,doc application/vnd.ms-word xls application/vnd.ms-excel
当客户访问Web应用时,如果仅仅给出Web应用的ROOT URL,没有指定具体的文件名,Servlet容器会自动调用Web应用的Welcome文件。<welcome-file-list>元素用来设定Welcome文件清单。
在<welcome-file-list>中可以包含多个<welcome-list>,当Servlet容器调用Web应用的Welcome文件时,会自动寻找第一个<welcome-file>指定的文件( 通常位于Webcontent目录下,与WEB-INF同一层级)。如果这个文件存在,那么把这一文件返回给客户;如果不存在,则Servlet容器依次寻找下一个Welcome文件,直到找到为止;如果<welcome-file-list>元素中指定的所有文件都不存在,服务器向客户端返回“HTTP 404 NOT FOUND”的错误信息。login.jsp index.htm
例如:
子元素,404 /error404.jsp java.lang.Exception /exception.jsp
<taglib>元素用来设置Web应用所引用的Tag Library,
/mytaglib /WEB-INF/mytaglib.tld
<taglib>元素的子元素,
在JSP文件中可以引用Tag,
<%@ taglib prefix="c" uri="/mytaglib" %>注:也可以不在web.xml中显式声明<taglib>;可以直接在jsp文件中引用,具体参见JSP标签库的使用
如果Web应用访问了由Servlet容器管理的某个JNDI Resource。则必须在web.xml文件中声明对这个JNDI Resource的引用。
表示资源引用的元素为<resource-ref>,
<resource-ref>的子元素,DB Connection jdbc/sampleDB javav.sql.DataSource Container
配置web.xml来限制对某些资源,servlet的请求。有时我们只希望通过认证的用户才能请求某些servlet的话,就可以在web.xml中来进行相应的配置,来达到此目的。 对于tomcat,如果要在web.xml使用<security-constraint>元素,需要在位于<Tomcat-installation-directory>/conf/tomcat-users.xml的XML文件中创建用户名和密码。例如:
此XML片段包括一个tomcat-users根元素,它包含一个或多个role和user元素。
注:可参见《》(Category: Tomcat)
<security-constraint>用来保护为Web应用定义安全约束,
下面指明当用户访问该Web应用下的所有资源时,必须具备admin角色,
子元素,sample application /* GET POST This applies only to the "tomcat" security role admin
注:该元素在web.xml中应该出现在<login-config>元素的紧前面。
<login-config>元素指定当Web客户访问受保护的Web资源(<security-constraint>元素中指定)时,系统弹出的登录对话框的类型。
Web应用程序通过login-config元素来认证用户,并确认该用户是否为正确的角色。
FORM Form-Based Authentication Area /login.jsp /error.jsp
子元素,
注:登陆验证的后台处理程序为j_security_check;在使用自定义FORM时,用户名和密码的参数名有固定的名称。
BASIC是一种常见的Web认证方式,浏览器给用户提示一个对话框,要求输入用户名和密码,随后Tomcat将给出的用户名和密码与tomcat-users.xml中的用户名和密码进行比较,然后使用前面的security-constraint配置来确定用户是否可访问受保护的servlet。
<security-role>元素指明这个Web应用引用的所有角色的名字,
The rile that is required to log in to the sample Application admin
其实这种认证方法实际上有两个步骤:
转载地址:http://rcwfi.baihongyu.com/