在servlet的doGet()/doPost()中,我有:
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");
dispatcher.forward(request, response);由于jsp的路径与当前请求无关,而RequestDispatcher是从servlet上下文中获得的,我能否在多个请求中重用相同的dispatcher对象,使RequestDispatcher dispatcher成为实例变量
init()有
dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp");而doGet()/doPost()只有
dispatcher.forward(request, response);这样做背后的原因是为每个请求节省RequestDispatcher的构建成本(/lookup)。如果服务器实现已经缓存了对象并通过url为每个getRequestDispatcher()调用查找dispatcher,那么这可能并不重要,但是通过在init的代码中获得对dispatcher的引用,我们也可以节省查找的成本。
还想知道这是否是线程安全的,因为每次都会使用相同的dispatcher对象?
发布于 2010-11-27 01:27:58
它应该是threadsafe,但在某些servletcontainer版本中,它不是threadsafe。例如,在Apache Tomcat中,直到他们在版本6.0.8中修复了它,它才成为threadsafe。
我将这种方法归类为“过早优化”。我不会那样做的。
https://stackoverflow.com/questions/4287272
复制相似问题