【问题标题】:Reusing RequestDispatcher object重用 RequestDispatcher 对象
【发布时间】:2010-11-27 01:27:58
【问题描述】:

doGet()/doPost() 我有一个 servlet 中:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");
dispatcher.forward(request, response);

由于 jsp 的路径与当前请求无关,并且 RequestDispatcher 是从 servlet 上下文中获得的,我可以在多个请求中重用同一个调度程序对象吗 这样 RequestDispatcher dispatcher 成为实例变量

init()

dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");

doGet()/doPost() 只是有

dispatcher.forward(request, response);

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

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

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    它应该是线程安全的,但是在某些 servletcontainer 品牌/版本中这不是线程安全的。例如,在 Apache Tomcat 中,直到他们在 6.0.8 版本中修复它才成为线程安全的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2017-11-18
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多