Spring MVC DispatcherServlet的Lazy Instantiation?

时间:2010-01-21 22:02:14

标签: java google-app-engine servlets spring-mvc

有没有办法让我在代码中实例化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");

2 个答案:

答案 0 :(得分:1)

DispatcherServlet是一个servlet,因此您应该调用init(ServletConfig)而不是init()来初始化它。

答案 1 :(得分:0)

除非Google App Engine做了一些非常奇怪的事情,否则DispatcherServlet只会在应用程序启动时实例化一次。

如果你想在你提到的时候缓存页面响应,我建议你将它作为HandlerInterceptor实现(你可以应用于你喜欢的任何URL模式),它可以让你在任何一个前面插入逻辑 - 或控制器的后调用。