servlet运行原理

1.实例化对象

    当请求第一次访问的时候进行实例化   就是这个服务器被第一次访问的时候

    在servlet初始化的石虎会调用init方法,而且只被调用一次

2.调用doGet/doPost方法

    每当一个新的请求访问的时候,tomcat会为其分配一个线程,调用-jspService方法,jsp运行的时候,是先把jsp编译为java文件,再通过实例调用jspService方法,在jsp页面写的代码被封装在-jspService方法中,然后调用doGet/doPost方法

3.用doGet/doPost方法获取请求     

    doGet/doPost方法的形参  是HttpServletRequest request,HttpServletResponse response 对象

    用request和response获取请求

4.执行方法

5.方法执行完毕 线程请求销毁

    调用destory()方法,请求线程销毁,关闭线程资源池

6.servlet常驻内存,知道服务器停止。

注意事项:

servlet的生命周期 也是jsp的生命周期  

        当客户端第一次向web服务器提出一个对servlet的请求时,web服务器会创建一个该servlet的实例,并调用init()方法。如果当web服务器中已存在一个servlet实例,则直接使用此实例,然后再调用service()方法,service()方法根据客户端的请求方式决定调用对应的doXXX()方法,当servlet从web服务器中删除时,web服务器会调用servlet的destroy()方法

servlet是单例的             因为如果每一次新的请求过来服务器都要实例化一个对象,如果同时几千几万个请求同时访问,服务器会承受不了  所以只当第一次访问服务器的时候实例化一个对象,这个实例在内存中等待请求,接下来当一个新的请求访问的时候去调用这个实例即可。

servlet是不安全的 

    servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个servlet时,servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet容器会自动使用线程池等技术来支持系统的运行,这样,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。所以在用Servlet构建的Web应用时如果不注意线程安全的问题,会使所写的Servlet程序有难以发现的错误。

猜你喜欢

转载自blog.csdn.net/yuanboqi/article/details/80331896