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

2017-02-23 18:38:16 +08:00
 esolve

一个 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()
       }
}

是不是这样子?

1305 次点击
所在节点    问与答
7 条回复
ihuotui
2017-02-23 19:59:33 +08:00
理解为一个没有全局静态变量的函数被多线程调用。
esolve
2017-02-23 20:02:08 +08:00
@ihuotui 具体大致是什么样呢?
是我上面的代码那样吗?
sorra
2017-02-23 20:50:12 +08:00
大概可以这么理解。
实际上容器本身有一个 servlet 映射到*.jsp 这个路径,这个 servlet 会根据*的实际值进一步分发到对应的类实例(由 JSP 编译而成,是单例)。
ovear
2017-02-23 20:52:48 +08:00
类似这样, registerHandler 的时候 *.jsp 会被映射到一个单独的 Handler 上,这个 Handler 进行处理。
ihuotui
2017-02-23 20:55:04 +08:00
线程在 tomcat 中, servlet 还是 servlet ,你可以打印 servlet hashcode
esolve
2017-02-23 21:32:22 +08:00
@ovear
*.jsp 会被映射到一个单独的 Handler , handler 和 servlet 的关系呢?
我的描述中有什么不对的地方吗?
esolve
2017-02-23 21:32:37 +08:00
@ihuotui 我的描述中有什么不对的地方吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX