学习笔记 - Servlet

概述

Servlet 是 Java EE 标准中的一部分,用于扩展服务器的功能。它可以处理客户端(通常是 Web 浏览器)发送的请求并返回响应。Servlet 运行在支持 Java Servlet 规范的 Web 服务器上。

生命周期

Servlet 的生命周期包括以下三个主要阶段:

  1. 初始化阶段
  2. 服务阶段
  3. 销毁阶段

初始化阶段

Servlet 初始化阶段是第一次加载 Servlet 时执行的阶段。Web 容器会创建一个新的 Servlet 实例,并调用它的 init() 方法。在此阶段,您可以执行一些初始化操作,例如获取配置信息、建立数据库连接等。

javaCopy Code
public void init() throws ServletException { // 获取配置信息 String configParam = getServletConfig().getInitParameter("configParam"); // 建立数据库连接 Connection conn = DriverManager.getConnection(url, username, password); }

服务阶段

Servlet 服务阶段是处理请求和生成响应的阶段。每当客户端发送一个请求时,Web 容器会创建一个新的线程来处理该请求,并调用 Servlet 的 service() 方法。

javaCopy Code
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取请求参数 String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); // 处理业务逻辑 int result = Integer.parseInt(param1) + Integer.parseInt(param2); // 设置响应内容 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>Servlet Example</title></head>"); out.println("<body>"); out.println("<h1>Result: " + result + "</h1>"); out.println("</body></html>"); }

销毁阶段

Servlet 销毁阶段是在服务器关闭或 Web 应用程序被卸载时执行的阶段。Web 容器会调用 Servlet 的 destroy() 方法,您可以在此阶段执行一些清理操作,例如释放数据库连接、保存数据等。

javaCopy Code
public void destroy() { // 释放数据库连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }

实例

以下是一个简单的 Servlet 实例,它接收两个数值,并将它们相加并将结果返回给客户端。

javaCopy Code
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AddServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取请求参数 String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); // 处理业务逻辑 int result = Integer.parseInt(param1) + Integer.parseInt(param2); // 设置响应内容 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>Add Servlet</title></head>"); out.println("<body>"); out.println("<h1>Result: " + result + "</h1>"); out.println("</body></html>"); } }

您可以将以上代码编译成 .class 文件,并在 Web 应用程序的 WEB-INF/web.xml 文件中配置该 Servlet。

xmlCopy Code
<web-app> <servlet> <servlet-name>AddServlet</servlet-name> <servlet-class>com.example.servlet.AddServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddServlet</servlet-name> <url-pattern>/add</url-pattern> </servlet-mapping> </web-app>

以上配置将使得任何对 /add 路径的请求都会交给 AddServlet 处理。例如,如果您的 Web 应用程序运行在 Tomcat 服务器上,则可以通过访问 http://localhost:8080/your-web-app/add?param1=1&param2=2 来测试该 Servlet。