学习笔记 - Servlet
概述
Servlet 是 Java EE 标准中的一部分,用于扩展服务器的功能。它可以处理客户端(通常是 Web 浏览器)发送的请求并返回响应。Servlet 运行在支持 Java Servlet 规范的 Web 服务器上。
生命周期
Servlet 的生命周期包括以下三个主要阶段:
- 初始化阶段
- 服务阶段
- 销毁阶段
初始化阶段
Servlet 初始化阶段是第一次加载 Servlet 时执行的阶段。Web 容器会创建一个新的 Servlet 实例,并调用它的 init()
方法。在此阶段,您可以执行一些初始化操作,例如获取配置信息、建立数据库连接等。
javaCopy Codepublic void init() throws ServletException {
// 获取配置信息
String configParam = getServletConfig().getInitParameter("configParam");
// 建立数据库连接
Connection conn = DriverManager.getConnection(url, username, password);
}
服务阶段
Servlet 服务阶段是处理请求和生成响应的阶段。每当客户端发送一个请求时,Web 容器会创建一个新的线程来处理该请求,并调用 Servlet 的 service()
方法。
javaCopy Codepublic 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 Codepublic void destroy() {
// 释放数据库连接
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
实例
以下是一个简单的 Servlet 实例,它接收两个数值,并将它们相加并将结果返回给客户端。
javaCopy Codeimport 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¶m2=2
来测试该 Servlet。