一、Servlet 与 JSP 简介
Java Servlet 和 JavaServer Pages(JSP)是 Java EE 平台的关键技术。它们是动态 Web 内容生成的核心组成部分,通过从客户端浏览器接收请求并生成响应来启用 Web 服务器交互。
Servlet 和 JSP 使用 javax.servlet 包提供了一套 Web 应用程序开发接口,并由 Java EE 容器提供运行环境。
Servlet 是一个 Java 类,开发人员可以通过继承实现这个类,使用 HTTP 协议处理客户端请求。而 JSP 是一种动态网页技术,可以将 HTML、Java 代码和 JSP 标记混合在一起,使页面内容更加灵活。
二、javax.servlet 包概述
javax.servlet 包提供了处理 Web 请求和响应的 API。它包含了一些类和接口,例如 Servlet、Filter、Listener 等。这些接口提供了用于处理请求和响应的方法、类和常量。
下面是一些 javax.servlet 包中常用的 API:
javax.servlet.Servlet javax.servlet.ServletConfig javax.servlet.ServletContext javax.servlet.ServletException javax.servlet.ServletOutputStream javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse javax.servlet.http.HttpSession javax.servlet.RequestDispatcher javax.servlet.Filter javax.servlet.FilterChain javax.servlet.FilterConfig javax.servlet.GenericServlet javax.servlet.ServletRequest javax.servlet.ServletResponse javax.servlet.SingleThreadModel
三、Servlet 的生命周期
Servlet 的生命周期从 Servlet 容器加载或初始化该 Servlet 开始,直到 Servlet 容器关闭或卸载该 Servlet。包括以下三个阶段:
1. 初始化阶段:在第一次请求 Servlet 时,Servlet 容器使用 init() 方法初始化 Servlet,并创建 Servlet 实例。开发人员可以在该方法中编写初始化 Servlet 所需的代码。
2. 执行请求阶段:当客户端浏览器发送请求到 Web 服务器时,Servlet 容器会调用 service() 方法来处理 Request,并将处理结果写回客户端浏览器。
3. 终止阶段:在 Servlet 容器关闭或 Servlet 卸载时,Servlet 容器会调用 destroy() 方法来停止 Servlet 实例并收回其资源。
四、过滤器(Filter)
Filter 是在 Servlet 容器接收到客户端请求和发出响应之间执行的一组操作的 API。Filter 可以根据需要修改请求和响应。
Filter 作用于 Servlet 和 JSP,并可以处理来自 Web 服务器的任何类型的请求和响应。Filter 链提供在多个 Filter 之间处理 Request 的机制。
Filter 将一个或多个 Servlet 和 JSP 包装在一个过滤器链(Filter Chain)中。过滤器链由一系列 Filter 和目标 Servlet 或 JSP 组成。
五、示例代码
下面是一个简单的 Servlet 和对应的 JSP。
Servlet:import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); response.getWriter().println("<html><body>"); response.getWriter().println("Hello, World!
"); response.getWriter().println("