一 web.xml的文件重要性
web.xml是servlet规定的启动配置文件,凡属基于servlet的javaWeb容器必遵守这个规范,而目前主流的容器都是基于servlet的,因此可以理解web.xml是每个javaweb应用都离不开web.xml配置文件。
web.xml完整的名字应该叫做部署描述符文件,当容器启动时会去读这个文件,然后加载相关配置(不延伸servlet更多的知识),该文件通常会放在WEB-INF文件夹下。
二 启动与加载顺序(未得到完全验证与深入)
当一个web项目启动时,容器会按照下面的顺序执行:
读取配置文件web.xml,首先读取
和 两个元素节点。 接着容器创建ServletContext(servlet上下文),后面web所有部分都将共享这个上下文。
容器将
的值对转换为key-value,交给servletContext。 容器创建
中的类实例,创建监听器。
理论上web.xml的标签加载顺序与标签在web.xml的书写位置无关,但是服务器有可能会拒绝执行不按标准顺序的web.xml,所以为了让web.xml具备可移植性,建议最好还是按照标准顺序来书写。那标准的加载顺序大概是什么样的呢?
ServletContext -> context-param -> listener -> filter -> servlet
事实上servletContext在web.xml上不会明文出现,对于多个servlet的加载顺序可以有元素
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;
正数的值越小,启动该servlet的优先级越高。
三 web.xml的标签详解
web.xml和所有的xml文件一样,需要有个一个xml头,这个头给出了xml的版本和文件的字符编码,所以web.xml不同于HTML,所有字符都是大小写敏感的。DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。所有部署描述符文件的顶层(根)元素为web-app。也就是说web.xml主要有三个部分构成:xml头,DOCYTPE声明和
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>
当然DOCTYPE声明也可以写在
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
</web-app>
具体释义:
元素1:
含义
icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg.
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.
范例
元素2、3:
含义
定义应用的名称。
对应用做出描述。
范例
元素4:
含义
context-param 元素用来设定web应用的环境参数(context),它包含两个子元素:
param-name和param-value.
设定Context名称
设定Context名称的值
范例
此所设定的参数,在JSP网页中可以使用下列方法来取得:
${initParam.param_name}
若在Servlet可以使用下列方法来获得:
String param_name=getServletContext().getInitParamter("param_name");
元素5,6:
含义
filter元素用来设定web应用的过滤器,它的两个主要子元素filter-name和filter-class用来定义Filter所对应的class
定义Filter的名称
定义Filter的类名称
filter-mapping 元素的两个主要子元素filter-name和url-pattern.用来定义Filter所对应的URL.
定义Filter的名称.
Filter所对应的RUL.例如:
范例
元素7:
含义
listener元素用来定义Listener接口,它的主要子元素为
定义Listener的类名称
范例
元素8、9:
含义
servlet元素的两个主要子元素servlet-name和servlet-class用来定义servlet所对应的class
定义servlet的名称
定义servlet的类名称
servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL.
定义Servlet的名称.
定义Servlet所对应的RUL.例如:
范例
元素10:
含义
session-config包含一个子元素session-timeout.定义web应用中的session参数.
定义这个web站台所有session的有效期限.单位为分钟.
范例
元素11:
含义
mime-mapping包含两个子元素extension和mime-type.定义某一个扩展名和某一MIME Type做对映.
扩展名称
MIME格式.
范例
元素12:
含义
welcome-file-list包含一个子元素welcome-file.用来定义首页列单.
welcome-file用来指定首页文件名称.我们可以用
范例
元素13:
含义
error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径.
HTTP Error code,例如: 404、403
一个完整名称的Java异常类型
在web应用内的相关资源路径
范例
元素14:
含义
jsp-config元素主要用来设定JSP的相关配置,jsp:config包括
在JSP 1.2时就已经存在了;而
此设定的名称
设定值所影响的范围,如:/CH2 或者/*.jsp
若为true,表示不支持EL语法.
若为true表示不支持<%scription%>语法.
设定JSP网页的编码
设置JSP网页的抬头,扩展名为.jspf
设置JSP网页的结尾,扩展名为.jspf
范例
元素15:
含义
resource-env-ref有两个子元素:
资源的名称 相对于java:comp/env
当web应用查找该资源的时候,返回的Java类名的全称
范例
元素16:
含义
resource-ref元素包括五个子元素description,res-ref-name,res-type,res-auth,res-sharing-scope.利用JNDI取得应用可利用资源.
资源说明
资源名称
资源种类
资源由Application或Container来许可
资源是否可以共享.默认值为 Shareable
范例