- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
E.1 概述
在 Servlet 3 之前,部署工作必然涉及部署描述符,即 web.xml 文件,我们在该文件中配置应用程序的各个方面。但在 Servlet 3 中,部署描述符是可选的,因为我们可以使用标注来映射一个 URL 模式的资源。不过,若存在如下场景,则依然需要部署描述符。
需要传递初始参数给 ServletContext。
有多个过滤器,并要指定调用顺序。
需要更改会话超时设置。
要限制资源的访问,并配置用户身份验证方式。
清单 E.1 展示了部署描述符的框架。它必须被命名为 web.xml 且合并在应用目录的 WEB-INF 目录下。
清单 E.1 部署描述符的框架
< ?xml version="1.0" encoding="ISO-8859-1"?>
< web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
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"
[metadata-complete=”true|false”]
>
...
< /web-app>
xsi:schemaLocation 属性指定了模式文档的位置,以便可以进行验证。version 属性指定了 Servlet 规范的版本。
可选的 metadata-complete 属性指定部署描述符是否是完整的,若值为 True,则 Servlet/JSP 容器将忽略 Servlet 注解。若值为 False 或不存在,则容器必须检查类文件的 Servlet 注解,并扫描 web fragments 文件。
web-app 元素是文档的根元素,并且可以具有如下子元素:
Servlet 声明。
Servlet 映射。
ServletContext 的初始化参数。
会话配置。
监听器类。
过滤器定义和映射。
MIME 类型映射。
欢迎文件列表。
错误页面。
JSP 特定的设置。
JNDI 设置。
每个元素的配置规则可见 web-app_3_1.xsd 文档,可以从如下网站下载:
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd
web-app_3_1.xsd 包括另一种模式(webcommon_3_1.xsd),其中包含了大部分信息。可从如下网站下载:
http://xmlns.jcp.org/xml/ns/javaee/web-common_3_1.xsd
webcommon_3_1.xsd 包括以下两种模式:
javaee_7.xsd,定义了其他 Java 共享公共元素 EE7 的部署类型(EAR、JAR 和 RAR)。
jsp_2_7.xsd,定义要素配置的一部分,JSP 根据 JSP 2.3 规范中的应用。
本节列出了在部署描述符中常见的 Servlet 和 jsp 元素,但不包括那些不在 Servlet 或 JSP 规范中的 Java EE 元素。
E.1.1 核心元素
本节将详细介绍各重要元素的细节。web-app 的子元素可以以任何顺序出现。某些元素,如 session-config、jsp-config 和 login-config 只能出现一次,而另一些元素,如 Servlet、filter 和 welcome-file-list 可以出现很多次。
后续几个小节会分别描述在<web-app>元素下的一级元素。若要查找非<web-app>下的非一级元素,请查找其父元素。例如,taglib 元素在“jsp-config”下,而 load-on-startup 在 Servlet 下。本节后续小节按字母顺序排序。
E.1.2 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>location</param-name>
<param-value>localhost</param-value>
</context-param>
<context-param>
<param-name>port</param-name>
<param-value>8080</param-value>
<description>The port number used</description>
</context-param>
E.1.3 distributable
若定义了 distributable 元素,则表明应用程序已部署到分布式的 Servlet/JSP 容器。distributable 元素必须是空的。例如,下面是一个 distributable 例子。
<distributable/>
E.1.4 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>
E.1.5 filter
filter 指定一个 Servlet 过滤器。该元素至少包括一个 filter-name 元素和一个 filter-class 元素。此外,它也可以包含以下元素:icon、display-name、discription、init-param 以及 async-supported。
filter-name 元素定义了过滤器的名称。过滤器名称必须全局唯一。filter-class 元素指定过滤器类的全路径名称。可由 init-param 元素来配置过滤器的初始参数(类似于<context-param>),一个过滤器可以有多个 init-param。
下面是 Upper Case Filter 和 Image Filter 这两个 filter 元素。
<filter>
<filter-name>Upper Case Filter</filter-name>
<filter-class>com.example.UpperCaseFilter</filter-class>
</filter>
<filter>
<filter-name>Image Filter</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>
E.1.6 filter-mapping
过滤器映射元素是指定过滤器要被映射到的一个或多个资源。过滤器可以被映射到 Servlet 或者 URL 模式。将过滤器映射到 Servlet 会致使过滤器对该 Servlet 产生作用。将过滤器映射到 URL 模式,则会使其对所有 URL 与该 URL 模式匹配的资源进行过滤。过滤的顺序与过滤器映射元素在部署描述符中的顺序一致。
过滤器映射元索中包含一个 filter-name 元素和一个 url-pattern 元素或者 servlet-name 元素。
filter-name 元素的值必须与利用 filter 元素声明的某一个过滤器名称相匹配。
下面的例子中是两个过滤器元素和两个过滤器映射元素。
<filter>
<filter-name>Logging Filter</filter-name>
<filter-class>com.example.LoggingFilter</filter-class>
</filter>
<filter>
<filter-name>Security Filter</filter-name>
<filter-class>com.example.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Logging Filter</filter-name>
<servlet-name>FirstServlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>Security Filter</filter-name>
<url-pattern>/ *</url-pattern>
</filter-mapping>
E.1.7 listener
listener 元素用来注册一个侦听器。其子元素 listener-class 包含监听器类的全路径名。如下是一个示例:
<listener>
<listener-class>com.example.AppListener</listener-class>
</listener>
E.1.8 locale-encoding-mapping-list 和 locale-encoding-mapping
locale-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>
E.1.9 login-config
login-config 元素包括 auth-method、realm-name 以及 form-login-config 元素,每个元素都是可选的。
auth-method 元素定义了认证方式,可选值为 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 则配置了登录失败时显示错误页面的资源路径。同样,路径为应用目录的相对路径,且必须以“/”开始。
下面是一个示例:
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Members Only</realm-name>
</login-config>
另一个示例如下:
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/loginForm.jsp</form-login-page>
<form-error-page>/errorPage.jsp</form-error-page>
</form-login-config>
</login-config>
E.1.10 mime-mapping
mime-mapping 元素用来把一个 MIME 类型映射到一个扩展名。该元素由一个 extension 元素和一个 mime-type 元素组成。示例如下:
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
E.1.11 security-constraint
security-constraint 元素允许对一组资源进行限制访问。
security-constraint 元素有如下子元素:一个可选的 display-name 元素、一个或多个 web-resource-collection 元素、可选的 auth-constraint 元素和一个可选的 user-data-constraint 元素。
web-resource-collection 元素标识了一组需要进行限制访问的资源集合。这里,你可以定义 URL 模式和所限制的 HTTP 方法。如果没有定义 HTTP 方法,则表示应用于所有 HTTP 方法。
auth-constraint 元素指明哪些角色可以访问受限制的资源集合。如果没有指定,则应用于所有角色。
user-data-constraint 元素用于指示在客户端和 Servlet/JSP 容器传输的数据是否保护。
web-resource-collection 元素包含一个 web-resource-name 元素、一个可选的 description 元素、零个或多个 url-pattern 元素,以及零个或多个 http-method 元素。
web-resource-name 元素指定受保护的资源名称。
http-method 元素指定 HTTP 方法,如 GET、POST 或 TRACE。
auth-constraint 元素包含一个可选的 description 元素、零个或多个 role-name 元素。role-name 元素指定角色名称。
user-data-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-resource-collection>
<auth-constraint>
<role-name>payingMember</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>Digest</auth-method>
<realm-name>Digest Access Authentication</realm-name>
</login-config>
E.1.12 security-role
security-role 元素声明用于安全限制的安全角色。这个元素有一个可选的 description 元素和 role-name 元素。下面是一个例子:
<security-role>
<role-name>payingMember</role-name>
</security-role>
E.1.13 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>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet>
<servlet-name>SecureServlet</servlet-name>
<servlet-class>com.brainysoftware.SecureServlet</servlet-class>
<load-on-startup>20</load-on-startup>
</servlet>
E.1.14 servlet-mapping
servlet-mapping 元素将一个 Servlet 映射到一个 URL 模式。该元素必须有一个 servlet-name 元素和 url-pattern 元素。
下面的 servlet-mapping 元素映射一个 Servlet 到/first。
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.brainysoftware.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
E.1.15 session-config
session-config 元素定义了用于 javax.servlet.http.HttpSession 实例的参数。此元素可包含一个或更多的以下内容:session-timeout、cookie-config 或 tracking-mode。
session-timeout 元素指定会话超时间隔(分钟)。该值必须是整数。如果该值是零或负数,则会话将永不超时。
cookie-config 元素定义了跟踪会话创建的 cookie 的配置。
tracking-mode 元素定义了跟踪会话模式,其有效值是 COOKIE、URL 或 SSL。
下面定义的 session-config 元素使得应用的 HttpSession 对象在 12 分钟不活动后失效。
<session-config>
<session-timeout>12</session-timeout>
</session-config>
E.1.16 welcome-file-list
welcome-file-list 元素指定当用户在浏览器中输入的 URL 不包含一个 Servlet 名称或 JSP 页面或静态资源时所显示的文件或 Servlet。
welcome-file-list 元素包含一个或多个 welcome-file 元素。welcome-file 元素包含默认的文件名。如果在第一个 welcome-file 元素指定的文件没有找到,则 Web 容器将尝试显示第二个,直到最后一个。
下面是一个 welcome-file-list 元素的例子。
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
下面的示例,第一个 welcome-file 元素指定了一个在应用程序目录下的 index.html;第二个 welcome-file 为 servlet 目录下的欢迎文件。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>servlet/welcome</welcome-file>
</welcome-file-list>
E.1.17 JSP-Specific Elements
<web-app>元素下的 jsp-config 元素,可以指定 JSP 配置。它可以具有零个或多个标签 taglib 和零个或多个 jsp-property-group 元素。下面首先介绍 taglib 元素,然后介绍 jsp-property-group 元素。
E.1.18 taglib
taglib 元素定义了 JSP 定制标签库。taglib 元素包含一个 taglib-uri 元素和 taglib-location 元素。taglib-uri 元素定义了 Servlet/JSP 应用程序所用的标签库的 URI,其值相当于在部署描述符路径。
taglib-location 元素指定 TLD 文件的位置。
下面是一个 taglib 元素的例子。
<jsp-config>
<taglib>
<taglib-uri>
http://brainysoftware.com/taglib/complex
</taglib-uri>
<taglib-location>/WEB-INF/jsp/complex.tld
</taglib-location>
</taglib>
</jsp-config>
E.1.19 jsp-property-group
jsp-property-group 中的元素可为一组 JSP 文件统一配置属性。使用<jsp-property-group>子元素可做到以下几点:
指示 EL 显示是否忽略。
指示脚本元素是否允许。
指明页面的编码信息。
指示一个资源是 JSP 文件(XML 编写)。
预包括和代码自动包含。
jsp-property-group 包含如下子元素:
一个可选的 description 元素。
一个可选的 display-name 元素。
一个可选的 icon 元素。
一个或多个 url-pattern 元件。
一个可选的 el-ignored 元素。
一个可选的 page-encoding 元素。
一个可选的 scripting-invalid 元素。
一个可选的 is-xml 元素。
零个或多个 include-prelude 元素。
零个或多个 include-code 元素。
url-pattern 元素用来指定可应用相应属性配置的 URL 模式。
el-ignored 元素值为 True 或 False。True 值表示在匹配 URL 模式的 JSP 页面中,EL 表达式无法被计算,该元素的默认值是 False。
page-encoding 元素指定 JSP 页面的编码。page-encoding 的有效值和页面的 pageEncoding 的有效值相同。若 page-encoding 指定值与匹配 URL 模式的 JSP 页面中的 pageEncoding 属性值不同时,则会产生一个转换时错误。同样,若 page-encoding 指定值与 XML 文档声明的编码不同,也会产生一个转换时错误。
scripting-invalid 元素值为 True 或 False。True 值是指匹配 URL 模式的 JSP 页面不支持<% scripting %>语法。scripting-invalid 元素的默认值是 False。
is-xml 元素值为 True 或 False,True 表示匹配 URL 模式的页面是 JSP 文件。
include-prelude 元素值为相对于 Servlet/JSP 应用的相对路径。若设置该元素,则匹配 URL 模式的 JSP 页面开头处会自动包含给定路径文件(同 include 指令)。
include-coda 元素值为相对于 Servlet/JSP 应用的相对路径。若设置该元素,则匹配 URL 模式的 JSP 页面结尾处会自动包含给定路径文件(同 include 指令)。
在下面的例子中,jsp-property-group 配置所有的 JSP 页面无法执行 EL 表达式。
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
在下面的例子中,jsp-property-group 配置所有的 JSP 页面不支持<% scripting %>语法。
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论