servlet定义

    servlet定义:web

Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并做出响应的程序。安全

Servlet多线程体系结构是创建在Java多线程机制之上的,它的生命周期是由Web容器负责的。服务器

     当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类,此时它贮存于内存中。。当有新的客户端请求该Servlet时,通常不会再实例化该Servlet类,也就是有多个线程在使用这个实例。这样,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的状况,数据可能会变得不一致。因此在用Servlet构建的Web应用时要注意线程安全的问题。每个请求都是一个线程,而不是进程,所以,Servlet对请求的处理的性能很是高。多线程

       对于Servlet,它被设计为多线程的(若是它是单线程的,你就能够想象,当1000我的同时请求一个网页时,在第一我的得到请求结果以前,其它999我的都在郁闷地等待),若是为每一个用户的每一次请求都建立一个新的线程对象来运行的话,系统就会在建立线程和销毁线程上耗费很大的开销,大大下降系统的效率。并发

所以,Servlet多线程机制背后有一个线程池在支持,线程池在初始化初期就建立了必定数量的线程对象,经过提升对这些对象的利用率,避免高频率地建立对象,从而达到提升程序的效率的目的。(由线程来执行Servletservice方法,servletTomcat中是以单例模式存在的, Servlet的线程安全问题只有在大量的并发访问时才会显现出来,而且很难发现,所以在编写Servlet程序时要特别注意。线程安全问题主要是由实例变量形成的,所以在Servlet中应避免使用实例变量。若是应用程设计没法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径)ide

 Struts2Action是原型,非单实例的;会对每个请求,产生一个Action的实例来处理。性能

         解决servlet线程安全的方案:同步对共享数据的操做 Synchronized (this){...}、避免使用实例变量this

客户端向服务器端发出请求;spa

这个过程比较重要,这时Tomcat会建立两个对象:HttpServletResponseHttpServletRequest。并将它们的引用(注意是引用)传给刚分配的线程;.net

线程开始着手接洽servlet

④servlet根据传来的是GETPOST,分别调用doGet()doPost()方法进行处理;

⑥servlet将处理后的结果经过线程传回Tomcat,并在以后将这个线程销毁或者送还线程池;

⑦Tomcat将处理后的结果变成一个HTTP响应发送回客户端,这样,客户端就能够接受处处理后的结果了。

相关文章
相关标签/搜索