首页 > 代码库 > servlet定义

servlet定义

    servlet定义:

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中应避免使用实例变量。如果应用程设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径)

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

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

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

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

线程开始着手接洽servlet

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

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

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


servlet定义