Java Servlet 教程
Java Servlets 教程展示了如何在 Java 中创建简单的 servlet。 我们使用 Java 注解和 XML 文件创建 servlet。
Java Servlet
Servlet 是响应网络请求的 Java 类。 这主要是一个 HTTP 请求。 Java servlet 用于创建 Web 应用。 它们在 servlet 容器(例如 Tomcat 或 Jetty)中运行。 现代 Java Web 开发使用在 servlet 之上构建的框架。 例如,Spring 或 Vaadin 框架使用 servlet。
javax.servlet
和javax.servlet.http
包提供用于编写 servlet 的接口和类。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
这些示例使用此 Maven 依赖项。 javax.servlet-api
提供 Servlet API。 provided
范围使依赖项在编译时可用,并指示它在运行时已可用。 包含在 Servlet 容器(Tomcat,Jetty)中。
Java Servlet 注解示例
在下面的示例中,我们使用@WebServlet
批注创建 Java Servlet。 从 Servlet 3.0 规范开始可以使用@WebServlet
批注。 注解在部署时由容器处理。
$ tree
.
├── nb-configuration.xml
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── zetcode
│ │ └── web
│ │ └── MyServlet.java
│ ├── resources
│ └── webapp
│ ├── index.html
│ ├── META-INF
│ │ └── context.xml
│ └── WEB-INF
└── test
└── java
这是项目结构。
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JavaServletAnnotation"/>
在 Tomcat context.xml
文件中,我们定义了上下文路径。 它是 Web 应用的名称。
MyServlet.java
package com.zetcode.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
ServletOutputStream out = response.getOutputStream();
out.print("This is MyServlet");
}
}
MyServlet
Servlet 将一条简单的文本消息返回给客户端。
@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
Java 类用@WebServlet
注解修饰。 它映射到MyServlet
URL 模式。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
GET 请求调用doGet()
方法。 该方法接收HttpServletRequest
和HttpServletResponse
对象。
response.setContentType("text/html;charset=UTF-8");
Servlet 将以纯文本格式输出数据,并且数据的编码设置为 UTF-8。
ServletOutputStream out = response.getOutputStream();
通过getOutputStream()
方法,我们获得了 servlet 输出流。
out.print("This is MyServlet");
我们使用print()
方法编写一条短信。
index.html
<!DOCTYPE html>
<html>
<head>
<title>Home page</title>
<meta charset="UTF-8">
</head>
<body>
<a href="MyServlet">Call MyServlet</a>
</body>
</html>
在主页中,我们有一个调用 servlet 的链接。
Java Servlet XML 示例
在第二个示例中,我们在web.xml
部署描述符中定义了两个 servlet。 在 Servlet 3.0 规范之前,这是定义 Java Servlet 的唯一方法。
$ tree
.
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── zetcode
│ │ └── web
│ │ ├── FirstServlet.java
│ │ └── SecondServlet.java
│ └── webapp
│ ├── index.html
│ ├── META-INF
│ │ └── context.xml
│ └── WEB-INF
│ └── web.xml
└── test
└── java
这是项目结构。
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JavaServletXML"/>
我们定义上下文路径。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.zetcode.web.FirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>com.zetcode.web.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/SecondServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
在web.xml
文件中,我们定义了两个 Servlet:FirstServlet
和SecondServlet
。 web.xml
位于WEB-INF
目录中。
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.zetcode.web.FirstServlet</servlet-class>
</servlet>
我们定义名称和 servlet 类。
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
我们将 servlet 映射到 URL 模式。
FirstServlet.java
package com.zetcode.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
ServletOutputStream out = response.getOutputStream();
out.print("This is First Servlet");
}
}
这是第一个 servlet。
SecondServlet.java
package com.zetcode.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
ServletOutputStream out = response.getOutputStream();
out.print("This is Second Servlet");
}
}
这是第二个 servlet。
index.html
<!DOCTYPE html>
<html>
<head>
<title>Home page</title>
<meta charset="UTF-8">
</head>
<body>
<p>
Call <a href="FirstServlet">First Servlet</a>
</p>
<p>
Call <a href="SecondServlet">Second Servlet</a>
</p>
</body>
</html>
在主页中,我们有两个链接来调用两个 servlet。
在本教程中,我们展示了如何创建简单的 Java Servlet。
您可能也对以下相关教程感兴趣: Java Servlet 上传文件, Java Log4j 教程, Java Servlet RESTful 客户端, Java RequestDispatcher
,从 Java servlet 提供纯文本 , Java servlet 图像教程或 Java 教程。