首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用RequestDispatcher对象

重用RequestDispatcher对象
EN

Stack Overflow用户
提问于 2010-11-27 01:08:04
回答 1查看 597关注 0票数 0

在servlet的doGet()/doPost()中,我有:

代码语言:javascript
复制
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");
dispatcher.forward(request, response);

由于jsp的路径与当前请求无关,而RequestDispatcher是从servlet上下文中获得的,我能否在多个请求中重用相同的dispatcher对象,使RequestDispatcher dispatcher成为实例变量

init()

代码语言:javascript
复制
dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");

doGet()/doPost()只有

代码语言:javascript
复制
dispatcher.forward(request, response);

这样做背后的原因是为每个请求节省RequestDispatcher的构建成本(/lookup)。如果服务器实现已经缓存了对象并通过url为每个getRequestDispatcher()调用查找dispatcher,那么这可能并不重要,但是通过在init的代码中获得对dispatcher的引用,我们也可以节省查找的成本。

还想知道这是否是线程安全的,因为每次都会使用相同的dispatcher对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-27 01:27:58

它应该是threadsafe,但在某些servletcontainer版本中,它不是threadsafe。例如,在Apache Tomcat中,直到他们在版本6.0.8中修复了它,它才成为threadsafe。

我将这种方法归类为“过早优化”。我不会那样做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4287272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档