转载请注明出处:http://mingnianshimanian.iteye.com/admin/blogs/2322334
做web开发会经常和web.xml打交道,作为web程序的入口,和大家一起来学习分享一下web.xml的作用,配置,以及是如何加载的。
1.web.xml的作用
web.xml是java web 工程web-app目录下的配置文件。web.xml学名叫部署描述符文件,是在Servlet规范中定义的。它是用来初始化配置信息的。web.xml文件是用来配置:欢迎页(welcome-file-list)、servlet、filter、listener,启动加载级别等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。可以说一个web工程中可以完全没有web.xml文件,也就是说web.xml文件并不是web工程中所必须的。
2.web.xml的配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app> <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"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext_*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <session-config> <session-timeout>20</session-timeout> </session-config> <servlet> <display-name>StatementTemplateSendServlet</display-name> <servlet-name>StatementTemplateSendServlet</servlet-name> <servlet-class>com.thtf.commons.quartz.StatementTemplateSendServlet</servlet-class> <load-on-startup>4</load-on-startup> </servlet> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
以上是一个简单的strust/spring/hibernate项目的配置,配置了listener,filter,servlet等内容。
- <?xml version="1.0" encoding="UTF-8"?>头声明可以使用的XML版本并给出文件的字符编码。
- <!DOCTYPE web-app>声明必须在头的下面。这个声明告诉服务器适用的servlet规范的版本(如2.4或2.5)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。
- <web-app>所有部署描述符文件的顶层(根)元素为web-app。请注意,XML元素不像HTML,他们是大小写敏感的。因此,web-App和WEB-APP都是不合法的,web-app必须用小写。web.xml的模式(Schema)文件中定义了多少种标签元素,web.xml中就可以出现它的模式文件所定义的标签元素,它就能拥有定义出来的那些功能。web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素<web-app>中,都必须标明这个web.xml使用的是哪个模式文件。而且web.xml的模式文件中定义的标签并不是定死的,模式文件也是可以改变的,一般来说,随着web.mxl模式文件的版本升级,里面定义的功能会越来越复杂,也即标签元素的种类会越来越多,但有些是不常用的,我们只需记住一些常用的就可以了。
- xmlns:命名空间。每一个.xml都应该有一个命名空间(是自己定义的,一般为全球唯一的网站作为.xml文件的命名空间),sun公司的规范,可能是要保证全球唯一性吧,所以用网址url。
- xmlns:xsi声明XML Schema实例名称空间,验证有效性。
- xsi:schemaLocation指定了web.xml真正遵循的约束,即xsd文件所在的位置。
XML元素不仅是大小写敏感的,而且它们还对出现在其他元素中的次序敏感。例如,XML头必须是文件中的第一项,DOCTYPE声明必须是第二项,而web- app元素必须是第三项。在web-app元素内,元素的次序也很重要。服务器不一定强制要求这种次序,但它们允许(实际上有些服务器就是这样做的)完全 拒绝执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文件是不可移植的。
下面的列表给出了所有可直接出现在web-app元素内的合法元素所必需的次序。例如,此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意,所有这些元素都是可选的。因此,可以省略掉某一元素,但不能把它放于不正确的位置。
1.icon元素
icon元素用来指定GIF格式或JPEG格式的小图标(16×16)或大图标(32×32)的文件名。icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文件 (WAR)的根的相对路径。部署描述符并没有使用icon元素。但是,如果使用XML工具编辑部署描述符,XML编辑器可以使用icon元素。
2.display-name元素
如果使用工具编辑部署描述符,display-name元素包含的就是XML编辑器显示的名称。
3.description元素
可以使用description元素来提供有关部署描述符的信息。XML编辑器可以使用description元素的值。
4.distributable元素
可以使用distributable元素来告诉servlet/JSP容器,Web容器中部署的应用程序适合在分布式环境下运行。
5.context-param元素
上下文参数:声明应用范围内的初始化参数。在servlet里面可以通过getServletContext().getInitParameter("context/param")得到。<context-param>元素含有一对参数名和参数值,用作应用的Servlet上下文初始化参数,参数名在整个Web应用中必须是惟一的,在web应用的整个生命周期中上下文初始化参数都存在,任意的Servlet和jsp都可以随时随地访问它。<param-name>子元素包含有参数名,而<param-value>子元素包含的是参数值。作为选择,可用<description>子元素来描述参数。配置Spring,必须需要<listener>,而<context-param>可有可无,如果在web.xml中不写<context-param>配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:在<param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔,比如在business-client工程中,我们采用了自定义配置方式,<context-param>配置如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext_*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
6.filter元素
filter元素用于指定Web容器中的过滤器。在请求和响应对象被servlet处理之前或之后,可以使用过滤器对这两个对象进行操作。利用filter-mapping元素,过滤器被映射到一个servlet或一个URL模式。这个过滤器的filter元素和filter-mapping元素必须具有相同的名称。
7.filter-mapping元素
filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。filter-name值必须对应filter元素中声明的其中一个过滤器名称。
8.listener元素
listener元素用来注册一个监听器类,可以在Web应用中包含该类。使用listener元素,可以收到事件什么时候发生以及用什么作为响应的通知。
9.servlet元素
servlet元素用来声明一个servlet。icon、display-name和description元素的用法和上一节介绍的用法相同。init-param元素与context-param元素具有相同的元素描述符。可以使用init-param子元素将初始化参数名和参数值传递给servlet。
(1) servlet-name、servlet-class和jsp-file元素servlet元素必须含有servlet-name元素和servlet-class元素,或者servlet-name元素和jsp-file元素。
- servlet-name元素用来定义servlet的名称,该名称在整个应用中必须是惟一的。
- servlet-class元素用来指定servlet的完全限定的名称。
- jsp-file元素用来指定应用中JSP文件的完整路径。这个完整路径必须由a/开始。
(2) load-on-startup元素
当启动Web容器时,用load-on-startup元素自动将servlet加入内存。加载servlet就意味着实例化这个servlet,并调用它的init方法。可以使用这个元素来避免第一个servlet请求的响应因为servlet载入内存所导致的任何延迟。如果load-on-startup元素存在,而且也指定了jsp-file元素,则JSP文件会被重新编译成servlet,同时产生的servlet也被载入内存。load-on-startup元素的内容可以为空,或者是一个整数。这个值表示由Web容器载入内存的顺序。举个例子,如果有两个servlet元素都含有load-on-startup子元素,则load-on-startup子元素值较小的servlet将先被加载。如果load-on-startup子元素值为空或负值,则由Web容器决定什么时候加载servlet。如果两个servlet的load-on-startup子元素值相同,则由Web容器决定先加载哪一个servlet。
(3) run-as元素
如果定义了run-as元素,它会重写用于调用Web应用中servlet所设定的Enterprise JavaBean(EJB)的安全身份。Role-name是为当前Web应用定义的一个安全角色的名称。
(4) security-role-ref元素security-role-ref元素定义一个映射,该映射在servlet中用isUserInRole (String name)调用的角色名与为Web应用定义的安全角色名之间进行。role-link元素用来将安全角色引用链接到已定义的安全角色。role-link元素必须含有已经在security-role元素中定义的一个安全角色的名称。
10.servlet-mapping 元素
servlet-mapping 元素将URL模式映射到某个servlet。在前面的“servlet元素”一节中已经介绍了使用servlet-mapping元素的例子。
11.session-config元素
session-config元素为Web应用中的javax.servlet.http.HttpSession对象定义参数。session-timeout元素用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果session-timeout元素的值为零或负数,则表示会话将永远不会超时。
12.mime-mapping元素
mime-mapping元素将mime类型映射到扩展名。extension元素用来描述扩展名。mime-type元素则为MIME类型。
13.welcome-file-list元素
当用户在浏览器中输入的URL不包含某个servlet名或JSP页面时,welcome-file-list元素可指定显示的默认文件。如果在
Web应用的部署描述符中指定welcome-file-list元素,用户就会看到一个权限错误消息,或者是应用目录下的文件和目录列表。如果定义了welcome-file-list元素,用户就能看到由该元素指定的具体文件。welcome-file子元素用于指定默认文件的名称。welcome-file-list元素可以包含一个或多个welcome-file子元素。如果在第一个welcome-file元素中没有找到指定的文件,Web容器就会尝试显示第二个,以此类推。
14.error-page元素
error-page元素用于将一段错误代码或一个异常类型映射到Web应用中的资源路径,从而在产生特殊的HTTP错误或指定的Java异常时,将显示相关的资源。error-code元素包含HTTP错误代码。exception-type是Java异常类型的完全限定的名称。location元素是Web应用中的资源相对于应用目录的路径。location的值必须从a/开始。
15.taglib元素
taglib元素描述JSP定制标记库。taglib-uri元素是用于Web应用中的标记库的URI。taglib-uri元素的值与WEB-INF目录相对应。taglib-location元素包含一个位置,其中可以找到标记库的标记库描述符(TLD)文件。
16.resource-env-ref元素
可以使用resource-env-ref元素来指定对管理对象的servlet引用的声明,该对象与servlet环境中的资源相关联。resource-env-ref-name元素是资源环境引用的名称,其值为servlet代码中使用的环境的入口名称。该名称是一个与java:comp/env相对应的Java命名和目录接口(JNDI)名称,该名称在整个Web应用中必须是惟一的。
17.resource-ref元素
resource-ref元素用于指定对外部资源的servlet引用的声明。resource-ref子元素的描述如下:
- res-ref-name是资源工厂引用名的名称。该名称是一个与java:comp/env上下文相对应的JNDI名称,并且在整个Web应用中必须是惟一的。
- res-auth表明:servlet代码通过编程注册到资源管理器,或者是容器将代表servlet注册到资源管理器。该元素的值必须为Application或Container。
- res-sharing-scope表明:是否可以共享通过给定资源管理器连接工厂引用获得的连接。该元素的值必须为Shareable(默认值)或Unshareable。
18.security-constraint元素
部署描述符中的security-constraint元素允许不通过编程就可以限制对某个资源的访问。
(1) web-resource-collection元素
web-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中,可以定义URL模式和HTTP方法。如果不存在HTTP方法,就将安全约束应用于所有的方法。web-resource-name是与受保护资源相关联的名称。http-method元素可被赋予一个HTTP方法,比如GET和POST。
(2) auth-constraint元素
auth-constraint元素用于指定可以访问该资源集合的用户角色。如果没有指定auth-constraint元素,就将安全约束应用于所有角色。role-name元素包含安全角色的名称。
(3) user-data-constraint元素
user-data-constraint元素用来显示怎样保护在客户端和Web容器之间传递的数据。transport-guarantee元素必须具有如下的某个值:
- NONE,这意味着应用不需要传输保证
- INTEGRAL,意味着服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变。
- CONFIDENTIAL,这意味着传输的数据必须是加密的数据。
在大多数情况下,安全套接字层(SSL)用于INTEGRAL或CONFIDENTIAL。
19.login-config元素
login-config元素用来指定所使用的验证方法、领域名和表单验证机制所需的特性。login-config子元素的描述如下:
- auth-method指定验证方法。它的值为下面的一个:BASIC、DIGEST、FORM或 CLIENT-CERT
- realm-name指定HTTP Basic验证中使用的领域名。
- form-login-config指定基于表单的登录中应该使用的登录页面和出错页面。如果没有使用基于表单的验证,则忽略这些元素。这个元素的定义如下,其中form-login-page用于指定显示登录页面的资源路径, form-error-page则用于指定用户登录失败时显示出错页面的资源路径。这两个页面路径都必须以a/开始,并与应用目录相对应。
20.security-role元素
security-role元素指定用于安全约束中的安全角色的声明。
21.env-entry元素
env-entry元素用于指定应用环境入口。env-entry-name元素包含Web应用环境入口的名称。该名称是一个与java:comp/env相对应的JNDI名称,并且在整个应用中必须是惟一的。env-entry-value元素包含Web应用环境入口的值。该值必须是一个字符串类型的值,并且对于指定类型的构造函数是有效的,该函数获得一个String参数;或者对于java.lang.Character是有效的,java.lang.Character对象是一个字符。env-entry-type元素包含环境入口值的完全限定的Java类型,该环境入口值是Web应用代码所期望的。这个env-entry-type元素的值必须是如下之一:
- java.lang.Boolean
- java.lang.Byt
- java.lang.Characte
- java.lang.Strin
- java.lang.Shor
- java.lang.Intege
- java.lang.Lon
- java.lang.Floa
- java.lang.Doubl
22.ejb-ref元素
ejb-ref元素用于指定EJB的home接口的引用。ejb-ref-name包含EJB引用的名称。EJB引用是servlet环境中的一个入口,它与java:comp/env相对应。这个名称在Web应用中必须是惟一的。为求一致性,推荐您的ejb-ref-name元素名称以ejb/开始。ejb-ref-name元素包含引用的EJB的期望类型。这个值必须是Entity或Session。home元素包含EJB的home接口的完全限定的名称。remote元素包含EJB的remote接口的完全限定的名称。ejb-ref或ejb-local-ref元素中用到的ejb-link元素可指定EJB 引用被链接到另一个EJB。Ejb-link元素的值必须是同一个J2EE应用单元中某个EJB的ejb-name。Ejb-link元素中的名称可以由指定ejb-jar的路径名组成,该ejb-jar包含引用的EJB。目标bean的名称添加在后面,用字符a# 与路径名分隔。路径名与包含引用EJB的Web应用的WAR相对应。这就允许我们惟一标识具有相同ejb-name的多个企业bean。
23.ejb-local-ref元素
ejb-local-ref元素用于声明对EJB的本地home的引用。local元素包含EJB本地接口的完全限定的名称。Local-home元素包含EJB本地home接口的完全限定的名称。
24.jsp-config
jsp-config标记提供了Web程序中JSP程序的设置信息。jsp-config包括taglib和jsp-property-group两类元素。taglib定义了Web程序使用的custom tag,它的用法和以前JSP 1.2中的用法相同。jsp-property-group定义了一组JSP的特性。这些特性实际上对应JSP的page directive定义的特性。
通过jsp-property-group只不过可以方便地对多个具有相同属性的JSP统一定义。jsp-property-group 元素主要有八个子元素,它们分别为:
- <description>:设定的说明
- <display-name>:设定名称
- <url-pattern>:设定值所影响的范围,如: /CH2 或 /*.jsp
- <el-ignored>:若为 true,表示不支持 EL 语法
- <scripting-invalid>:包含java代码的小程序,若为 true,表示不支持 <% scripting %>语法
- <page-encoding>:设定 JSP 网页的编码
- <include-prelude>:设置 JSP 网页的抬头,扩展名为 .jspf
- <include-coda>:设置 JSP 网页的结尾,扩展名为 .jspf
相关推荐
**web.xml配置详解** 在Java Web开发中,`web.xml`是部署描述符(Deployment Descriptor)的核心文件,它定义了应用程序的行为和结构。这个CHM文件深入解析了`web.xml`的各种配置元素,帮助开发者更好地理解和控制...
《Web.xml配置详解》 在Web开发中,`web.xml`文件是Web应用程序的部署描述符,它是Java Servlet规范的一部分,用于配置Web应用的各种组件,如Servlet、过滤器、监听器等。理解并熟练掌握`web.xml`的配置对于任何Web...
标题 "Spring全注解project示例 (无web.xml配置)" 提供了我们即将探讨的核心主题:一个使用Spring框架,完全依赖注解配置的项目,且没有传统的web.xml部署描述符。这种配置方式在现代Spring应用中非常常见,因为它...
本源码将详细介绍web.xml配置中servlet,filter,listener的加载顺序,可以让学习者更好的了解web.xml各种属性配置,自己写的东西,不足之处请大家见谅,顺便收点积分也好下资料,谢谢
在Java Web开发中,`web.xml`文件是核心配置文件,它是应用服务器启动时加载的部署描述符,用于定义Web应用程序的结构、配置及行为。本篇将深入探讨`web.xml`的重要概念、元素、属性以及在实际项目中的应用。 1. **...
在现代的Spring框架开发中,"spring无web.xml零配置"是一种常见的实践,它通过Java配置(javaconfig)替代了传统的XML配置方式。这种方式使得应用更加灵活,代码更易于理解和维护。下面我们将深入探讨这个主题。 ...
《TongWeb主配置文件tongweb.xml详解》 TongWeb是一款基于Java技术的高性能、高可用的企业级应用服务器,其核心配置文件——tongweb.xml...因此,运维人员应深入学习tongweb.xml,以便在实际工作中灵活应对各种挑战。
本文将详细介绍在JSP中如何设置session的过期时间,以及相关的web.xml配置知识。 首先,需要了解session过期时间的设置位置。在基于Servlet技术的Web应用中,session的生命周期是通过Web服务器,如Tomcat进行控制的...
这个`web.xml`示例展示了如何通过XML配置来定制Java Web应用的行为,包括处理请求、错误处理、会话管理、安全控制等多个方面,是学习和理解SCWCD(Sun Certified Web Component Developer)认证的重要内容。...
"java学习-web.xml配置详解实用.pdf" 本文档主要介绍了Java Web应用程序中web.xml配置文件的详细解释。web.xml文件是Java Web应用程序的核心配置文件,用于定义Web应用程序的各种配置信息。 1. `<context-param>`...
现在,我们来详细解析`weblogic.xml`中的配置元素以及与Web服务器相关的设置。 1. **部署描述符结构** `weblogic.xml`遵循J2EE的部署描述符规范,其基本结构包括`<weblogic-web-app>`根元素,以及一系列子元素如`...
这是一些配置文件,可以作为参考,个人感觉很方便的学习方法
### Servlet中Web.xml详解 ...通过本文的学习,我们了解了`web.xml`文件的基本结构、各个组成部分的意义以及它们之间的相互关系。掌握这些知识对于理解Servlet的工作机制以及更好地配置和管理Web应用程序至关重要。
通过对`web.xml`文件的学习和掌握,开发者能够更加灵活地管理和控制Web应用程序的各种行为,从而提高开发效率和应用质量。尽管随着技术的发展,诸如Spring Boot等框架简化了配置过程,但理解`web.xml`的工作原理仍然...
在Spring框架中,web.xml配置文件是Web应用的核心配置文件,它定义了Servlet、Filter、Listener等组件的初始化参数和部署信息。手动生成web.xml配置文件对于理解和掌握Spring的部署流程至关重要。以下将详细介绍如何...
然而,在某些场景下,开发者可能需要同时利用Servlet 3.x的特性,并且保持传统的XML配置方式,这就需要手动创建或引入`web.xml`。 **方法一:创建项目时配置** 1. 当你新建一个`Dynamic Web Project`时,不要立即...
10. ****:映射Servlet到URL模式,扩展了Servlet的web.xml配置。 11. ****:定义文件扩展名与其对应的MIME类型。 三、weblogic.xml的实践应用 1. **性能优化**:通过调整session管理策略,可以优化服务器内存使用,...
在本篇文章中,我们将深入探讨如何使用全XML配置的方式实现一个纯流程跳转的Spring Web Flow应用,而不涉及具体的业务功能实现。 首先,我们需要理解Spring Web Flow的核心概念,包括`Flow`、`State`和`Transition`...
在Java Web开发中,`web.xml`文件是一个至关重要的组件,它是Servlet容器(如Tomcat、Jetty等)的部署描述符。这个文件定义了Web应用程序的...学习并掌握`web.xml`的配置技巧,对于Java Web开发者来说是必不可少的。