Java安全
Java 基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
01反射
02反序列化
03JVM
04JDBC
05RMI
06JRMP
07JNDI
08CDI
09JPA
10Servlet
11Filter
12MVC模型
13MVC框架
14类的加载机制
15Maven
16注解
17ORM
18CC链
19JNDI注入
Log4j2
-
+
首页
10Servlet
Servlet(Java Servlet)—— 它是 Java Web 开发的核心组件,用于处理客户端(如浏览器)的 HTTP 请求并生成动态响应,是 Java EE(现 Jakarta EE)中 Web 层的基础技术。 ## 概述 Servlet 的全称是 Java Servlet。 - 它是一个接口:定义了 Java 类如何响应网络请求的规则。 - 它的本质:是一个用 Java 编写的服务器端程序,其主要功能是接收、处理和响应客户端的请求(通常是 HTTP 请求)。 - 它的容器:Servlet 运行在 Servlet 容器(如 Tomcat, Jetty, Undertow)中,容器负责管理 Servlet 的生命周期、网络连接、会话等。 ## 定位 Servlet 是运行在 Web 服务器(如 Tomcat、Jetty)中的 Java 程序,本质是一个 “HTTP 请求处理器”。 它的核心作用是: - 接收客户端发送的 HTTP 请求(如 GET、POST); - 处理请求(如调用业务逻辑、访问数据库); - 生成 HTTP 响应(如动态 HTML、JSON 数据)并返回给客户端。 简单说:Servlet 是 Java Web 的 “后端控制器”,所有动态内容(如用户登录、数据查询)的处理都依赖 Servlet。 ## 生命周期 ### 初始化阶段 当容器启动或第一次收到指向某个 Servlet 的请求时,容器会: 1. 加载 Servlet 类。 2. 创建 Servlet 实例。 3. 调用 init() 方法(仅一次)。 用途:在 init() 方法中执行一次性初始化工作,如加载配置文件、建立数据库连接池。 ### 服务阶段 这是 Servlet 的核心。每当有新的客户端请求到来时,容器会: 1. 创建 ServletRequest 和 ServletResponse 对象。 2. 调用 Servlet 的 service() 方法。 service() 方法会根据请求的类型(GET, POST, PUT 等),自动调用相应的 doGet(), doPost() 等方法。 ### 销毁阶段 当容器关闭或应用被卸载时,容器会: 1. 调用 Servlet 的 destroy() 方法。 2. 销毁 Servlet 实例。 用途:在 destroy() 方法中释放资源,如关闭数据库连接、保存状态等。  ## 配置方式 Servlet 需要配置 “URL 映射”(客户端通过哪个 URL 访问该 Servlet),有两种配置方式: ### XML配置 在 Web 应用的WEB-INF/web.xml中配置 Servlet 类和 URL 映射: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="5.0"> <!-- 注册Servlet --> <servlet> <servlet-name>HelloServlet</servlet-name> <!-- Servlet名称(自定义) --> <servlet-class>com.example.HelloServlet</servlet-class> <!-- Servlet类全限定名 --> <load-on-startup>1</load-on-startup> <!-- 容器启动时初始化(可选,数字越大优先级越低) --> </servlet> <!-- 配置URL映射 --> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <!-- 关联的Servlet名称 --> <url-pattern>/hello</url-pattern> <!-- 访问URL(客户端通过http://localhost:8080/应用名/hello访问) --> </servlet-mapping> </web-app> ``` ### 注解配置 通过@WebServlet注解直接在 Servlet 类上配置,无需web.xml: ```java import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; // 注解配置:urlPatterns指定访问URL,loadOnStartup指定启动时初始化 @WebServlet(urlPatterns = "/hello", loadOnStartup = 1) public class HelloServlet extends HttpServlet { // 实现业务逻辑... } ``` ## 代码示例 处理 GET 请求的 Servlet 示例,返回 “Hello, Servlet!”: ```java import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; // 配置URL映射为/hello @WebServlet("/hello") public class HelloServlet extends HttpServlet { // 处理GET请求 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置响应内容类型(文本/html) resp.setContentType("text/html;charset=UTF-8"); // 获取输出流,向客户端写入响应内容 try (PrintWriter out = resp.getWriter()) { out.println("<h1>Hello, Servlet!</h1>"); out.println("<p>当前时间:" + new java.util.Date() + "</p>"); } } // 若需要处理POST请求,重写doPost方法 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理POST请求逻辑(如表单提交) doGet(req, resp); // 简单起见,复用GET的处理逻辑 } } ``` 部署到 Tomcat 后,访问`http://localhost:8080/你的应用名/hello`,会看到动态生成的页面。
毛林
2025年10月27日 21:00
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码