关于web.xml的详细解释,分层解析每一个标签(第一部分)

本文详细解析了web.xml文件,包括web-app的各个子标签,如icon、display-name、description、distributable、context-param、servlet及其相关配置。web.xml是Web应用程序的部署描述符,用于在Servlet容器中部署Web应用,定义了过滤器、Servlet的映射和会话配置等关键设置。理解并掌握这些标签对于理解和配置Java Web应用至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web.xml是什么?

web.xml文件是Web服务所属的Web应用程序的标准部署描述符,位于应用 WAR 的 WEB-INF/ 目录下。

web.xml 是 Web 应用的 Servlet 标准的一部分,描述了如何在Servlet容器中部署Web应用程序,声明了服务使用的filter(过滤器)和servlet。Java 网页应用程序使用 web.xml来确定如何将网址映射到 servlet、哪些网址需要身份验证等。

web.xml需要包含一个XML描述符以及一个开始和结束< web-app >标记。

< web-app >标记模板如下,我们需要注意的是标签里面的一些属性值

模板一

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
	 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/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">
</web-app>

模板二

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
	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_3_0.xsd" 			
	id="WebApp_ID" 
	version="3.0">
  
</web-app>

version :指定web.xml使用的版本号
encoding :指定web.xml使用的编码
xmlns :xml的名称空间(XML Namespaces)
xmlns:xsi :使用xsi作为前缀的名称空间,
xsi:schemaLocation : xsi前缀指定的名称空间的schemaLocation属性
version :webapp的版本,与schemaLocation的第二个url的文件的后缀名相匹配
id :初始化时分配给该web.xml的唯一id

注:

  • 我们可以发现模板一中的xmlnshttp://java.sun.com/xml/ns/j2ee而模板二中的xmlnshttp://java.sun.com/xml/ns/javaee,这是因为java的版本不同造成的,java1.5之前javaee的原名叫j2ee,java1.5对应的JDK版本为5.0,也就是从jdk5.0以后,j2ee改名为 javaee,j2se 改名为 javase,j2me 改名成 javame,如果你用的是javaee而且jdk版本是5.0之前,xmlns请用http://java.sun.com/xml/ns/j2ee,否则会报错,同理jdk5.0之前的javase中请使用http://java.sun.com/xml/ns/j2se。目前。我们一般使用模板二,也就是jdk5.0以后的版本,现在最新版本为JDK10,增加了很多方便开发者的新特性。
  • xsi:schemaLocation 定义了XML Namespace和对应的 XSD(Xml Schema Definition)文档的位置的关系。它的值由一个或多个URI引用对组成,两个URI之间以空白符分隔(空格和换行均可)。第一个URI是定义的 XML Namespace的值,第二个URI给出Schema文档的位置,Schema处理器将从这个位置读取Schema文档,该文档的targetNamespace必须与第一个URI相匹配。

web.xml标签详解

web-app下的icon标签

icon指定web应用程序中表示Web应用程序的大小图像的位置。

元素必需/选用描述
<small-icon>选用GUI工具中Web应用程序的.gif 或者 .jpg格式的小图(16x16像素)的位置。
<large-icon>选用GUI工具中Web应用程序的.gif 或者 .jpg格式的小图(32x32像素)的位置。

web-app下的display-name标签

display-name指定Web应用程序的显示名称,即GUI工具可以显示的简称。

元素必需/选用描述
<display-name>选用指定Web应用程序的显示名称
<web-app>
	<display-name>Web Application name</display-name>
</web-app>

web-app下的description

description提供有关Web应用程序的描述性文本。

元素必需/选用描述
<description>选用描述Web应用程序的文本
<web-app>
    <description>
      This is a text description about your Web Application
    </description>
</web-app>

web-app下的distributable

<distributable>是一个空标签,默认值为true,表示Web应用程序可以在分布式环境中运行,空标签即为true不用显示定义,例如:<distributable />,如果没有该标签即为false,也就是web应用程序不运行在分布式环境。

