- 内容提要
- 作者简介
- 译者简介
- 前言
- 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.3 编写基础的 Servlet 应用程序
其实,编写 Servlet 应用程序出奇简单。只需要创建一个目录结构,并把 Servlet 类放在某个目录下。本节将教你如何编写一个名为 servletapi 1 的 Servlet 应用程序。最初,它会包含一个 Servlet,即 MyServlet,其效果是向用户发出一条问候。
要运行 Servlets,还需要一个 Servlet 容器。Tomcat 是一个开源的 Servlet 容器,它是免费的,并且可以在任何能跑 Java 的平台上运行。如果你到现在都还没有安装 Tomcat,应该去看看附录 A,并安装一个。
C.3.1 编写和编译 Servlet 类
确定你的机器上有了 Servlet 容器后,下一步就要编写和编译一个 Servlet 类。本例中的 Servlet 类是 MyServlet,如清单 C.1 所示。按照惯例,Servlet 类的名称要以 Servlet 作为后缀。
清单 C.1 MyServlet 类
package servletapi1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet(name = "MyServlet", urlPatterns = { "/my" })
public class MyServlet implements Servlet {
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig)
throws ServletException {
this.servletConfig = servletConfig;
}
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public String getServletInfo() {
return "My Servlet";
}
@Override
public void service(ServletRequest request,
ServletResponse response) throws ServletException,
IOException {
String servletName = servletConfig.getServletName();
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<!DOCTYPE html>"
+ "<html>"
+ "<body>Hello from " + servletName
+ "</body>"
+ "</html>");
}
@Override
public void destroy() {
}
}看到清单 C.1 中的代码时,你可能首先注意到的是下面这个注解:
@WebServlet(name = "MyServlet", urlPatterns = { "/my" })WebServlet 注解类型用来声明一个 Servlet。命名 Servlet 时,还可以暗示容器,是哪个 URL 调用这个 Servlet。name 属性是可选的,如有该属性,通常用 Servlet 类的名称。重要的是 urlPatterns 属性,它也是可选的,但是一般都是有的。在 MyServlet 中,urlPatterns 告诉容器,/my 样式表示应该调用 Servlet。
注意,URL 样式必须用一个正斜杆开头。
Servlet 的 init 方法只被调用一次,并将 private transient 变量 ServletConfig 设为传给该方法的 ServletConfig 对象。
private transient ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig)
throws ServletException {
this.servletConfig = servletConfig;
}如果想通过 Servlet 内部使用 ServletConfig,只需要将被传入的 ServletConfig 赋给一个类变量。
Service 方法发送字符串“Hello from MyServlet”给浏览器。对于每一个针对 Servlet 进来的 HTTP 请求,都会调用 Service 方法。
为了编译 Servlet,必须将 Servlet API 中的所有类型都放在你的类路径下。Tomcat 中带有 servlet-api.jar 文件,其中包含了 javax.servlet 的成员以及 javax.servlet.http 包。这个压缩文件放在 Tomcat 安装目录下的 lib 目录中。
C.3.2 应用程序目录结构
Servlet 应用程序必须在某一个目录结构下部署。图 C.2 展示了 Web 的应用程序目录。

图 C.2 应用程序目录
这个目录结构最上面的那个 Web 目录,就是应用程序目录。在应用程序目录下,是 WEB-INF 目录。它有两个子目录:
classes。Servlet 类及其他 Java 类必须放在这里面。类以下的目录反映了类包的结构。
lib。Servlet 应用程序所需的 jar 文件要在这里部署。但 Servlet API 的 jar 文件不需要在这里部署,因为 Servlet 容器已经有它的备份。在这个应用程序中,lib 目录是空的。空的 lib 目录可以删除。
Servlet/JSP 应用程序一般都有 JSP 页面、HTML 文件、图片文件以及其他资料。这些应该放在应用程序目录下,并且经常放在子目录下。例如,所有的图片文件可以放在一个 image 目录下,所有的 JSP 页面可以放在 jsp 目录下,等等。
放在应用程序目录下的任何资源,用户只要输入资源 URL,都可以直接访问到。如果想让某一个资源可以被 Servlet 访问,但不可以被用户访问,那么就要把它放在 WEB-INF 目录下。
现在,准备将应用程序部署到 Tomcat。使用 Tomcat 时,一种部署方法是将应用程序目录复制到 Tomcat 安装目录下的 webapps 目录中。也可以通过在 Tomcat 的 conf 目录中编辑 server.xml 文件来实现部署,或者单独部署一个 XML 文件,这样就不需要编辑 server.xml 了。其他的 Servlet 容器可能会有不同的部署规则。关于如何将 Servlet/JSP 应用程序部署到 Tomcat 的详细信息,请查阅附录 A。
部署 Servlet/JSP 应用程序时,建议将它部署成一个 war 文件。war 文件其实就是以 war 作为扩展名的 jar 文件。利用带有 JDK 或者类似 WinZip 工具的 jar 软件,都可以创建 war 文件。然后,将 war 文件复制到 Tomcat 的 webapps 目录下。当开始启动 Tomcat 时,Tomcat 就会自动解压这个 war 文件。部署成 war 文件在所有 Servlet 容器中都适用。
C.3.3 调用 Servlet
要测试这个 Servlet,在浏览器中打开下面的 URL:
http://localhost:8080/servletapi1/my其输出结果应该类似于图 C.3。

图 C.3 MyServlet 的响应
恭喜,你已经成功编写了第一个 Servlet 应用程序!
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论