返回介绍

C.3 编写基础的 Servlet 应用程序

发布于 2025-04-22 20:10:06 字数 4214 浏览 0 评论 0 收藏

其实,编写 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 的应用程序目录。

图片 1

图 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。

flb03

图 C.3 MyServlet 的响应

恭喜,你已经成功编写了第一个 Servlet 应用程序!

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。