# Servlet 类与接口
Servlet 类图
用户请求时序图
# Servlet 接口
定义了 Servlet 的生命周期方法:
init(config: ServletConfig): 初始化- 调用:第一个用户的第一次访问
- 目的是为了在处理客户端请求前完成一些初始化的工作,如建立数据库连接、读取资源文件信息等;
service(req: ServletRequest, resp: ServletResponse): 服务- 调用:每一个用户的每一次访问 ++
- 用于处理客户端的请求并返回响应对象
destroy(): 销毁- 调用:最后一个用户的最后一次访问
- 当 Web 容器关闭或者检测到一个 Servlet 要从容器中被删除时,会自动调用 destroy () 方法,以便让该实例释放掉所占用的资源
# ServletRequest 请求接口
attribute 相关
getAttribute(name: String) -> Object
获取请求域中的属性值。通常用于在请求转发(RequestDispatcher)时传递数据。setAttribute(name: String, obj: Object)
在请求域中存储属性值。parameter 相关
getParameter(name: String) -> String
获取客户端发送的请求参数值(如表单数据或 URL 查询参数)。
# ServletResponse 响应接口
getWriter() -> PrintWriter
获取一个字符输出流PrintWriter,用于向客户端发送文本响应内容。setContentType(type: String)
设置响应的内容类型(MIME Type)及字符编码,如text/html;charset=UTF-8。让浏览器知道如何解析响应数据。
# GenericServlet 抽象类
实现自 Servlet
定义了一个通用的、不依赖于具体协议的 Servlet,它给出了除 service () 方法外的其他四个方法的简单实现;
用户要编写一个通用的 Servlet (TCP/IP),只需要从 GenericServlet 类中继承,并实现 service() ;
init()
不同于 Servlet 的 init,这里的 init 是无参的,因为 GenericServlet 实现了 ServletConfig 的传入;
# HttpServlet 抽象类
继承自 GenericServlet
HttpServlet 提供了重载的 service(req: HttpServletRequest, resp: HttpServletResponse) 方法,并定义了七个 do* 方法。
为什么定义了七个 `do*` 方法
**RESTful 编程: **
HTTP 协议支持的方法有 GET、POST、PUT、PATCH、DELETE,以及 OPTIONS 和 TRACE。
在 RESTful 架构中,使用这些方法来操作资源。
在编程中,需要根据应用程序的需求选择合适的 HTTP 方法来操作资源。
doGet: 获取资源
用于处理 GET 请求,一般用于读取数据。doPost: 创建资源
用于处理 POST 请求,一般用于提交表单或上传文件。doPut: 修改资源
用于处理 PUT 请求,通常用于更新资源。doPatch: 修改部分资源
用于处理 PATCH 请求,对资源进行部分更新。doDelete: 删除资源
用于处理 DELETE 请求,删除指定的资源。doOptions: 获取支持的方法
用于获取服务器支持的 HTTP 请求方法。doTrace: 追踪路径
用于回显服务器收到的请求,主要用于测试或诊断。
# HttpServletRequest 请求接口
继承自 ServletRequest
getSession() -> HttpSession
获取当前请求关联的 Session 对象。如果不存在,默认会创建一个新的。getContextPath() -> String
获取当前 Web 应用的上下文路径(Context Path),即项目部署名。
# HttpServletResponse 响应接口
继承自 ServletResponse
addCookie(cookie: Cookie)
向响应中添加一个 Cookie,浏览器接收到后会保存该 Cookie。sendRedirect(location: String)
发送一个重定向响应,通知浏览器访问新的 URL 地址(状态码 302)。
# ServletConfig 配置接口
getInitParameter(name: String) -> String
根据参数名获取 Servlet 的初始化参数值(在 web.xml 或注解中配置)。getServletName() -> String
获取当前 Servlet 的名称。getServletContext() -> ServletContext
获取当前 Web 应用的 ServletContext 对象(应用上下文)。
# ServletContext 上下文接口
- attribute 相关
getAttribute(name: String)
获取应用域(全局)中的属性值。setAttribute(name: String, obj: Object)
在应用域中存储属性值,所有 Servlet 共享。 - resource 相关
getResourcePaths(path: String) -> Set<String>
获取指定路径下的所有资源路径列表。getResourceStream(path: String) -> InputStream
获取指定路径资源的输入流,用于读取资源文件内容。
# 代码示例
# HelloServlet
下面的代码实现了一个简单的 Servlet 来展示基本的生命周期,输出 Hello, world!
1 |
|