比如tomcat接受用户登录请求后,是不是为每个用户建立一个进程,
使得以后该用户的请求都通过这个进程建立其它的线程来处理?那么如果很多用户登录,岂不是要建立很多进程?还是tomcat用的是线程来跟踪用户?如果是进程的话,我怎么得到这个进程的引用?在java中如何得到执行当前java类的进程的引用?(不是线程引用)

解决方案 »

  1.   

    肯定是现成  currentThread
      

  2.   

    你问的问题还是有点意思的,因为当前主流的CGI就两种:一种是一个请求单独一个线程(Perl就是),一种是所有请求同一个线程(java就是)对于web应用来说,这个CGI程序就是HttpServlet(一个jsp页面也是一个HttpServlet)。默认情况下,HttpServlet是单例的,就是说所有请求都是同一个servlet去响应。不过,j2ee规范还保留了Perl那种模式,通过让Servlet实现SingleThreadMode这个接口,就可以把Servlet编程一个请求一个线程的模式。这个接口仅仅是一个标识,没有任何抽象的成员方法。如果你要得到它的引用,可以在Servlet(jsp)中直接用this就可以得到它。
    或者,在HttpServletRequest的getServletContext(Servlet容器实现不同,这个方法可能会有差异)获取当前HTTP请求所处的Servlet。
      

  3.   

    我只知道服务器在维护与客户机之间的连接的时候是用的线程不可能用进程的  因为进程是有端口的   就好像http协议那个进程使用固定的80端口端口号的范围是0到65535  如果有那么多进程的话哪里有这么多进程给你分配啊线程倒是对的   每一个与用户的连接和访问都是放在线程中进行  比如我们知道的session就是服务器和客户机共同来维持的至于这个线程什么时候被关闭 我也很想知道。静待高手~~
      

  4.   


    Servlet的生命周期:
    init-service-destory三个方法生命周期管理是由servlet容器接管的,用户应用程序无需关心。
    但总的来说,有以下阶段:
    1)如果是单例的,用户请求到来,容器启动servlet的实例化,调用init进行初始化;紧接着调用service进行业务处理。service方法会去调用servlet的doPost,doGet等方法。请求完成后,容器调用destory进行销毁。2)如果不是单例的,如Struts的ActionServlet,它的生命周期与容器等长。它的生命周期开始于web.xml的配置文件,中间处理过程与普通servlet一样。当容器关闭、重启,servlet的生命周期也结束、重新开始。PS:servlet的生命周期管理方法都是回调方法,都是由容器进行调用。应用程序显式调用它们是没有效果的。如同Thread类的run方法,是由start调用的,手动调用run方法,与普通方法一样,但起不到预期的效果