Java Servlet 是 Java 企业级应用 中的一个核心组件,特别是在 Web 应用开发中,它为服务器端处理请求提供了基础。每次用户发出请求时,Servlet 都会动态生成响应,这在构建复杂、交互式的 Web 应用时尤为重要。
Servlet 是运行在 Java EE 容器(如 Tomcat、Jetty)中的 Java 类,用于处理 HTTP 请求并生成动态内容。Servlet 的作用 类似于传统的 CGI 脚本,但它具有更好的性能和扩展性。
每一个 Servlet 都有以下生命周期:
init()
方法在 Servlet 第一次加载时调用。service()
方法处理客户端请求。destroy()
方法在 Servlet 卸载时调用。每个 Servlet 在服务器启动后,第一次收到请求时会被创建并初始化,然后服务器会在每次请求时调用它的 service()
方法,最后在服务器关闭或 Servlet 被移除时,调用 destroy()
方法。
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// Servlet 初始化
System.out.println("Servlet Initialized");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理 GET 请求
resp.setContentType("text/html");
resp.getWriter().println("<h1>Hello, Servlet!</h1>");
}
@Override
public void destroy() {
// Servlet 销毁时调用
System.out.println("Servlet Destroyed");
}
}
在这个简单的例子中,我们创建了一个名为 HelloServlet
的类,它继承了 HttpServlet
。当我们发送一个 GET 请求时,doGet()
方法 会返回一个简单的 HTML 响应。
为了使 Servlet 能够处理请求,我们需要在 web.xml
文件中配置它。Tomcat 会根据这个配置文件,将对应的 URL 映射到我们的 HelloServlet
类。
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
当用户访问 http://localhost:8080/yourapp/hello
时,Tomcat 会将请求转发给 HelloServlet
进行处理。
虽然 Servlet 可以生成动态 HTML 页面,但它并不擅长于表现层的渲染。通常我们会将 Servlet 和 JSP 结合使用,Servlet 处理业务逻辑,JSP 负责生成页面。这种模式称为 MVC 模式。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理表单提交的数据
String username = req.getParameter("username");
req.setAttribute("user", username);
// 转发到 JSP 页面
req.getRequestDispatcher("/welcome.jsp").forward(req, resp);
}
在这个例子中,Servlet 通过 doPost()
方法处理表单提交的数据,并将其转发到 JSP 页面进行渲染。
Servlet 提供了丰富的 API,常用的包括:
HttpServletRequest
:用于获取客户端请求的详细信息,如请求参数、请求头、Session 等。HttpServletResponse
:用于向客户端返回响应,设置状态码、响应头、输出数据等。RequestDispatcher
:用于在多个 Servlet 或 JSP 之间转发请求。例如,获取客户端 IP 地址和 User-Agent 信息:
String clientIp = req.getRemoteAddr();
String userAgent = req.getHeader("User-Agent");
通过 Servlet,我们可以轻松地处理 HTTP 请求和响应。无论是处理简单的 GET 请求,还是复杂的表单数据提交,Servlet 提供了一种高效的方式来处理服务器端逻辑,并与 JSP、前端模板引擎等工具配合,实现现代 Web 应用的后端开发。