Servlet生命周期,Servlet是线程安全的吗?

目录

首先我们先了解一下什么是Servlet

servlet生命周期

Servlet是线程安全的吗? 


首先我们先了解一下什么是Servlet

        在JavaWeb中有三大组件,分别是Servlet、Filter和Listener。其中Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,即接收请求数据、处理请求和完成响应。        
       Servlet是运行在Web服务器端的Java应用程序,Servlet对象主要封装了对HTTP请求的处理,并且他的运行需要Servlet容器的支持,提供了Servlet功能的服务器,叫做Servlet容器。
 1. 实现Servlet的方式
  主要有三种实现方式:①实现javax.servlet.Servlet接口;② 继承javax.servlet.GenericServlet类;③继承javax.servlet.http.HttpServlet类;其中最常用的继承HttpServlet类来实现。
   

servlet生命周期

public interface Servlet {

    public void init(ServletConfig config) throws ServletException;

    public ServletConfig getServletConfig();

    public void service(ServletRequest req, ServletResponse res)

            throws ServletException, IOException;

    public String getServletInfo();

    public void destroy();

}

以上是Servlet接口的源码,主要有五个方法,其中与Servlet生命周期有关的方法有 init方法、service方法和destroy方法。
(1) 加载和实例化;在第一次请求Servlet时,Servlet容器将会创建Servlet实例;
(2) 初始化;Servlet容器加载完成Servlet之后,必须进行初始化,此时,init方法将被调用;
(3) Servlet初始化之后,就处于响应请求的就绪状态,此时如有客户端请求发送,就会调用Servlet实例的service()方法,并且根据用户的请求方式,调用doPost或者doGet方法;
(4) 最后,Servlet容器负责将Servlet实例进行销毁,调用destroy方法实现;对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。
一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

下面用张图片总结一下:

Servlet是线程安全的吗? 

        什么是线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
我们都知道servlet是多线程的,同时一个servlet实现类只会有一个实例对象,也就是它是单例的,所以多个线程是可能会访问同一个servlet实例对象的。所以servlet是线程不安全的。

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会敲代码的阿宁.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值