我在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
中的代码中获取对调度程序的引用,我们可以节省查找的成本也是如此。
还想知道这是否是线程安全的,因为每次都会使用相同的调度程序对象?
答案 0 :(得分:1)
它应该是线程安全的,但是有一些servletcontainer品牌/版本,这不是线程安全的。例如,在Apache Tomcat中,在版本6.0.8中修复它之前,它不是线程安全的。
我将这种方法放在“过早优化”类别中。我不这样做。