web.xml

 部署描述符

<?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" 
    [metadata-complete="true|false"]
    version="3.0">

</web-app>

说明:

  • xsi:schemaLocation 属性指定了模式文档的位置,以便可以进行验证。
  • version 属性指定了Servlet规范的版本。
  • metadata-complete 可选属性,指定部署描述符是否是完整的,若值为true,则Servlet/JSP容器将忽略Servlet注解,若值为false或不存在,则类容器必须检查类文件的Servlet注解,并扫描web fragments文件。
  • web-app元素是文档的根元素,并且可以具有如下子元素
    • Servlet声明
    • Servlet映射  
    • ServletContext初始化参数
    • 会话配置
    • 监听器类
    • 过滤器定义和映射
    • MIME类型映射
    • 欢迎文件列表
    • 错误页面
    • JSP特定的设置
    • JNDI设置

context-param

可用 context-param 元素传值给 ServletContext 。这些值可以被任何 Servlet / JSP页面读取。
context-param 元素由名称/值对构成,并可以通过调用 ServletContext 的 getInitParameter 方法来读取。可以定义多个 context-param 元素,每个参数名在本应用中必须唯一。ServletContext.getInitParameterNames() 方法会返回所有的参数名称。

每个 context-param 元素必须包含一个 param-name 元素和一个 param-value 元素。param-name 定义参数名,而 param-value 定义参数值。另有一个可选的元素,即 description 元素,用来描述参数。

下面是 context-param 元素的两个例子:

<context-param>
    <param-name>name1</param-name>
    <param-value>value1</param-value>
</context-param>

<context-param>
    <param-name>name2</param-name>
    <param-value>value2</param-value>
    <description>the param's description</description>
</context-param>

distributable

若定义了 destributable 元素,则表明应用程序已部署到分布式的 Servlet / JSP 容器。distributable 元素必须是空的。例如,下面是一个 distributable 例子:

<distributable/>

error-page

error-page元素包含一个 HTTP 错误代码与资源路径或 Java 异常类型与资源路径之间的映射关系。error-page 原定义容器在特定 HTTP 错误或异常时应返回的资源路径。error-page 元素由如下成分构成:

  • error-code,指定一个 HTTP 错误代码
  • exception-type,指定 Java 的异常类型(全路径名称)
  • location,指定要被显示的资源位置

下面的配置告诉 Servlet / JSP 容器,当出现 HTTP 404时,显示位于应用目录下的 error.html 页面。

<error-page>
    <error-code>404</error-code>
    <location>/error.html</location>
</error-page>

下面的配置告诉 Servlet / JSP 容器,当发生 ServletException 时,显示 exception.html 页面。

<error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/exception.html</location>
</error-page>

 filter

filter指定一个 Servlet 过滤器,改元素至少包含一个 filter-name 元素和一个 filter-class 元素。此外,它也可以包含以下元素:icon、display-name、descriptin、init-param 以及 async-supported

  • filter-name 元素定义了过滤器的名称。过滤器名称必须全局唯一。
  • filter-class 元素指定过滤器类的全路径名称。可由 init-param 元素来配置过滤器的初始参数(类似于<context-param>),一个过滤器可以由多个 init-param 。
<filter>
    <filter-name>Upper Case Filter</filter-name>
    <filter-class>com.example.UpperCaseFilter</filter-class>
</filter>

<filter>
    <filter-name>ImageFilter</filter-name>
    <filter-class>com.example.ImageFilter</filter-class>
    <init-param>
        <param-name>frequency</param-name>
        <param-value>1909</param-value>
    </init-param>
    <init-param>
        <param-name>resolution</param-name>
        <param-value>1024</param-value>
    </init-param>
</filter>

filter-mapping

过滤器映射元素指定过滤器要被映射到的一个或多个资源。过滤器可以被映射到 servlet 或者 URL 模式。将过滤器映射到 servlet 会致使过滤器对该 servlet 产生作用。将过滤器映射到 URL 模式,则会使其对所有 URL 模式匹配的资源进行过滤。过滤的顺序与过滤器映射元素在部署描述符中的顺序一致。

过滤器映射元素中包含一个 filter-name 元素和一个 URL 模式元素或者 servlet-name 元素。

