Servlet 的定位 (Positioning/Role):
- 服务器端组件: Servlet 运行在 Web 服务器(如 Tomcat, Jetty, Undertow 等),是服务器端组件。它不运行在客户端(浏览器)。
- 请求处理的入口: 是处理客户端 HTTP 请求的入口点。当 Web 容器接收到针对某个特定 URL 的请求时,会将该请求派发给对应的 Servlet 实例进行处理。
- Web 应用的控制器 (Controller): 在MVC (Model-View-Controller) 架构中,Servlet 扮演着 Controller 的角色,负责接收用户的输入(请求),调用业务逻辑(Model),并选择合适的视图(View,通常是 JSP 或其他模板)来展现结果。
- 动态内容生成的基础: Servlet 是生成动态 Web 内容(如根据用户请求从数据库中读取数据显示、处理表单提交等)的基础技术。
- Java Web 开发的基石: 许多高级的 Java Web 框架(如 Spring MVC, Struts 等)虽然对Servlet进行了包装,但它们的底层实现和运行机制都是基于 Servlet API 的。
Servlet 负责处理什么 (What it handles):
Servlet 主要负责处理客户端发来的各种 HTTP 请求,并生成相应的 HTTP 响应发送回客户端。具体来说,它负责处理:
- 接收和解析 HTTP 请求: 获取客户端请求的所有信息,包括:
- 请求方法 (GET, POST, PUT, DELETE 等)。
- 请求 URL 和路径信息。
- 请求参数 (通过 URL 或请求体传递的数据)。
- 请求头部信息 (如 User-Agent, Referer, Cookies 等)。
- 请求体数据 (例如 POST 请求中的表单数据或上传的文件)。
- 客户端的会话信息 (通过 Cookies 或 URL 重写维护)。
- 执行服务器端业务逻辑: 根据接收到的请求信息,调用后端的业务逻辑代码。包括:
- 与数据库交互(查询、插入、更新、删除)。
- 调用其他服务或组件。
- 执行计算或处理任务。
- 管理会话状态: 利用 HttpSession 对象来维护用户在多次请求之间的状态信息。
- 生成 HTTP 响应: 构建要发送回客户端的 HTTP 响应。这包括:
- 设置响应状态码(如 200 OK 表示成功,404 Not Found 表示资源未找到,500 Internal Server Error 表示服务器内部错误等)。
- 设置响应头部信息(如 Content-Type 指定响应内容的类型,Set-Cookie 设置客户端 Cookies)。
- 生成响应体内容,比如 HTML、JSON、XML、纯文本、二进制数据(如图片、文件下载)等。
- 将响应发送回客户端: 通过 Web 容器将生成的 HTTP 响应流式传输给发起请求的客户端。
- 转发或重定向: Servlet 可以决定将请求的处理转发给 Web 容器内部的另一个资源(如 JSP 文件或其他 Servlet)进行进一步处理和生成视图,或者向客户端发送重定向指令,让客户端浏览器重新发起一个新的请求到另一个 URL。
简而言之,Servlet 是 Java Web 应用中负责 接收 HTTP 请求 -> 执行服务器端逻辑 -> 生成 HTTP 响应 。它直接参与了 HTTP 请求-响应循环,是构建交互式、动态 Web 应用的关键技术。