最近看了下配置文件(Deployment Descriptor:简称DD),又称部署描述文件,下面详细介绍下该文件的组成和作用:
一、<web-app>有四个属性:
1、xmlns:申明了web.xml文件的名称空间的xml方案文档的位置;
2、xmls:xsi:指定了命名空间的案例;
3、xsi:schemeLocation:指定了发方案的位置;
4、version:制定方案的版本;
二、DD文件定义:(下面为<web-app>完整的DTD定义)
<!ELEMENT web-app (icon?, display-name?, description?,distributable?, context-param*, filter*, filter-mapping*,listener*, servlet*, servlet-mapping*, session-config?,mime-mapping*, welcome-file-list?,error-page*, taglib*, resource-env-ref*, resource-ref*,security-constraint*, login-config?, security-role*,env-entry*,ejb-ref*, ejb-local-ref*)>
在DTD中,带?的元素可以出现0次或者一次,带*元素可出现0次或多次,带+元素可出现一次或多次,不带则只出现一次。
对其中比较常用的元素描述下:
description:对应用程序的简短描述;
displey-name:应用程序的显示名称;
context-param:应用程序的初始参数;
servlet:定义servlet;
servlet-mapping:servlet的映射;
welcome-file-list:应用程序的欢迎文件;
session-config:会话时间;
listener:定义监听器类;
filter:定义过滤器类;
filter-mapping:过滤器映射;
error-page:错误处理页面;
security-constraint:web应用程序的安全约束;
mime-mapping:常用文件扩展名的MIME类型;
三、<Servlet>元素
1、<servlet-name>元素:必须选,定义servlet名称,在DD文件中应该唯一,可通过servletConfig的getServletName()方法检索;
2、<servlet-class>元素:制定servlet完整名称,需带包
WEB-INF目录中的classes目录和lib目录中JAR文件会被自动添加到容器的类路径中,不需设置类路径
3、<init-param>元素:向servlet传递初始化参数,每个<int-param>有仅有一组<param-name>和<param-value>子元素,可通过ServletConfig接口的getInitParameter()方法检索初始化参数;
4、<load-on-startup>元素:一般的servlet是在被请求时由容器装入内存,这只一个正数则在启动时载入该servlet,值小的优先装入,负数或者没有指定,容器将根据需要决定何时装入servlet
四、<servlet-mapping>元素:指定那个URl模式被该servlet处理
1、URL组成:
http://www.myserver.com/myapp/helloServlet/hello/abc.jsp?user=zhuwangbiluo
第一部分:协议与主机名第二部分:上下文路径第三部分:servlet路径第四部分:路径信息第五部分:查询串
可通过请求对象的getContextPath()、getServletPath()、getPathInfo()方法获得上下文路径、servlet路径、路径信息
2、<url-pattren>三种形式
1)、目录匹配:以“/”开头,以"/*"结尾形式,如:
/helloServlet/hello/*
任何在Servlet路径中以/helloServlet/hello/开头的URL都匹配
2)、扩展名匹配:以“*”开头,后接一个扩展名(如:“*.do”或者“*.pdf”等)如:*.do
映射把所有以.do结尾的请求发送给该servlet
3)、精确匹配:所有其他字符串都作为精确匹配,如:
/report
只有http://www....../myapp/report才符合要求
3、容器如何匹配URL:
1)、容器收到URL,解析,取出第一部分作为上下文路径,这里是/myapp,在tomcat中查找是否有名为myapp的应用程序;
2)、若没有,则上下文路径为零,发送到默认应用程序(ROOT);
3)、有的话,继续解析,尝试将servlet路径与servlet映射匹配,找到匹配,则完整的URL请求(除上下文路径)就是servlet路径,该情况下路径信息为null;
4)、容器沿着请求URL路径树向下,每次一层目录,使用/作为路径分隔符,反复尝试最长路径,看是否与一个servlet匹配,有的话,改URL的匹配就是servlet路径,剩余为路径信息;
5)、找不到,发送404错误消息到客户端。
五、<welcome-file-list>元素:在对应URL目录首先查找有无对应servlet,没有则依次看有无index.html,index.jsp,找到则显示该文件。再无,若找到list元素中的文件,将其返回客户端,否则报404错误。
出处:http://blog.****.net/cl05300629/article/details/9339205 作者:伫望碧落