Servlet 第一个应用 – 注解方式

Java Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类

Web 应用程序开发人员通常编写 Servlet 继承 javax.servlet.http.HttpServlet 并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求

前面一章节我们使用普通的方式开发部署 HelloWorld ,接下来我们将使用 Servlet 3.0 提供的注解方式开发 HelloWorld 应用

@WebServlet

在 Servlet 3.0 以后,我们可以不用在 web.xml 里面配置 servlet,只需要加上 @WebServlet注解就可以修改 servlet 的属性了

@WebServlet 属性列表

属性名类型描述
nameString指定Servlet 的 name 属性,等价于 <servlet-name> 如果没有显式指定,则该 Servlet 的取值即为类的全限定名
valueString[]该属性等价于 urlPatterns 属性。两个属性不能同时使用
urlPatternsString[]指定一组 Servlet 的 URL 匹配模式。等价于 <url-pattern> 标签
loadOnStartupint指定 Servlet 的加载顺序,等价于 <load-on-startup> 标签
initParamsWebInitParam[]指定一组 Servlet 初始化参数,等价于 <init-param> 标签
asyncSupportedboolean声明 Servlet 是否支持异步操作模式,等价于 <async-supported> 标签
descriptionStringServlet 的描述信息,等价于 标签。
displayNameStringServlet 的显示名,通常配合工具使用,等价于 <display-name> 标签

从上表可见,web.xml 可以配置的 servlet 属性,在 @WebServlet 中都可以配置

Hello World 第一个应用

下面的范例使用 Servlet 输出 Hello World

新建一个 HelloWorldServlet.java 文件,输入以下内容

HelloWorldServlet.java

实例

package com.runoops.test;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "HelloWorldServlet", urlPatterns = {"hello_world"}, loadOnStartup = 1) 
public class HelloWorldServlet extends HttpServlet
{
    private String message;

    public void init() throws ServletException
    {
        // 进行必要的初始化
        message = "Hello World";
    }

    public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
    {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        // 实际的逻辑是在这里
        PrintWriter out = response.getWriter();
        String title = message + " | runoops 自学教程(runoops.com)";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
            "<title>" + title + "</title>"+
            "<body bgcolor=\"#f0f0f0\">" +
            "<p>" + title + "</p>");
    }

    public void destroy()
    {
      // 什么也不做
    }
}

编译 Servlet

  1. 把 HelloWorld.java 文件放到 D:\servlet (Windows) 或 /home/www/servlet( Linux )目录中
  2. 把 D:\servlet(Windows)或 /home/www/servlet(Linux)目录添加到 CLASSPATH 中
  3. 假设我们的环境已经正确地设置,进入 servlet 目录,并编译 HelloWorldServlet.java $ javac HelloWorld.java 如果 Servlet 依赖于任何其他库,你必须在 CLASSPATH 中包含那些 JAR 文件
    在这里,我们只包含了 servlet-api.jar JAR 文件,因为我没有在 Hello World 程序中使用任何其他库该命令行使用 Java 软件开发工具包(JDK)内置的 javac 编译器为使该命令正常工作,你在 PATH 环境变量配置 Java SDK 的位置
  4. 如果一切顺利,编译命令会在同一目录下生成 HelloWorldServlet.class 文件
    然后我们就可以把已编译的 servlet 部署到 Tomcat 容器中了

Servlet 部署

我们已经编译好了 servlet,现在可以将它部署到 Tomcat 容器中了

servlet 应用默认路径

默认情况下,Servlet 应用程序位于以下路径中

<Tomcat-installation-directory>/webapps/应用程序名

且类文件放在路径

<Tomcat-installation-directory>/webapps/应用程序名/WEB-INF/classes

<Tomcat-installation-directory> 是 Tomcat 的安装目录

如果我们开发的是一个完全合格的类名称 com.runoops.test.HelloWorldServlet ,那么这个 servlet 类必须位于 WEB-INF/classes/com/runoops/test/HelloWorldServlet.class

在这里,我们把应用程序名定为 servlet 也就是我们的 Tomcat 应用目录是

<Tomcat-installation-directory>/webapps/servlet

现在,我们把 HelloWorldServlet.class 复制到 <Tomcat-installation-directory>/webapps/servlet/WEB-INF/classes 目录中

Servlet 3.0 注解方式最重要的改进就是可以不用修改 web.xml 文件

现在让我们直接使用 <Tomcat-installation-directory>\bin\startup.bat(Windows)或 <Tomcat-installation-directory>/bin/startup.sh(Linux)启动 tomcat 服务器

在浏览器的地址栏中输入 http://localhost:8088/servlet/hello_world

如果一切顺利,会显示如下: