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