<?xml version="1.0" encoding="UTF-8"?><!-- 标明使用的XML版本和文档编码,此项必须位于第一行,之前是空行注释都不行 --> <!--
web.xml学名为配置部署文件,是web应用的入口文件,用于声明系统的各项配置,此文件不是必须的,但也只是最简单的静态项目才没有。
xml文件中大小写敏感,书写次序敏感,自上而下加载,所以配置此文件时要注意标签的顺序和大小写。
--> <!--
文档声明和系统配置声明,web-app标签内为具体的部署配置项。
xmlns为xml文件的命名空间,xmlns:xsi表示文档遵循的标签规范,xsi:schemaLocation表示xmlschema地址。
以上三项内容可使用IDE生成或者在web容器配置文件内找到。
-->
<web-app version="3.0" 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"> <!-- 应用名称,提供GUI工具可能会用来标记这个特定的Web应用的一个名称。 -->
<display-name>Test</display-name> <!-- 应用描述,提供网站的描述 -->
<description>此系统用来测试web.xml的各项配置参数</description> <!--
此元素为空标签,它的存在与否可以指定系统是否可分布式处理。普通系统不添加此标签。
如果web.xml中出现这个元素,则代表站台在开发时已经被设计为能在多个JSP Container 之间分散执行。
-->
<distributable/> <!--
上下文参数,此项用于声明系统初始化时的参数。子元素均为唯一、必选元素。
在servlet中可以通过getServletContext().getInitParameter("context/param");获取此参数。
在JSP中可以通过${initParam.param_name}获取此参数,例如此系统使用${initParam.testInitParam}。
-->
<context-param>
<param-name>testInitParam</param-name>
<param-value>1</param-value>
</context-param> <!--
过滤器配置,filter和filter-mapping成对出现,如果没有后者,前者配置可以说是无效。
filter和filter-mapping中的filter-name相同,表示过滤器名;
filter-class表示过滤器的类地址,为Java类路径,不带.java后缀;
async-supported为servlet 3.0新增的属性,标识过滤器是否支持异步处理,默认为false;
init-param表示过滤器初始化时的参数,在过滤器中可通过FilterConfig.getInitParameter(filter-name)获取;
url-pattern表示过滤器处理的请求类型,/*表示过滤所有请求,*.do表示过滤后缀名是do的请求;
-->
<filter>
<filter-name>test</filter-name>
<filter-class>test.TestFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>test</param-name>
<param-value>1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>test</filter-name>
<url-pattern>*.do</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>/*</url-pattern>
</filter-mapping> <!--
该元素用来注册一个监听器类,常与context-param联合使用。。
监听程序中某些属性的变化,具体监听哪些事件根据其实现的接口来定。
HttpSessionListener,HttpSessionAttributeListener,ServletContextListener, ServletContextAttributeListener
-->
<listener>
<listener-class>test.TestListener</listener-class>
</listener> <!--
Servlet配置,参数含义和Filter类似,此处定义Servlet后在web.xml文件中其他地方引用时可直接引用servlet-name。
init-param表示初始化时的参数,Servlet的参数只能在init()方法内拿到,使用this.getInitParameter("test");
-->
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>test.TestServlet</servlet-class>
<init-param>
<param-name>test</param-name>
<param-value>1</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping> <!--
session相关配置。
session-timeout表示session超时时间,单位为分钟,为0时表示永不超时,建议设置超时时间,可以一定量的减少session劫持攻击;
tracking-mode表示会话中JSESSIONID存储的位置,可选参数为COOKIE、URL、SSL,推荐使用cookie配合http-only使用,可以通过隐藏会话ID减少session劫持攻击;
cookie-config设置与cookie相关的安全配置,详细参数如下:
name设置cookie的键名
domain设置cookie的有效范围,参数内容为域名,常用与跨域访问cookie,例如.baidu.com表示此cookie在百度域名下可用。
path表示cookie所在的目录,默认为/表示根目录且所有文件都能访问此cookie,/test/表示cookie在/test/下且只有此目录下的文件可以访问。
http-only表示此cookie只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增加网站访问的安全性。
secure为true时表示此cookie只能通过HTTPS连接传递到服务器,而HTTP 连接则不会传递该信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。
max-age以秒为单位表示cookie的生存期,默认为-1表示是临时存在,浏览器关闭时就会消失。
-->
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<name>test</name>
<domain>.test.com</domain>
<path>fasdfa</path>
<http-only>true</http-only>
<secure>true</secure>
<max-age>-1</max-age>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config> <!--
指定浏览器对于指定格式的处理方式
extension文件的扩展名,例如.doc/.xls/.ppt等
mime-type对应文件类型的处理方式
-->
<mime-mapping>
<extension>.docx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.template</mime-type>
</mime-mapping> <!-- 首页面,配置项可以有多个,但会根据上下顺序来加载,如果加载项存在则不会继续,例如index.html存在,则不会加载index.jsp -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 错误页面配置,有两种方式,一是根据错误代码配置,二是根据错误类型配置 -->
<error-page>
<error-code>404</error-code>
<location>/test/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/test/error.jsp</location>
</error-page> <!--
JSP页面属性配置
taglib可出现多次,表示引入的自定义标签库,taglib-uri表示标签库引用地址,taglib-location表示标签库本地地址
jsp-property-group主要用于设置JSP相关属性
url-pattern表示匹配哪些文件,例如*.jsp表示所有的jsp文件
el-ignored表示是否开启EL表达式支持
page-encoding设置用户编码
scripting-invalid设置脚本可用性,如果为true则表示JSP页面不支持<%scripting%>语法
is-xml为true表示符合url-pattern的文件为JSP页面
include-prelude向符合url-pattern的文件开头添加此文件中的内容类似于jsp:include
include-coda向符合url-pattern的文件结尾添加此文件中的内容类似于jsp:include
deferred-syntax-allowed-as-literal表示JSP是否支持#{}表达式,jsp2.1及以上设置为true,2.0及以下设置为false,否则${}表达式无法解析。
trim-directive-whitespaces为true时表示删除模板文件编译时产生的空行,可以在一定程度上增加浏览器解析速度,jsp2.1及其以上支持
buffer设置缓冲区的大小,单位KB
error-on-undeclared-namespace,默认为false,为true时表示页面编译时如果JSP页面中引用了未声明的标签时会报错(原文: If it is set to true, then an error must be raised during the translation time, when an undeclared tag is used in a JSP page)
-->
<jsp-config>
<taglib>
<taglib-uri>http://test.net </taglib-uri>
<taglib-location>/WEB-INF/test.tld</taglib-location>
</taglib>
<jsp-property-group>
<url-pattern></url-pattern>
<el-ignored>false</el-ignored>
<page-encoding>UTF-8</page-encoding>
<scripting-invalid>true</scripting-invalid>
<is-xml>true</is-xml>
<include-prelude>test.jsp</include-prelude>
<include-coda>test.jsp</include-coda>
<deferred-syntax-allowed-as-literal>true</deferred-syntax-allowed-as-literal>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
<buffer>10</buffer>
<error-on-undeclared-namespace>true</error-on-undeclared-namespace>
</jsp-property-group>
</jsp-config> <!--
待考证标签,在以后的工作中有机会用到时会进行更新
security-constraint,login-config,security-role,env-entry,ejb-ref,ejb-local-ref,((service-ref*)), resource-ref*,
resource-env-ref*, message-destination-ref*, persistence-context-ref*, persistence-unit-ref*, post-construct*,
pre-destroy*,data-source*)) | message-destination | locale-encoding-mapping-list)) | absolute-ordering)*
-->
</web-app>