元素必需/选用描述
<distributable>选用表示Web应用程序是否可以在分布式环境中运行。

如果标记为distributable,则所有新会话以及对现有会话的更改将由SessionReplicator(会话复制器)根据server.xml中的复制规则复制给集群的其他成员。

如果应用程序在群集中运行但未标记为distributable,则会话更改将仅在单个JVM上发生。因此,当用户连接到其他JVM之一时,将无法识别其会话,并且将创建一个新会话。这可能会迫使他们再次登录,在另一个JVM上建立第二个会话。当它们在两台服务器之间切换时,可能会出现其他各种问题。

负载平衡的集群中,用户请求被发送到两个或多个JVM。要实现会话故障转移,必须分发群集上运行的所有应用程序,以正确维护多个服务器之间的会话状态。

对于要在Tomcat群集中分发的应用程序,必须遵循一些基本规则:

  • 所有会话属性必须可序列化(即必须实现java.io.Serializable)。大多数Java对象(包括诸如Strings和Integers之类的数据类型)都实现了此功能。
  • 更改会话中存储的所有对象后,必须调用[HttpSession.setAttribute()](http://java.sun.com/j2ee/sdk_1.2.1/techdocs/api/javax/servlet/http/HttpSession.html#setAttribute(java.lang.String, java.lang.Object))来通知SessionReplicator(会话复制器)会话已更改。
  • 理想情况下,会话应保持相对较小,以确保每个群集VM之间的网络流量较小。
  • 像邮件程序线程之类的后台处理器线程应确保它们仅在其中一个VM上运行,或者应具有处理跨VM的多线程的方法。不可以使用静态对象通过同步和其他传统的通信的方法来锁定资源,因此必须注意确保应用程序可用于群集。
  • 理想情况下,除非文件系统在集群的所有成员之间都是公用的,否则不应将数据存储为公共文件。例如,图像上传系统可以将图像直接存储到数据库中。如果不能,则可以通过使用SAN或NAS,在服务器之间复制映像存储文件夹或将应用程序限制为在同一服务器上运行的2个群集VM来实现通用文件系统。

详细内容请参考tomcat关于集群的详细介绍

web-app下的context-param

context-param定义应用程序中使用的共享字符串常量的context的init-param(初始化参数),可以由安装应用程序的系统管理员自定义。

元素必需/选用描述
<param-name>必需定义此属性的名称
<param-value>必需定义此属性的字符串值。
<description>选用初始化属性的文本描述。

在servlet或JSP页面中通过以下命令操作获取

String value = getServletContext().getInitParameter("name");
//name 为定义在param-name或param-value的指定值

context-param下的description

必需

<web-app>
    <context-param>
      <param-name>  a name about  init-param  in context</param-name>
    </context-param>
</web-app>

context-param下的param-name

必需

<web-app>
    <context-param>
      <param-value> a value about  init-param  in context</param-value>
    </context-param>
</web-app>

context-param下的param-value

可选

<web-app>
    <context-param>
      <description>
        This is a text description about  init-param  in context
      </description>
    </context-param>
</web-app>

web-app下的servlet

servlet定义了组成web应用程序的servlet的声明性数据,包括初始化参数。

元素必需/选用描述
<icon>选用web应用程序中用于在GUI工具中表示Servlet的大小图像的位置。
<display-name>选用servlet的显示名称
<description>选用描述该servlet的文本
<servlet-name>必需定义servlet的规范名称,用于在部署描述符的其他地方引用servlet定义。
<servlet-class>必需(或使用 <jsp-file>定义)servlet的全类名。 在servlet的主体中使用 <servlet-class><jsp-file>定义。
<jsp-file>必需(或使用 <servlet-class>定义)相对于Web应用程序根目录,Web应用程序中jsp文件的完整路径。
<init-param>选用包含一个name/value 键值对,作为Servlet的初始化属性。
<load-on-startup>选用web应用程序启动时会初始化此servlet。此元素的可选内容必须为正整数,指示应加载servlet的顺序。较小的整数在较高的整数之前加载。如果未指定任何值,或者指定的值不是正整数,则在应用程序启动期间可以以任何顺序加载servlet
<run-as>选用指定用于执行Web应用程序的运行身份。它包含一个可选描述和安全角色的名称。
<security-role-ref>选用用于将<security-role>定义的安全角色名称链接到在servlet逻辑中硬编码的备用角色名称。这种额外的抽象层允许在部署时配置servlet,而无需更改servlet代码。

注:
Servlet标签内的某些元素是有顺序的,例如descriptiondisplay-nameicon的三个标签必须按照descriptiondisplay-name再到icon顺序,否则会报错。


<web-app>
	<servlet>
		<description>This is a text description about myservlet</description>
  		<display-name>myServlet</display-name>
  		<icon></icon>
  		<servlet-name>myServlet</servlet-name>
  		<!--   servlet-class 和jsp-file 标签只能二选一,不能同时设置
  		<jsp-file>NewFile.jsp</jsp-file>
  		-->
  		<servlet-class>com.Joliu.MyServletTest</servlet-class>
  		<init-param>
        	<param-name>servletList</param-name>
        	<param-value>com.Joliu.MyServletList</param-value>
      	</init-param>
      	<init-param>
        	<param-name>...</param-name>
        	<param-value>...</param-value>
      	</init-param>
      	<load-on-startup>5</load-on-startup>
      	<run-as>
            <description>...</description>
           <role-name>tomcat</role-name>
        </run-as>
         <security-role-ref>
      		<description>...</description>
      		<role-name>...</role-name>
      		<role-link>...</role-link>
      	</security-role-ref>
      	<multipart-config />
    </servlet>
</web-app>

servlet下的description

<web-app>
	<servlet>
      <description>
        This is a text description about myservlet
      </description>
      ...
    </servlet>
</web-app>

servlet下的display-name

<web-app>
	<servlet>
		...
  		<display-name>myServlet</display-name>
  		...
    </servlet>
</web-app>

servlet下的icon

icon指定web应用程序中用于在GUI工具中表示Servlet的大小图像的位置。

元素必需/选用描述
<small-icon>选用GUI工具中Servlet的.gif 或者 .jpg格式的小图(16x16像素)的位置。
<large-icon>选用GUI工具中Servlet的.gif 或者 .jpg格式的小图(32x32像素)的位置。
<web-app>
	<servlet>
		...
		<icon></icon>
		...
    </servlet>
</web-app>

servlet下的servlet-name

<web-app>
	<servlet>
	  ...
      <servlet-name>myServlet</servlet-name>
      ...
    </servlet>
</web-app>

servlet下的servlet-class

<servlet-name><servlet-class>组合或者<servlet-name><jsp-file> 组合,不可单独出现<servlet-name><jsp-file><servlet-class>其中一个或者三个都有。

<web-app>
	<servlet>
		...
		<servlet-name>myServlet</servlet-name>
      	<servlet-class>com.Joliu.MyServletTest</servlet-class>
        ...
    </servlet>
</web-app>

servlet下的jsp-file

<servlet-name><jsp-file> 组合或者<servlet-name><servlet-class>组合,不可单独出现<servlet-name><jsp-file><servlet-class>其中一个或者三个都有。


<web-app>
	<servlet>
		...
  		<servlet-name>myServlet</servlet-name>
  		<!--   servlet-class 和jsp-file 标签只能二选一,不能同时设置  -->
  		<jsp-file>NewFile.jsp</jsp-file>
  		...
    </servlet>
    
</web-app>

servlet下的init-param


<web-app>
	<servlet>
		...
  		<init-param>
        	<param-name>servletList</param-name>
        	<param-value>com.Joliu.MyServletList</param-value>
      	</init-param>
      	<init-param>
        	<param-name>...</param-name>
        	<param-value>...</param-value>
      	</init-param>
      	 ...
    </servlet>
   
</web-app>

servlet下的load-on-startup

<web-app>
	<servlet>
	  ...
      <!-- web应用程序启动时会初始化此`servlet`-->
      <load-on-startup>5</load-on-startup>
    </servlet>
</web-app>

servlet下的run-as

<web-app>
	<servlet>
	 	 ...
	  	<run-as>
            <description>...</description>
           <role-name>tomcat</role-name>
        </run-as>
         ...
    </servlet>
</web-app>

servlet下的security-role-ref

<web-app>
	<servlet>
		...
		<security-role-ref>
      		<description>...</description>
      		<role-name>...</role-name>
      		<role-link>...</role-link>
      	</security-role-ref>
      	...
    </servlet>
</web-app>

web-app下的servlet-mapping

元素必需/选用描述
<servlet-name>必需URL模式映射的servlet的名称。 此名称在<servlet>与声明标记中分配的servlet的名称相对应。
<url-pattern>必需用于解析URL的一个模式。如果模式匹配,则调用此元素中映射的过滤器。
<web-app>
 <servlet-mapping>
      <servlet-name>controller</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

servlet-mapping下的servlet-name

<servlet-name><url-pattern>不能单独定义 ,两个都是servlet-mapping必须要定义的属性

<web-app>
 <servlet-mapping>
      <servlet-name>controller</servlet-name>
      <url-pattern>*.do</url-pattern>
    </servlet-mapping>
<web-app>

servlet-mapping下的url-pattern

<url-pattern><servlet-name>不能单独定义 ,两个都是servlet-mapping必须要定义的属性

</web-app>
 	<servlet-mapping>
      <servlet-name>controller</servlet-name>
      <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
</web-app>

web-app下的session-config

session-config定义Web应用程序的会话属性。

元素必需/选用描述
<session-timeout>选用设置Web应用程序的会话属性

注:
设置值为-1表示会话永不会超时。

session-config下的session-timeout

<web-app>
 <session-config>
	  <!-- 经过30分钟后会话会超时,指的是空闲时间30分钟,如果交互正在进行,那么将不算在时间内 -->
      <session-timeout>30</session-timeout>    
    </session-config>
</web-app>

web-app下的jsp-config

JSP 的配置

元素必需/选用描述
<jsp-property-group>选用成组导入jsp文件
<taglib>选用描述JSP标签库

jsp-config下的jsp-property-group

元素必需/选用描述
url-pattern必需成组导入jsp文件
include-prelude选用设置jsp网页的抬头,扩展名为.jspf,
include-coda选用设置jsp网页的结尾,扩展名为.jspf
<web-app>
		<jsp-config>
                <jsp-property-group>
                        <url-pattern>*.jsp</url-pattern>
                        <include-prelude>/WEB-INF/jspf/first.jspf</include-prelude>
                        <include-coda>/WEB-INF/jspf/end.jspf</include-coda>
                </jsp-property-group>
        </jsp-config>
</web-app>

jsp-config下的taglib

taglib将JSP 标记库描述符(Tag Library Descriptor 简称TLD)的位置与URI模式相关联。尽管可以在JSP中指定相对于WEB-INF目录的标记库描述符,但是在部署Web应用程序时,也可以使用<taglib>标记来配置标记库描述符。为每个标记库描述符使用单独的元素。

元素必需/选用描述
<taglib-location>必需相对于Web应用程序根目录的标记库描述符的文件位置。
<taglib-uri>必需描述一个相对于web.xml文档位置的URI,用于标识Web应用程序中使用的标记库。如果URI与JSP页面上的taglib指令中使用的URI字符串匹配,则使用此taglib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值