【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>
其实这种认证方法实际上有两个步骤:
- 检查提供的用户名和密码是否正确。
- 判断用户是否映射到特定的安全角色。例如,用户可能提供了正确的用户名和密码,但没有映射到特定的安全角色,也将被禁止访问特定的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的定义之前;
- 【Java.Web】web.xml详解
- 【Java Web】web.xml详解
- java web.xml详解
- java web.xml详解
- java web.xml详解
- java web.xml详解
- java web.xml详解
- Java web.xml详解
- java web工程web.xml配置详解
- java web工程web.xml配置详解
- java web 中web.xml配置详解
- java web工程web.xml配置详解
- java web项目的web.xml详解
- java web工程web.xml配置详解
- java-web程序 web.xml详解
- java web工程web.xml配置详解
- java web工程web.xml配置详解
- java中web.xml中的<listener> 详解
- htaccess 防盗链,防止目录浏览等10大技巧
- 抓取网易每日轻松一刻
- IOS 裁剪图片
- 泛型实现栈
- mysql导入导出数据库
- 【Java.Web】web.xml详解
- ARM参数传递规则
- 接收不明长度字符串问题
- Opengl_glew32_ 无法解析的错误
- .net MVC 实现基本的登陆
- ubuntu下用php处理上传文件注意事项
- Apache中.htaccess文件功能
- 提高数据的可靠性
- 接收不明长度字符串问题