一次请求中,经过多次转发会有几条线程?

发布于 2022-09-11 23:37:45 字数 440 浏览 30 评论 0

做了个测试,在MyBatisUtility工具类依赖ThreadLocal来设置获取或者删除 SQLSession,
在Service层中有一个类,类中的两个方法都使用了MyBatisUtility,(MyBatisUtilit.getSqlSession设置为成员变量)
在Servlet包下有两个Servlet相互转发,a转发给b,b在转发给index.jsp。(a、b都访问Service中的这个方法)
在第二刷新访问a 时,报出Executor was closed的错误,查看后发现,第二次 访问时 SQLSession 不存在。
如果我将MyBatisUtilit.getSqlSession设置为局部变量 就不会报错。
问题:多次转发下是不是开启多条线程?导致了ThreadLocal 中的 get() 方法获取不到 SQLSession?还是其他原因?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请止步禁区 2022-09-18 23:37:45

成员变量被线程共享,第一次请求结束session被关闭,且第二次请求使用时又没通过MyBatisUtilit.getSqlSession重新获取session,所以在使用一个被关闭的session时报出Executor was closed错误

情定在深秋 2022-09-18 23:37:45

tomcat应该是一个请求一个线程,如果你做了redirect肯定是在不同线程中处理,如果你只是forward,应该还是同一个线程。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文