1. web.xml各版本区别
2. web.xml配置详解
2.1 java web项目启动加载顺序
2.2 web.xml中定义的元素
web.xml文件是Java Web项目中的一个配置文件,主要用于配置欢迎页、Filter、Listener、Servlet等,但并不是必须的,一个Java Web项目没有web.xml文件也是照样能跑起来的。
1. web.xml各版本区别
首先来看一下Tomcat官网的Servlet和JSP规范规范与的Apache Tomcat版本之间的对应关系,如图:
从中可以清晰的看到不同版本的web.xml文件要使用相应版本的Tomcat服务器。
下面是各版本的web.xml配置的头部声明:
servlet 2.3
servlet 2.4
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"
version="2.4">
servlet 2.5
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">
servlet 3.0
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"
version="3.0">
servlet 3.1
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
servlet 4.0
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
Tomcat在激活、加载、部署web应用时,会解析加载${CATALINA_HOME}/conf目录下所有web应用通用的web.xml,然后解析加载web应用目录中的WEB-INF/web.xml。如果没有WEB-INF/web.xml文件,tomcat会输出找不到的消息,但仍然会部署并使用web应用程序,因此,这个web.xml并不是必要的,不过通常最好还是让每一个上线的web应用程序都有一个自己的WEB-INF/web.xml。
conf/web.xml文件中的设定会应用于所有的web应用程序,而web应用程序的WEB-INF/web.xml中的设定只应用于该应用程序本身。
2. web.xml配置详解
2.1 java web项目启动加载顺序
(1)启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml的两个节点:
和 ;
(2)容器创建一个ServletContext(上下文);
(3)容器将转化为键值对,并交给ServletContext;
(4)容器创建中的类实例,即创建监听;
(5)容器初始化,web.xml中可以定义多个 filter,初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的;
(6)容器初始化, servlet 同 filter 类似。
那么,web项目启动时,可以知道web.xml文件各个节点的加载顺序:context-param -> listener -> filter -> servlet
2.2 web.xml中定义的元素
web-app>
定义了WEB应用的名字
声明WEB应用的描述信息
context-param元素声明应用范围内的初始化参数。
过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。
servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。
在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。
服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet/ServletName.但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。
如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。 可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。
如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。
指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。
在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。
声明与资源相关的一个管理对象。
声明一个资源工厂使用的外部资源。
制定应该保护的URL。它与login-config元素联合使用
指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。
给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。
声明Web应用的环境项。
声明一个EJB的主目录的引用。
声明一个EJB的本地主目录的应用。
相应元素配置:
(1)Web应用图标
/images/app_small.gif
/images/app_large.gif
(2)Web 应用名称
App Name
(3)Web 应用描述
This is a app disciption.
(4)上下文初始化参数
ContextParameter
test
It is a test parameter.
在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
(5)过滤器配置
setCharacterEncoding
com.myTest.setCharacterEncodingFilter
encoding
utf-8
setCharacterEncoding
/*
(6)监听器配置
listener.SessionListener
(7)Servlet配置
基本配置:
test
TestServlet
test
/test
高级配置:
test
TestServlet
foo
bar
Security role for anonymous access
tomcat
1
test
/test
(8)会话超时配置(单位为分钟)
120
(9)MIME类型配置
html
text/html
(10)欢迎页配置
index.jsp
index.html
index.htm
(11)配置错误页面
方法1:通过错误码来配置error-page
404
/404.jsp
上面的配置当系统发生404错误时,页面将跳转到错误处理页面404.jsp
方法2:通过异常类型配置error-page
java.lang.NullException
/error.jsp
上面的配置当系统发生java.lang.NullException异常时,页面将跳转到错误处理页面error.jsp
(12)TLD配置
http://jakarta.apache.org/tomcat/debug-taglib
/WEB-INF/jsp/debug-taglib.tld
如果MyEclipse一直在报错,应该把放到中
http://jakarta.apache.org/tomcat/debug-taglib
/WEB-INF/pager-taglib.tld
(13)资源管理对象配置
jms/StockQueue
(14)资源工厂配置
mail/Session
javax.mail.Session
Container
配置数据库连接池就可在此配置:
JNDI JDBC DataSource of shop
jdbc/sample_db
javax.sql.DataSource
Container
(15)安全限制配置
Example Security Constraint
Protected Area
/jsp/security/protected/*
DELETE
GET
POST
PUT
tomcat
role1
(16)登陆验证配置
FORM
Example-Based Authentiation Area
/jsp/security/protected/login.jsp
/jsp/security/protected/error.jsp
(17)安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。
tomcat
(18)Web环境参数:env-entry元素声明Web应用的环境项
minExemptions
1
java.lang.Integer
(19)EJB 声明
Example EJB reference
ejb/Account
Entity
com.mycompany.mypackage.AccountHome
com.mycompany.mypackage.Account
(20)本地EJB声明
Example Loacal EJB reference
ejb/ProcessOrder
Session
com.mycompany.mypackage.ProcessOrderHome
com.mycompany.mypackage.ProcessOrder