esolve
V2EX  ›  问与答

关于 jsp, servlet 和线程的关系,我这样理解对吗?

  •  
  •   esolve · Feb 23, 2017 · 1640 views
    This topic created in 3394 days ago, the information mentioned may be changed or developed.

    一个 jsp 文件对应一个 servlet 所以当多个用户请求同一个 jsp 文件 或者同一个用户同时开不同 tab (标签)请求一个 jsp 文件 只有第一个 jsp 请求生成一个 servlet 实例 譬如 这个 jsp 是 form.jsp tomcat 容器生成一个 名为 formservlet 的实例 然后容器里有一个 mapping ("form.jsp", formservlet) 那么接下来, 其他对于这个 jsp 文件的请求来时 tomcat 容器利用这个 mapping 找出 formservlet 实例 与此同时会从线程池里取出一个线程

    线程大概是

    class worker implements runnable(){
          
           
           void run(){
               Servlet svl = tomcat_container.get("form.jsp")
               svl.service()
           }
    }
    

    是不是这样子?

    7 replies    2017-02-23 21:32:37 +08:00
    ihuotui
        1
    ihuotui  
       Feb 23, 2017 via iPhone
    理解为一个没有全局静态变量的函数被多线程调用。
    esolve
        2
    esolve  
    OP
       Feb 23, 2017
    @ihuotui 具体大致是什么样呢?
    是我上面的代码那样吗?
    sorra
        3
    sorra  
       Feb 23, 2017
    大概可以这么理解。
    实际上容器本身有一个 servlet 映射到*.jsp 这个路径,这个 servlet 会根据*的实际值进一步分发到对应的类实例(由 JSP 编译而成,是单例)。
    ovear
        4
    ovear  
       Feb 23, 2017
    类似这样, registerHandler 的时候 *.jsp 会被映射到一个单独的 Handler 上,这个 Handler 进行处理。
    ihuotui
        5
    ihuotui  
       Feb 23, 2017 via iPhone
    线程在 tomcat 中, servlet 还是 servlet ,你可以打印 servlet hashcode
    esolve
        6
    esolve  
    OP
       Feb 23, 2017
    @ovear
    *.jsp 会被映射到一个单独的 Handler , handler 和 servlet 的关系呢?
    我的描述中有什么不对的地方吗?
    esolve
        7
    esolve  
    OP
       Feb 23, 2017
    @ihuotui 我的描述中有什么不对的地方吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5268 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 08:37 · PVG 16:37 · LAX 01:37 · JFK 04:37
    ♥ Do have faith in what you're doing.