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 属性列表
属性名 | 类型 | 描述 |
---|---|---|
name | String | 指定Servlet 的 name 属性,等价于 <servlet-name> 如果没有显式指定,则该 Servlet 的取值即为类的全限定名 |
value | String[] | 该属性等价于 urlPatterns 属性。两个属性不能同时使用 |
urlPatterns | String[] | 指定一组 Servlet 的 URL 匹配模式。等价于 <url-pattern> 标签 |
loadOnStartup | int | 指定 Servlet 的加载顺序,等价于 <load-on-startup> 标签 |
initParams | WebInitParam[] | 指定一组 Servlet 初始化参数,等价于 <init-param> 标签 |
asyncSupported | boolean | 声明 Servlet 是否支持异步操作模式,等价于 <async-supported> 标签 |
description | String | Servlet 的描述信息,等价于 标签。 |
displayName | String | Servlet 的显示名,通常配合工具使用,等价于 <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
- 把 HelloWorld.java 文件放到
D:\servlet
(Windows) 或/home/www/servlet
( Linux )目录中 - 把 D:\servlet(Windows)或 /home/www/servlet(Linux)目录添加到 CLASSPATH 中
- 假设我们的环境已经正确地设置,进入 servlet 目录,并编译 HelloWorldServlet.java $ javac HelloWorld.java 如果 Servlet 依赖于任何其他库,你必须在 CLASSPATH 中包含那些 JAR 文件
在这里,我们只包含了 servlet-api.jar JAR 文件,因为我没有在 Hello World 程序中使用任何其他库该命令行使用 Java 软件开发工具包(JDK)内置的 javac 编译器为使该命令正常工作,你在 PATH 环境变量配置 Java SDK 的位置 - 如果一切顺利,编译命令会在同一目录下生成 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
如果一切顺利,会显示如下: