文章目录
1. Servlet简介
Servlet 是 Java EE(现称 Jakarta EE)平台中的一个组件,用于扩展服务器的功能,特别是处理客户端请求和生成动态响应。Servlet 通常用于创建基于 Web 的应用程序,如 Web 应用程序、RESTful 服务等。
Servlet 接口: 定义:Servlet 是 Java EE 中的一个接口,所有的 Servlet 类都需要实现这个接口。
1.1 主要方法
- init: 初始化 Servlet。
- ServletConfig : 获取 Servlet 配置。
- service: 处理请求和生成响应。
- getServletInfo: 获取 Servlet 的信息。
- destroy: 销毁 Servlet。
1.2 HttpServlet
定义:HttpServlet 是 GenericServlet 的子类,专门用于处理 HTTP 请求。它提供了更多的便利方法来处理 HTTP 特性。
主要特点:
继承了 GenericServlet,并提供了 doGet()、doPost()、doPut()、doDelete() 等方法来处理不同类型的 HTTP 请求。
你只需要重写这些方法来处理具体的 HTTP 请求类型,而不需要处理底层的请求和响应细节。
HttpServletRequest 和 HttpServletResponse
HttpServletRequest:提供了获取请求参数、请求头、请求方法等信息的方法。
HttpServletResponse:提供了设置响应内容类型、响应头、响应状态码等方法。
2. Servlet 的主要功能和特点
2.1 处理客户端请求 HttpServletRequest
Servlet 接收来自客户端(通常是 Web 浏览器)的请求,处理请求中的数据,然后生成响应返回给客户端。它主要用于生成动态内容。
2.2 生成动态响应
Servlet 可以生成 HTML、JSON、XML 或其他格式的动态内容,回应客户端的请求。Servlet 还可以通过 Java 代码访问数据库、调用其他服务或执行复杂的业务逻辑。
2.3 生命周期管理:
Servlet 的生命周期由 Servlet 容器(如 Apache Tomcat、Jetty)管理。Servlet 的生命周期包括
初始化(init())、
处理请求(service())
销毁(destroy())三个阶段。
init(): 在 Servlet 被加载和实例化后,调用 init() 方法进行初始化配置。
service(): 当请求到达时,调用 service() 方法来处理请求和生成响应。
destroy(): 在 Servlet 被销毁之前,调用 destroy() 方法来释放资源。
2.4 请求和响应处理
Servlet 处理请求时,通常会通过 HttpServletRequest 对象获取客户端请求数据,例如请求参数、请求头等。
Servlet 生成响应时,会通过 HttpServletResponse 对象设置响应内容和属性,例如响应状态码、响应头、响应体等。
由于 Servlet 容器会为每个请求创建新的线程,因此 service() 方法必须是线程安全的。避免在实例变量中存储请求相关的数据,或使用线程安全的数据结构。
2.5 配置和映射
Servlet 的配置通常在 web.xml 文件中进行,指定 Servlet 的名称、URL 映射等。也可以使用注解(如 @WebServlet)进行配置,简化部署描述文件的配置。
2.6 多线程处理
Servlet 容器通常会为每个请求创建一个新的线程来处理请求。因此,Servlet 必须是线程安全的,以确保在并发请求下能够正确处理数据。
3. 简单的 Servlet 示例
创建 Servlet 类
package com.example;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("<h1>Welcome to My Servlet!</h1>");
}
}
配置 Servlet:
如果你使用的是注解(如上所示的 @WebServlet(“/welcome”)),就不需要在 web.xml 中进行额外配置。如果不使用注解,则需要在 web.xml 文件中配置 servlet。
部署和运行:
将 Servlet 部署到 Servlet 容器中(如 Tomcat),然后启动容器。通过访问 http://localhost:8080/yourapp/welcome(假设你部署的应用上下文为 yourapp)可以看到 Servlet 返回的欢迎消息。