重用RequestDispatcher对象

时间:2010-11-26 17:08:04

标签: java servlets

我在servlet中的doGet()/doPost()内:

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()调用查找调度程序,那么这可能并不重要,但是通过在init中的代码中获取对调度程序的引用,我们可以节省查找的成本也是如此。

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

1 个答案:

答案 0 :(得分:1)

它应该是线程安全的,但是有一些servletcontainer品牌/版本,这不是线程安全的。例如,在Apache Tomcat中,在版本6.0.8中修复它之前,它不是线程安全的。

我将这种方法放在“过早优化”类别中。我不这样做。