原文: http://zetcode.com/articles/javaservlet/

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.servletjavax.servlet.http包提供用于编写 servlet 的接口和类。

  1. <dependency>
  2. <groupId>javax.servlet</groupId>
  3. <artifactId>javax.servlet-api</artifactId>
  4. <version>3.1.0</version>
  5. <scope>provided</scope>
  6. </dependency>

这些示例使用此 Maven 依赖项。 javax.servlet-api提供 Servlet API。 provided范围使依赖项在编译时可用,并指示它在运行时已可用。 包含在 Servlet 容器(Tomcat,Jetty)中。

Java Servlet 注解示例

在下面的示例中,我们使用@WebServlet批注创建 Java Servlet。 从 Servlet 3.0 规范开始可以使用@WebServlet批注。 注解在部署时由容器处理。

  1. $ tree
  2. .
  3. ├── nb-configuration.xml
  4. ├── pom.xml
  5. └── src
  6. ├── main
  7. ├── java
  8. └── com
  9. └── zetcode
  10. └── web
  11. └── MyServlet.java
  12. ├── resources
  13. └── webapp
  14. ├── index.html
  15. ├── META-INF
  16. └── context.xml
  17. └── WEB-INF
  18. └── test
  19. └── java

这是项目结构。

context.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context path="/JavaServletAnnotation"/>

在 Tomcat context.xml文件中,我们定义了上下文路径。 它是 Web 应用的名称。

MyServlet.java

  1. package com.zetcode.web;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.ServletOutputStream;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. @WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
  10. public class MyServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. response.setContentType("text/plain;charset=UTF-8");
  15. ServletOutputStream out = response.getOutputStream();
  16. out.print("This is MyServlet");
  17. }
  18. }

MyServlet Servlet 将一条简单的文本消息返回给客户端。

  1. @WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})

Java 类用@WebServlet注解修饰。 它映射到MyServlet URL 模式。

  1. @Override
  2. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  3. throws ServletException, IOException {

GET 请求调用doGet()方法。 该方法接收HttpServletRequestHttpServletResponse对象。

  1. response.setContentType("text/html;charset=UTF-8");

Servlet 将以纯文本格式输出数据,并且数据的编码设置为 UTF-8。

  1. ServletOutputStream out = response.getOutputStream();

通过getOutputStream()方法,我们获得了 servlet 输出流。

  1. out.print("This is MyServlet");

我们使用print()方法编写一条短信。

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Home page</title>
  5. <meta charset="UTF-8">
  6. </head>
  7. <body>
  8. <a href="MyServlet">Call MyServlet</a>
  9. </body>
  10. </html>

在主页中,我们有一个调用 servlet 的链接。

Java Servlet XML 示例

在第二个示例中,我们在web.xml部署描述符中定义了两个 servlet。 在 Servlet 3.0 规范之前,这是定义 Java Servlet 的唯一方法。

  1. $ tree
  2. .
  3. ├── pom.xml
  4. └── src
  5. ├── main
  6. ├── java
  7. └── com
  8. └── zetcode
  9. └── web
  10. ├── FirstServlet.java
  11. └── SecondServlet.java
  12. └── webapp
  13. ├── index.html
  14. ├── META-INF
  15. └── context.xml
  16. └── WEB-INF
  17. └── web.xml
  18. └── test
  19. └── java

这是项目结构。

context.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context path="/JavaServletXML"/>

我们定义上下文路径。

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
  6. <servlet>
  7. <servlet-name>FirstServlet</servlet-name>
  8. <servlet-class>com.zetcode.web.FirstServlet</servlet-class>
  9. </servlet>
  10. <servlet>
  11. <servlet-name>SecondServlet</servlet-name>
  12. <servlet-class>com.zetcode.web.SecondServlet</servlet-class>
  13. </servlet>
  14. <servlet-mapping>
  15. <servlet-name>FirstServlet</servlet-name>
  16. <url-pattern>/FirstServlet</url-pattern>
  17. </servlet-mapping>
  18. <servlet-mapping>
  19. <servlet-name>SecondServlet</servlet-name>
  20. <url-pattern>/SecondServlet</url-pattern>
  21. </servlet-mapping>
  22. <session-config>
  23. <session-timeout>
  24. 30
  25. </session-timeout>
  26. </session-config>
  27. </web-app>

web.xml文件中,我们定义了两个 Servlet:FirstServletSecondServletweb.xml位于WEB-INF目录中。

  1. <servlet>
  2. <servlet-name>FirstServlet</servlet-name>
  3. <servlet-class>com.zetcode.web.FirstServlet</servlet-class>
  4. </servlet>

我们定义名称和 servlet 类。

  1. <servlet-mapping>
  2. <servlet-name>FirstServlet</servlet-name>
  3. <url-pattern>/FirstServlet</url-pattern>
  4. </servlet-mapping>

我们将 servlet 映射到 URL 模式。

FirstServlet.java

  1. package com.zetcode.web;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.ServletOutputStream;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class FirstServlet extends HttpServlet {
  9. @Override
  10. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. response.setContentType("text/plain;charset=UTF-8");
  13. ServletOutputStream out = response.getOutputStream();
  14. out.print("This is First Servlet");
  15. }
  16. }

这是第一个 servlet。

SecondServlet.java

  1. package com.zetcode.web;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.ServletOutputStream;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class SecondServlet extends HttpServlet {
  9. @Override
  10. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. response.setContentType("text/plain;charset=UTF-8");
  13. ServletOutputStream out = response.getOutputStream();
  14. out.print("This is Second Servlet");
  15. }
  16. }

这是第二个 servlet。

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Home page</title>
  5. <meta charset="UTF-8">
  6. </head>
  7. <body>
  8. <p>
  9. Call <a href="FirstServlet">First Servlet</a>
  10. </p>
  11. <p>
  12. Call <a href="SecondServlet">Second Servlet</a>
  13. </p>
  14. </body>
  15. </html>

在主页中,我们有两个链接来调用两个 servlet。

在本教程中,我们展示了如何创建简单的 Java Servlet。

您可能也对以下相关教程感兴趣: Java Servlet 上传文件Java Log4j 教程Java Servlet RESTful 客户端Java RequestDispatcher从 Java servlet 提供纯文本Java servlet 图像教程Java 教程