多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java Servlet 教程 > 原文: [http://zetcode.com/articles/javaservlet/](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.servlet`和`javax.servlet.http`包提供用于编写 ​​servlet 的接口和类。 ```java <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`批注。 注解在部署时由容器处理。 ```java $ 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` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/JavaServletAnnotation"/> ``` 在 Tomcat `context.xml`文件中,我们定义了上下文路径。 它是 Web 应用的名称。 `MyServlet.java` ```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 将一条简单的文本消息返回给客户端。 ```java @WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"}) ``` Java 类用`@WebServlet`注解修饰。 它映射到`MyServlet` URL 模式。 ```java @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ``` GET 请求调用`doGet()`方法。 该方法接收`HttpServletRequest`和`HttpServletResponse`对象。 ```java response.setContentType("text/html;charset=UTF-8"); ``` Servlet 将以纯文本格式输出数据,并且数据的编码设置为 UTF-8。 ```java ServletOutputStream out = response.getOutputStream(); ``` 通过`getOutputStream()`方法,我们获得了 servlet 输出流。 ```java out.print("This is MyServlet"); ``` 我们使用`print()`方法编写一条短信。 `index.html` ```java <!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 的唯一方法。 ```java $ 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` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/JavaServletXML"/> ``` 我们定义上下文路径。 `web.xml` ```java <?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`目录中。 ```java <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.zetcode.web.FirstServlet</servlet-class> </servlet> ``` 我们定义名称和 servlet 类。 ```java <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/FirstServlet</url-pattern> </servlet-mapping> ``` 我们将 servlet 映射到 URL 模式。 `FirstServlet.java` ```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` ```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` ```java <!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 上传文件](/articles/javaservletuploadfile/), [Java Log4j 教程](/java/log4j/), [Java Servlet RESTful 客户端](/articles/javaservletrestclient/), [Java `RequestDispatcher`](/java/requestdispatcher/) ,[从 Java servlet 提供纯文本](/articles/javaservlettext/) , [Java servlet 图像教程](/articles/javaservletimage/)或 [Java 教程](/lang/java/)。