Servlet 是 Java 提供的一种用于扩展 Web 服务器功能的技术。Servlet 是运行在服务器上的一个小程序,用于接收和处理来自客户端的请求,并生成响应。它是 Java Enterprise Edition(Java EE)的一部分,现在称为 Jakarta EE。
Servlet 生命周期:
Servlet 的生命周期包括初始化、服务请求和销毁三个主要阶段:
- 初始化:当 Servlet 第一次被请求时,或者 Web 容器启动时(取决于部署描述符中的配置),会调用
init()方法。这个方法只在 Servlet 实例化时调用一次。 - 服务请求:对于每个请求,Web 容器都会调用
service()方法。service()方法根据请求类型(GET、POST 等)调用相应的doGet(),doPost(),doPut(),doDelete()等方法。 - 销毁:当 Web 容器关闭或 Servlet 被移除时,会调用
destroy()方法。这个方法允许 Servlet释放资源,执行任何结束活动。
Servlet 接口和实现:
Servlet 接口定义了以下方法:
init(ServletConfig config):初始化 Servlet。service(ServletRequest request, ServletResponse response):处理请求。destroy():销毁 Servlet 实例。getServletConfig():返回 ServletConfig 对象。getServletInfo():返回 Servlet 的信息。 通常,我们不会直接实现 Servlet 接口,而是继承GenericServlet或HttpServlet类。HttpServlet是GenericServlet的一个子类,为处理 HTTP 请求提供了便利的方法。
创建 Servlet:
- 实现 Servlet:创建一个类,继承
HttpServlet。 - 重写方法:根据需要重写
doGet()、doPost()等方法。 - 部署描述符:在
web.xml中配置 Servlet,或者使用注解进行配置。
请求和响应:
- ServletRequest:封装了客户端的请求信息。
- ServletResponse:用于封装服务器响应给客户端的信息。
会话管理:
Servlet 使用以下技术管理会话:
- Cookie:存储在客户端的小型文本文件,用于保存会话信息。
- Session:存储在服务器端的会话信息,每个客户端都有一个唯一的会话标识(Session ID)。
过滤器(Filter):
Servlet 过滤器是用于拦截、处理和修改请求和响应的对象。过滤器可以用于日志记录、身份验证、数据压缩等。
监听器(Listener):
Servlet 监听器用于监听 ServletContext、Session 和 Request 的生命周期事件,并对其做出响应。
ServletContext:
代表 Servlet 的运行环境,用于在多个 Servlet 之间共享数据。
异常处理:
Servlet 可以通过实现 errorPage 或 exceptionType 在 web.xml 中配置错误处理页面,或者使用 try-catch 块在代码中处理异常。
Servlet 的优势:
- 平台独立性:由于 Servlet 是用 Java 编写的,它们可以在任何支持 Java 的平台上运行。
- 性能:Servlet 是服务器端的一部分,因此它们的执行速度通常比 CGI 脚本快。
- 安全性:Java 提供了内置的安全特性,可以用于保护 Servlet。
- 可扩展性:可以轻松地添加新功能或修改现有功能。 Servlet 是 Java Web 开发的基础,理解 Servlet 对于开发高性能、可扩展的 Web 应用程序至关重要。