- 内容提要
- 作者简介
- 译者简介
- 前言
- 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 部署描述符
C.11 使用部署描述符
正如在前面的例子中所见到的,编写和部署 Servlet 都是很容易的事情。部署的一个方面是用一个路径配置 Servlet 的映射。在这些范例中,是利用 WebServlet 标注类型,用一个路径映射了一个 Servlet。
利用部署描述符是配置 Servlet 应用程序的另一种方法,部署描述符总是命名为 web.xml,并且放在 WEB-INF 目录下。本章介绍了如何创建一个名为 servletapi3 的 Servlet 应用程序,并为它编写了一个 web.xml。
servletapi3 有 SimpleServlet 和 WelcomeServlet 两个 Servlet,还有一个要映射 Servlets 的部署描述符。清单 C.5 和清单 C.6 分别展示了 SimpleServlet 和 WelcomeServlet。注意,Servlet 类是没有用 @WebServlet 注解的。部署描述符如清单 C.7 所示。
清单 C.5 未注解的 SimpleServlet 类
package servletapi3;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 8946L;
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<!DOCTYPE html><html><head></head>" +
"<body>Simple Servlet</body></html");
}
}清单 C.6 未注解的 WelcomeServlet 类
package servletapi3;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WelcomeServlet extends HttpServlet {
private static final long serialVersionUID = 27126L;
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<!DOCTYPE html><html><head></head>"
+ "<body>Welcome</body></html>");
}
}清单 C.7 部署描述符
< ?xml version="1.0" encoding="UTF-8"?>
< 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">
< servlet>
< servlet-name>SimpleServlet< /servlet-name>
< servlet-class>servletapi3.SimpleServlet< /servlet-class>
< load-on-startup>10< /load-on-startup>
< /servlet>
< servlet-mapping>
< servlet-name>SimpleServlet< /servlet-name>
< url-pattern>/simple< /url-pattern>
< /servlet-mapping>
< servlet>
< servlet-name>WelcomeServlet< /servlet-name>
< servlet-class>servletapi3.WelcomeServlet< /servlet-class>
< load-on-startup>20< /load-on-startup>
< /servlet>
< servlet-mapping>
< servlet-name>WelcomeServlet< /servlet-name>
< url-pattern>/welcome< /url-pattern>
< /servlet-mapping>
< /web-app>使用部署描述符有诸多好处。其一,可以将没有对等元素的元素放在 @WebServlet 中,如 load-on-startup 元素。这个元素在应用程序启动时加载 Servlet,而不是在第一次调用 Servlet 时加载。使用 load-on-startup 意味着第一次调用 Servlet 所花的时间并不比后续的调用长。如果 Servlet 的 init 方法需要花费一些时间才能完成的话,这项功能就特别有用。
使用部署描述符的另一个好处是,如果需要修改配置值,如 Servlet 路径,则不需要重新编译 Servlet 类。
此外,可以将初始参数传给一个 Servlet,并且不需要重新编译 Servlet 类,就可以对它们进行编辑。
部署描述符还允许覆盖在 Servlet 标注中定义的值。Servlet 上的 WebServlet 注解如果同时也在部署描述符中进行声明,那么它将不起作用。但是,在有部署描述符的应用程序中,却不在部署描述符中注解的 Servlet 时,则仍然有效。这意味着,可以注解 Servlet,并在同一个应用程序的部署描述符中声明这些 Servlet。
图 C.8 展示了有部署描述符的 servletapi3 的目录结构。这个目录结构与 servletapi1 的目录结构没有太大区别。唯一的区别在于,servletapi3 在 WEB-INF 目录中有一个 web.xml 文件(部署描述符)。

图 C.8 有部署描述符的 servletapi3 的目录结构
现在,在部署描述符中声明 SimpleServlet 和 WelcomeServlet,可以利用这些 URL 来访问它们:
http://localhost:8080/servletapi3/simple
http://localhost:8080/servletapi3/welcome绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论