【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 的生命周期:init、service、destroy 的奥秘

发布于:2025-03-04 ⋅ 阅读:(9) ⋅ 点赞:(0)

<前文回顾>

点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、Servlet 是个啥玩意儿?

Servlet 这玩意儿,说白了就是个“跑腿的”,专门给 Web 服务器打下手。它从浏览器那儿接活儿,处理完了再把结果扔回去。Servlet 的生命周期,说白了就是“从生到死”的过程,主要分三步:initservicedestroy。这三步走完了,Servlet 的“戏份”也就结束了。

二、init:Servlet 的“出生证明”

Servlet 一出生,就得先过 init 这关。init 是 Servlet 的初始化方法,Servlet 容器[1] 会在 Servlet 第一次被调用时调用它。这就像“新官上任三把火”,Servlet 得先把自己“收拾利索”了,才能开始干活。

Java Code

public void init(ServletConfig config) throws ServletException {

    // 初始化代码

}

init 方法里,Servlet 通常会干这么几件事:

  1. 加载配置:从 ServletConfig 对象里读取初始化参数,比如数据库连接信息啥的。
  2. 初始化资源:比如打开数据库连接、加载配置文件啥的。
  3. 设置状态:把 Servlet 的状态设置成“准备好了”,等着接活儿。

init 方法只会在 Servlet 的生命周期里调用一次,所以得“一步到位”,不能“拖泥带水”。

三、service:Servlet 的“干活时间”

Servlet 初始化完了,接下来就是 service 方法上场了。service 是 Servlet 的核心方法,所有的请求都得经过它处理。这就像“大厨掌勺”,Servlet 得把每个请求都“料理”得明明白白。

Java Code

public void service(ServletRequest req, ServletResponse res)

    throws ServletException, IOException {

    // 处理请求

}

service 方法里,Servlet 通常会干这么几件事:

  1. 解析请求:从 ServletRequest 对象里读取请求参数,比如表单数据、URL 参数啥的。
  2. 处理业务逻辑:根据请求参数,调用相应的业务逻辑代码。
  3. 生成响应:把处理结果写到 ServletResponse 对象里,返回给浏览器。

service 方法会根据请求的类型(GET、POST 等)调用不同的处理方法,比如 doGetdoPost 啥的。这就像“看人下菜碟”,Servlet 得根据请求的类型“对症下药”。

Java Code

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

    throws ServletException, IOException {

    // 处理 GET 请求

}

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

    throws ServletException, IOException {

    // 处理 POST 请求

}

四、destroy:Servlet 的“退休仪式”

Servlet 干完活儿了,最后还得过 destroy 这关。destroy 是 Servlet 的销毁方法,Servlet 容器会在 Servlet 被卸载时调用它。这就像“退休仪式”,Servlet 得把自己“收拾干净”了,才能“功成身退”。

Java Code

public void destroy() {

    // 清理代码

}

destroy 方法里,Servlet 通常会干这么几件事:

  1. 释放资源:比如关闭数据库连接、释放文件句柄啥的。
  2. 清理状态:把 Servlet 的状态设置成“退休了”,不再接活儿。

destroy 方法也只会在 Servlet 的生命周期里调用一次,所以得“干净利索”,不能“拖泥带水”。

五、从 HTTP 请求到 Servlet 用户代码执行:Servlet 都干了啥?

从浏览器发个 HTTP 请求,到 Servlet 用户代码执行,这中间 Servlet 都干了啥?这事儿说起来有点“复杂”,但咱可以“掰开了揉碎了”慢慢说。

1. 请求到达服务器

浏览器发个 HTTP 请求,服务器一收到,Servlet 容器就开始“忙活”了。Servlet 容器会根据请求的 URL,找到对应的 Servlet。这就像“查户口”,Servlet 容器得先知道该找谁干活。

2. URL 映射

Servlet 容器会根据 web.xml 配置文件里的 <servlet-mapping>,把请求的 URL 映射到对应的 Servlet。这就像“对号入座”,Servlet 容器得把请求“安排”得明明白白。

XML Code

<servlet>

    <servlet-name>MyServlet</servlet-name>

    <servlet-class>com.example.MyServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>MyServlet</servlet-name>

    <url-pattern>/myServlet</url-pattern>

</servlet-mapping>

3. 请求解析

Servlet 容器会把 HTTP 请求解析成 HttpServletRequest 对象,方便 Servlet 处理。这就像“拆快递”,Servlet 容器得把请求“拆开”了,Servlet 才能“看明白”。

4. 字符编码

Servlet 容器会根据请求的字符编码,把请求参数转成正确的字符集。这就像“翻译”,Servlet 容器得把请求参数“翻译”成 Servlet 能“看懂”的样子。

Java Code

request.setCharacterEncoding("UTF-8");

5. 参数验证

Servlet 容器会对请求参数进行基本的验证,比如检查参数是否为空、是否符合格式啥的。这就像“安检”,Servlet 容器得把请求参数“检查”一遍,确保没问题了,才能交给 Servlet 处理。

6. 调用 Servlet 的 service 方法

最后,Servlet 容器会调用 Servlet 的 service 方法,把请求交给 Servlet 处理。这就像“交活儿”,Servlet 容器把请求“交”给 Servlet,Servlet 就得开始“干活”了。

六、Servlet 的生命周期:从“生”到“死”

Servlet 的生命周期,说白了就是“从生到死”的过程。init 是“出生”,service 是“干活”,destroy 是“退休”。这三步走完了,Servlet 的“戏份”也就结束了。

Servlet 的生命周期虽然简单,但里头“门道”不少。Servlet 容器得把每个环节都“安排”得明明白白,Servlet 才能“顺顺当当”地把活儿干完。


专有名词解释

  1. Servlet 容器:负责管理 Servlet 生命周期的软件组件,如 Tomcat、Jetty 等。