有没有办法让我在代码中实例化Spring MVC DispatcherServlet而不是把它放在web.xml中并让它由Web服务器实例化?
这样做的原因是我想检查一个memCache,看看我是否已经最近渲染了正在请求的页面,如果是这样,只需从memCache返回,而不是通过Spring MVC和控制器。
DispatcherServlet的~2秒实例化非常重要,因为我使用的是Google App Engine,这可能会使用户等待其页面的时间延长2秒。
我试过了
dispatcherServlet = new DispatcherServlet();
dispatcherServlet.init();
dispatcherServlet.service(request, response);
但是我在init调用中遇到了这个异常:
[java] java.lang.NullPointerException
[java] at org.springframework.web.servlet.HttpServletBean$ServletConfigPropertyValues.<init>(HttpServletBean.java:196)
[java] at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:114)
基本上,我正在寻找的是一种在代码中实例化servlet的方法,而不必在web.xml中指定它而不必调用
getServletConfig().getServletContext().getServlet("dispatcherServlet");
答案 0 :(得分:1)
DispatcherServlet
是一个servlet,因此您应该调用init(ServletConfig)
而不是init()
来初始化它。
答案 1 :(得分:0)
除非Google App Engine做了一些非常奇怪的事情,否则DispatcherServlet只会在应用程序启动时实例化一次。
如果你想在你提到的时候缓存页面响应,我建议你将它作为HandlerInterceptor实现(你可以应用于你喜欢的任何URL模式),它可以让你在任何一个前面插入逻辑 - 或控制器的后调用。