首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Servlet 基础回顾:接口五大方法、生命周期与手写 HelloWorld 实战

     編輯:Java 綜合教學

Servlet 基础回顾:从接口到生命周期

Servlet 是 Java Web 的基石,理解其接口契约与生命周期是掌握 SpringMVC、Struts2 等框架原理的前提。本文梳理 Servlet 接口五大方法、生命周期流转,并给出最简手写实现与 web.xml 配置。

Servlet 接口五大方法

方法签名调用时机核心职责
initvoid init(ServletConfig config)实例化后、首次请求前(单次)初始化资源:数据库连接、加载配置、创建对象
servicevoid service(ServletRequest req, ServletResponse res)每次请求到达核心业务处理:读参数、调用服务、写响应
destroyvoid destroy()容器卸载 Servlet 前(单次)释放资源:关闭连接、停止线程、清理缓存
getServletConfigServletConfig getServletConfig()任意时刻返回初始化时传入的 ServletConfig
getServletInfoString getServletInfo()任意时刻返回描述信息:作者、版本、版权等

手写 HelloWorldServlet

public class HelloWorldServlet implements Servlet {
    private ServletConfig servletConfig;

    @Override
    public void init(ServletConfig config) throws ServletException {
        this.servletConfig = config;  // 保存配置对象
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        String realName = servletConfig.getInitParameter("realName");
        String servletName = servletConfig.getServletName();
        String username = req.getParameter("username");

        res.setContentType("text/html;charset=gb2312");
        PrintWriter out = res.getWriter();
        out.println("Hello World " + username + "<br/>");
        out.println("Servlet 名称:" + servletName + "<br/>");
        out.println("初始化参数 realName:" + realName + "<br/>");
        out.close();
    }

    @Override
    public String getServletInfo() {
        return "作者:张三;版本:1.0";
    }

    @Override
    public void destroy() {
        // 释放资源
    }
}

web.xml 配置

<web-app>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>com.lp.servlet.HelloWorldServlet</servlet-class>
        <init-param>
            <param-name>realName</param-name>
            <param-value>张三</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/helloworld</url-pattern>
    </servlet-mapping>
</web-app>

访问 https://localhost:8080/servlet-test/helloworld?username=lp 即可看到输出。

浏览器输出效果

生命周期流转图

Servlet 生命周期

  1. 加载类:容器启动或首次请求时加载字节码
  2. 实例化:调用无参构造器创建唯一实例
  3. 初始化:调用 init(config),注入 ServletConfig
  4. 服务:每请求调用 service(req, res),多线程并发
  5. 销毁:容器关闭/重新部署前调用 destroy()

核心要点

  • 单实例多线程:Servlet 类仅有一个实例,service 并发执行 → 成员变量非线程安全
  • ServletConfig vs ServletContext:前者单 Servlet 配置,后者全局应用配置
  • init 参数获取:config.getInitParameter("key")
  • 编码设置:req.setCharacterEncoding() + res.setContentType()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved