webapp配置文件之web.xml
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
注:
- 我们可以发现模板一中的
xmlns
为http://java.sun.com/xml/ns/j2ee
而模板二中的xmlns
为http://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
标签内的某些元素是有顺序的,例如description
,display-name
, icon
的三个标签必须按照description
到display-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 。 |