Servlet 3.1 第一个应用 - 注解方式
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
// author: 简单教程(www.twle.cn) // Copyright © 2015-2065 www.twle.cn. All rights reserved. package cn.twle.demo; 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 + " | 简单教程(www.twle.cn)"; 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 的安装目录
如果我们开发的是一个完全合格的类名称 cn.twle.demo.HelloWorldServlet ,那么这个 servlet 类必须位于 WEB-INF/classes/cn/twle/demo/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:8080/servlet/hello_world
如果一切顺利,会显示如下