filter-name 元素的值必须与利用 filter 元素声明的某一个过滤器名称相匹配

下面的例子中是两个过滤器元素和与之对应的过滤器映射元素。

<filter>
    <filter-name>Logging Filter</filter-name>
    <filter-class>com.example.LoggingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Logging Filter</filter-name>
    <servlet-name>FirstServlet</servlet-name>
</filter-mapping>


<filter>
    <filter-name>Security Filter</filter-name>
    <filter-class>com.example.SecurityFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Security Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

listener

listener元素用来注册一个监听器,其子元素 listener-class 包含监听器类的全路径名。如下是一个实例:

<listener>
    <listener-class>com.example.AppListener</listener-class>
</listener>

locale-encoding-mapping-list 和 locale-encoding-mapping

local-encoding-mapping-list 包含了一个或多个 locale-encoding-mapping 元素。每个 locale-encoding-mapping 定义了 locale 以及编码的映射,分别用 locale 以及 encoding 元素定义,locale 元素的值必须是定义在 ISO 639 中的语言编码,如 en,或是采用 “语言编码_国家编码” 格式,如 en_US。其中,国家编码值必须定义在 ISO 3166 中。

如下是一个示例:

<locale-encoding-mapping-list>
    <locale-encoding-mapping>
        <locale>ja</locale>
        <encoding>Shift_JIS</encoding>
    </locale-encoding-mapping>
</locale-encoding-mapping-list>

login-config

login-config 元素包括 auth-method、realm-name 以及 form-login-config 元素,每个元素都是可选的。

  • auto-config 元素定义了认证方式,可选值为 BASIC、DIGEST、FORM、CLIENT-CERT。
  • realm-name 元素定义了用于 BASIC 以及 DIGEST 认证方式的 realm 名称。
  • form-login-config 则定义了用于 FORM 认证方式的登陆页面和失败页面。若没有采用 FORM 认证方式,则该元素被忽略。form-login-config 元素包括 form-login-page 和 form-error-page 两个子元素。
    • form-login-page 配置了显示登陆页面的资源路径,路径为应用目录的相对路径,且必须以 “/” 开始;
    • form-error-page 则配置了登陆失败时显示错误页面的资源路径,同样,路径为应用目录的相对路径,且必须以 “/” 开始。

BASIC 认证示例:

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Members Only</realm-name>
</login-config>

 DIGEST 认证示例:

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>Manager Only</realm-name>
</login-config>

 FORM 认证示例:

<login-config>
    <auth-method>FORM</autn-method>
    <form-login-config>
        <form-login-page>/loginForm.jsp</form-login-page>
        <form-error-paga>/errorPage.jsp</form-error-page>
    </form-login-config>
</login-config>

mime-mapping

mime-mapping 元素用来映射一个MIME类型到一个扩展名,它由一个 extension 元素和一个 mime-type 元素组成,示例如下:

<mime-mapping>
    <extension>txt</entension>
    <mime-type>text/plain</mime-type>
</mime-mapping>

security-constraint

security-constraint 元素允许对一组资源进行限制访问。

