Servlet API 详解
Servlet API 是 Java EE 的一部分,用于在服务器端处理 HTTP 请求并生成响应。Servlet 运行在支持 Java 的 Web 服务器上,如 Tomcat、Jetty 等。Servlet API 提供了一系列接口和类,使得开发者能够方便地编写 Web 应用程序。下面将详细介绍 Servlet API 的一些核心概念和用法,并给出代码示例。
一、Servlet 运行原理
Servlet 的运行并不依赖于 main
方法,而是由 Web 服务器(如 Tomcat)通过请求-响应模式来调用。当浏览器向服务器发送 HTTP 请求时,服务器会解析请求,并根据请求的 URL 路径找到对应的 Servlet,然后调用其方法来处理请求,并生成响应返回给浏览器。
二、Servlet API 核心组件
1. HttpServlet
HttpServlet
是 Servlet API 中的一个抽象类,提供了处理 HTTP 请求的基本方法。开发者通常通过继承 HttpServlet
并重写其 doGet
、doPost
等方法来处理不同的 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("/hello") public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.getWriter().write("<h1>Hello, Servlet!</h1>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 POST 请求 doGet(req, resp); // 示例中直接调用 doGet 方法 } }
2. HttpServletRequest
HttpServletRequest
接口用于封装客户端的请求信息,如请求参数、请求头、请求方法等。
代码示例:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); // 获取请求参数 String userAgent = req.getHeader("User-Agent"); // 获取请求头 String method = req.getMethod(); // 获取请求方法 resp.setContentType("text/html"); resp.getWriter().write("<h1>Name: " + name + "</h1>"); resp.getWriter().write("<p>User-Agent: " + userAgent + "</p>"); resp.getWriter().write("<p>Method: " + method + "</p>"); }
3. HttpServletResponse
HttpServletResponse
接口用于封装服务器对客户端的响应信息,如响应状态码、响应头、响应体等。
代码示例:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setStatus(HttpServletResponse.SC_OK); // 设置响应状态码 resp.setHeader("Content-Type", "text/html"); // 设置响应头 resp.getWriter().write("<h1>Response Example</h1>"); // 写入响应体 }
三、Servlet 生命周期
Servlet 的生命周期主要包括三个阶段:初始化、处理请求、销毁。
- 初始化:当 Servlet 被加载到服务器时,会调用
init
方法进行初始化。 - 处理请求:每当有请求到达时,会调用
service
方法(或由其调用的doGet
、doPost
等方法)来处理请求。 - 销毁:当 Servlet 被从服务器卸载时,会调用
destroy
方法进行资源清理。
四、总结
Servlet API 提供了丰富的接口和类,使得开发者能够方便地编写 Web 应用程序。通过继承 HttpServlet
并重写其方法,可以轻松地处理 HTTP 请求并生成响应。同时,HttpServletRequest
和 HttpServletResponse
接口提供了丰富的方法来获取请求信息和设置响应信息,使得开发者能够灵活地处理各种复杂的 HTTP 请求。