温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Servlet如何创建实例

发布时间:2026-09-01 05:42:07 来源:亿速云 阅读:101 作者:小樊 栏目:编程语言

在 Java Web 开发中,Servlet 的实例是由 Servlet 容器(如 Tomcat)负责创建和管理的,开发者通常不需要(也不应该)手动 new 一个 Servlet。

下面从创建时机、创建方式、配置方式三个角度说明。


一、Servlet 实例由谁创建?

由 Servlet 容器(Web 容器)创建

  • 常见容器:Tomcat、Jetty、Undertow
  • 容器在启动时或第一次请求时:
    • 加载 Servlet 类
    • 调用 无参构造方法
    • 创建 Servlet 实例
    • 调用 init() 方法
    • 处理请求(service())

二、Servlet 实例的创建时机

1️⃣ 第一次请求时创建(默认)

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
}
  • 第一次访问 /hello 时创建实例
  • 之后复用该实例(单例)

2️⃣ 容器启动时创建(预加载)

@WebServlet(
    urlPatterns = "/hello",
    loadOnStartup = 1
)
public class HelloServlet extends HttpServlet {
}

或 web.xml:

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

三、Servlet 实例创建过程(生命周期)

1. 加载 Servlet 类(ClassLoader)
2. 调用 无参构造方法(创建实例)
3. 调用 init(ServletConfig)
4. 调用 service()
5. 容器关闭时调用 destroy()

⚠️ 注意

  • Servlet 必须有无参构造方法
  • 不要在 Servlet 中写 new HelloServlet()

四、Servlet 是单例吗?

✅ 是(通常)

  • 一个 Servlet 类在容器中 只有一个实例
  • 多线程共享该实例
  • 所以:
    • ❌ 不要在 Servlet 中使用成员变量保存请求数据
    • ✅ 使用局部变量或 ThreadLocal

五、示例:最简单的 Servlet 创建

@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.getWriter().write("Servlet created by container");
    }
}

六、总结一句话

Servlet 实例由 Web 容器通过无参构造方法自动创建,开发者只负责编写 Servlet 类,不直接创建实例。

如果你愿意,我也可以讲:

  • Servlet 与 Spring MVC 的关系
  • Servlet 为什么是线程不安全的
  • 手写一个“迷你 Servlet 容器”原理
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手