security-constraint 元素有如下子元素:一个可选的 display-name 元素,一个或多个 web-resource-collection 元素,可选的 auth-constraint 元素和一个可选的 user-date-constraint 元素。

  • web-resource-collection 元素标识了一组需要进行限制访问的资源集合。这里,你可以定义 URL 模式和所限制的 HTTP 方法。如果没有定义 HTTP 方法,则表示应用于所有的 HTTP 方法。web-resource-collection 元素包含一个 web-resource-name 元素,一个可选的 description 元素、零个或多个 url-pattern 元素,以及零个或多个 http-method 元素。
    • web-resource-name 元素指定受保护资源的名称。
    • http-method 元素指定 HTTP 方法,如GET,POST,TRACE。
  • auth-constraint 元素指明哪些角色可以访问受限制的资源集合。如果没有指定,则应用于所有的角色。auth-constraint 元素包含一个可选的 description 元素、零个或多个 role-name 元素。role-name 元素指定角色名称。
  • user-date-constraint 元素用于指示在客户端和 Servlet/JSP 容器传输的数据是否受保护。user-date-constraint 元素包含一个可选的 description 元素和一个 transport-guarantee 元素。
    • transport-guarantee 元素的取值范围有:NONE、INTEGRAL 或 CONFIDENTIAL 。NONE 表示该应用程序不需要安全传输保障。
      • INTEGRAL 意味着服务器和客户端之间的阿数据在传输的过程中不能被篡改。
      • CONFIDENTIAL 意味着必须加密传输数据。大多数情况下,安全套接字层(SSL)会被应用于 INTEGRAL 或 CONFIDENTIAL。
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Members Only</web-resource-name>
        <url-pattern>/members/*</url-pattern>
    </web-rescource-collection>
    <auth-constraint>
        <role-name>payingMember</role-name>
    </auth-constraint>
</security-constraint>

<loging-config>
    <auth-method>Digest</auth-method>
    <realm-name>Digest Access Authentication</realm-name>
</loging-confif>

security-role

security-role 元素声明用于安全限制的安全角色。这个元素有一个可选的 description 元素和 role-name 元素。

<security-role>
    <role-name>payingMember</role-name>
</security-role>

Servlet

Servlet 元素用来配置 Servlet,包括如下子元素:

  • 一个可选的 icon 元素
  • 一个可选的 description 元素
  • 可选的 display-name 元素
  • 一个 servlet-name 元素
  • 一个 servlet-class 元素或一个 jsp-file 元素
  • 零个或更多的 init-param 元素
  • 一个可选的 load-on-startup 元素
  • 可选的 run-as 元素
  • 可选的 enabled 元素
  • 可选的 async-supported 元素
  • 可选的 multipart-config 元素
  • 零个或多个 security-role-ref 元素

一个 Servlet 元素至少必须包含一个 servlet-name 元素和一个 servlet-class 元素,或者一个 servlet-name 元素和一个 jsp-file 元素

servlet-name 元素定义的 Servlet 名称在应用程序中必须是唯一的。

servlet-class 元素指定的类名为全路径名。

jsp-file 元素指定 JSP 页面的路径,该路径是应用程序的相对路径,必须以“/”开始。

init-param 的子元素可以用来传递一个初始参数给 Servlet。init-param 元素的构成同 context-param。

可以使用 load-on-startup 元素在 Servlet / JSP 容器启动时自动加载 Servlet。加载一个 Servlet 是指实例化 Servlet 和调用它的 init 方法。使用此元素可以避免由于加载 Servlet 而导致对第一个请求的响应延迟。如果改元素指定了 jsp-file 元素,则 JSP 文件被编译成 Servlet ,并加载该 Servlet。

load-on-startup 可以指定一个整数值来指定加载顺序。例如,若果有两个 Servlet 且都包含一个 load-on-startup 元素,则值小的 Servlet 优先加载。若没有指定值或值为符数,则由 Web 容器决定如何加载。若两个 Servlet 具有相同的 load-on-startup 值,则加载 Servlet 的顺序不能确定。

run-as 用来覆盖调用 EJB 的安全标识。角色名时当前 Web 应用程序定义的安全角色之一。

security-role-ref 元素映射在调用 Servlet 的 isUserInRole 方法时角色名到应用程序定义的安全角色。security-role-ref 元素包含一个可选的 description 元素,一个 role-name 元素和一个 role-link 元素。

role-link 元素用于安全角色映射到一个已定义的安全角色,必须包含一个定义在 security-role 元素中的安全角色。

async-supported 元素是一个可选的元素,其值可以时 True 或 False。它表示 Servlet 是否支持异步处理。

enabled 元素也是一个可选的元素,其值可以是 True 或 False。若设置此元素为 False, 则禁用这个 Servlet

例如,映射安全角色“PM”与角色名字 “payingMember” 的配置如下:

<security-role-ref>
    <role-name>PM</role-name>
    <role-link>payingMember</role-link>
</security-role-ref>

这样,若属于 payingMember 角色的用户调用 Servlet 的 isUserInRole (“payingMember”)方法,则结果为真。

下面时 Servlet 的两个例子:

<servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.brainysoftware.UploadServlet</servlet-class>
</servlet>

<servlet>
    <servlet-name>SecurityServlet</servlet-name>
    <servlet-class>com.brainysoftware.SecureServlet</servlet-class>
    <load-on-startup>20</load-on-startup>
</servlet>

(待续)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值