本教程是为那些不熟悉 Java servlet 并希望在不使用 IDE 的情况下通过动手练习快速学习 Java servlet 的人设计的。假设您的计算机上安装了以下软件(当然您可以使用较新的版本):
以及一个简单的文本编辑器,例如JEdit或Notepad++。
1. Java servlet 的简要概述
servlet 是用 Java 编程语言编写的服务器端组件,它接收来自客户端的请求并发送回响应。
除了 JSP、EJB、XML 等相关技术之外,Servlet 是构成典型 Java EE 应用程序的关键组件。Java EE 应用程序可以打包在 WAR 文件 ( Web AR chive ) 中,以便部署在 Web 服务器上。可以运行 Java servlet 的 Web 服务器称为servlet 容器。最流行和使用最广泛的 servlet 容器是Apache Tomcat、Glassfish、JBoss等。
从技术上讲,servlet 是一个普通的 Java 类,它扩展了以下任一项:
- javax.servlet.GenericServlet通用客户端-服务器协议的类,或:
- HTTP 协议的javax.servlet.http.HttpServlet类。
在实践中,servlet 主要用于处理 HTTP 请求,通过覆盖HttpServlet的doGet()、doPost()方法分别处理 GET 和 POST 请求。servlet 容器提供一个HttpServletRequest对象和一个HttpServletResponse对象来处理请求和响应。
Servlet 通常与 JSP 结合使用,用于根据客户端的请求生成动态内容。一个典型的场景是:
- JSP 向用户提供一个表单,用于输入数据。
- servlet 接收用户的输入,对其进行处理并返回响应。
2.创建目录结构
首先,创建以下目录结构:
- deploy:我们将生成的war文件放在这里。
- src :包含net.codejava.servlet包中的 Java 源文件。
- WebContent:包含 JSP 页面和其他 Web 资源。
- WebContent\WEB-INF :我们将把 Web 部署描述符文件 ( web.xml ) 放在这里。
- WebContent\WEB-INF\classes:我们将把编译好的类放在这里。a
3. 编写 Java Servlet 类
在src\net\codejava\servlet目录下创建一个名为QuickServlet.java的 Java 源文件,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package net.codejava.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QuickServlet extends HttpServlet {
/**
* this life-cycle method is invoked when this servlet is first accessed
* by the client
*/
public void init(ServletConfig config) {
System.out.println( "Servlet is being initialized" );
}
/**
* handles HTTP GET request
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
PrintWriter writer = response.getWriter();
writer.println( "<html>Hello, I am a Java servlet!</html>" );
writer.flush();
}
/**
* handles HTTP POST request
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String paramWidth = request.getParameter( "width" );
int width = Integer.parseInt(paramWidth);
String paramHeight = request.getParameter( "height" );
int height = Integer.parseInt(paramHeight);
long area = width * height;
PrintWriter writer = response.getWriter();
writer.println( "<html>Area of the rectangle is: " + area + "</html>" );
writer.flush();
}
/**
* this life-cycle method is invoked when the application or the server
* is shutting down
*/
public void destroy() {
System.out.println( "Servlet is being destroyed" );
}
}
|
这个 servlet 覆盖了HttpServlet类的四个方法:
- init():当客户端首次访问 servlet 时,servlet 容器将调用此方法。在这里放置初始化代码是很常见的。这个方法在 servlet 的生命周期中只被调用一次。
- doGet():每次客户端向此 servlet 发出 HTTP GET 请求时,都会处理此方法。servlet 容器注入两个对象:
-
- HttpServletRequest :该对象包含所有 HTTP 请求标头,因此我们可以分别通过getParameter()和getHeader()方法访问 GET/POST 参数以及从客户端发送的其他 HTTP 标头。
- HttpServletResponse:我们使用该对象来处理 HTTP 响应,例如设置 HTTP 响应标头并将 HTML 内容发送回客户端。在这个 servlet 的doGet()方法中,我们发送一个简单的 HTML 代码,它传达一条消息“你好,我是一个 Java servlet!”给客户。
- doPost():每当客户端发出 HTTP POST 请求时都会调用此方法。与doGet()方法类似,它也将HttpServletRequest对象和HttpServletResponse对象作为参数。在该方法中,我们从请求中检索矩形的宽度和高度两个参数的值,以计算面积并将结果发送回客户端。
- destroy():当包含的应用程序正在停止或服务器正在关闭时,servlet 容器将在需要删除 servlet 时调用此方法。
4.编码JSP页面
使用以下 HTML 代码 在WebContent目录下创建一个名为index.jsp的 JSP 文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< html >
< head >
< title >Quick Servlet Demo</ title >
</ head >
< body >
< a href = "/QuickServlet" >Click here to send GET request</ a >
< br />< br />
< form action = "QuickServlet" method = "post" >
Width: < input type = "text" size = "5" name = "width" />
Height < input type = "text" size = "5" name = "height" />
< input type = "submit" value = "Calculate" />
</ form >
</ body >
</ html >
|
在此 JSP 页面中:
- 我们放置一个带有属性href=”QuickServlet”的超链接,它指向 servlet 的相对路径(我们将很快为 servlet 配置 URL 映射)。单击此链接将向服务器生成一个 HTTP GET 请求,并且将调用servlet 的doGet()方法。
- 为了演示向 servlet 发送 HTTP POST 请求,我们创建了一个包含两个文本字段的简单表单:宽度和高度。表单的属性操作设置为 servlet 的相对路径。提交按钮的标题为“计算”。
JSP 页面在浏览器中将如下所示:
5.在web.xml中为servlet声明和配置映射
为了让 servlet 能够服务于客户端的请求,您必须在 web 部署描述符文件中为 servlet 声明和配置映射。创建一个名为web.xml的 XML 文件在WebContent\WEB-INF目录下,使用以下 XML 代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version= "1.0" encoding= "UTF-8" ?>
<web-app xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xmlns= "http://java.sun.com/xml/ns/javaee"
xmlns:web= "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http: //java.sun.com/xml/ns/javaee
http: //java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id= "WebApp_ID" version= "3.0" >
<display-name>Quick Servlet Demo Application</display-name>
<servlet>
<servlet-name>QuickServlet</servlet-name>
<servlet- class >net.codejava.servlet.QuickServlet</servlet- class >
</servlet>
<servlet-mapping>
<servlet-name>QuickServlet</servlet-name>
<url-pattern>/QuickServlet</url-pattern>
</servlet-mapping>
</web-app>
|
正如我们所见,servlet 是使用<servlet>元素及其子元素声明的:
- <servlet-name>:指定 servlet 的描述性名称。
- <servlet-class>:指定 servlet 类的完全限定名称。
servlet 被配置为使用<servlet-mapping>元素及其子元素来服务请求:
- <servlet-name>:指定使用<servlet>元素声明的 servlet 的名称。
- <url-pattern>:指定要与 servlet 映射的 URL 模式。模式可以是完全匹配、扩展匹配或目录匹配。这里我们指定完全匹配。
6. 编译servlet
在进行编译之前,请确保设置 PATH 环境变量包含JDK_HOME\bin目录,以便可以在命令行提示符下访问工具javac 和jar 。
为了编译 servlet 源代码,我们必须在类路径中有一个 servlet API jar 文件。servlet API jar 文件通常由 servlet 容器提供。对于 Tomcat 7.0,jar 文件位于TOMCAT_HOME \lib目录下,并命名为servlet-api.jar。
打开操作系统的命令行实用程序并将工作目录更改为目录结构中概述的QuickServlet目录。键入以下命令:
javac -cp TOMCAT_HOME \lib\servlet-api.jar" -d CLASS_DIR SRC_DIR \QuickServlet.java
将名称TOMCAT_HOME、CLASS_DIR和SRC_DIR替换为以下值:
- TOMCAT_HOME:是您计算机上 Tomcat 的安装目录,例如:c:\Program Files\Apache Software Foundation\Tomcat 7.0。如果路径包含空格,请将其放在双引号中,如下所示:“路径包含空格”。
- CLASS_DIR =WebContent \ WEB-INF \ 类
- SRC_DIR =src\net\codejava\servlet
该命令将编译QuickServlet.java文件并将生成的 .class 文件放入目录WebContent\WEB-INF\classes中。
7. 打包 Web 应用程序
部署 Java EE 应用程序的标准方法是将其打包为可部署在 Web 服务器上的 WAR 文件。在命令提示符下,键入以下命令(注意末尾有一个点):
jar cfv deploy\QuickServletApp.war -C WebContent 。
jar程序会将目录WebContent中的所有内容放入目录deploy下名为QuickServletApp.war的单个 zip 格式存档中。
8. 部署 Web 应用程序
现在我们准备在 Tomcat 服务器上部署QuickServletApp.war文件。将其复制到 Tomcat 的webapps目录:
复制 deploy\QuickServletApp.war TOMCAT_HOME \webapps
执行TOMCAT_HOME \bin目录下的Tomcat7.exe程序启动 Tomcat :
从控制台的日志中,我们可以看到文件QuickServletApp.war已部署,并且 HTTP 服务器正在侦听端口号 8080。
9. 测试 servlet
现在打开网络浏览器并在地址栏中输入以下 URL:
http://localhost:8080/QuickServletApp
因为我们没有指定特定页面,所以默认页面(index.jsp)被加载,如下所示:
要使用 HTTP GET 请求测试 servlet,请单击超链接“单击此处发送 GET 请求”。显示以下屏幕:
要使用 HTTP POST 请求测试 servlet,请单击浏览器的后退按钮并在文本字段width和height中输入两个数字:
单击计算按钮,servlet 将返回计算区域作为结果:
到目前为止,我们已经从头开始使用 Java servlet。我们在附件部分有可供下载的项目。
QuickServlet.zip | [ ] | 6 KB |