Ленивое создание Spring MVC DispatcherServlet? - PullRequest
1 голос
/ 22 января 2010

Есть ли способ для меня создать экземпляр Spring MVC DispatcherServlet в коде, вместо этого поместить его в файл web.xml и создать экземпляр на веб-сервере?

Причина этого в том, что я хочу проверить memCache, чтобы увидеть, действительно ли я недавно отобразил запрашиваемую страницу, и если да, просто вернуться из memCache, а не проходить через Spring MVC и контроллеры.

Создание ~ 2-секундного экземпляра DispatcherServlet очень важно, потому что я использую Google App Engine, и это может закончиться дополнительными 2 секундами, в течение которых пользователь должен ждать своей страницы.

Я пытался

dispatcherServlet = new DispatcherServlet();
dispatcherServlet.init();
dispatcherServlet.service(request, response);

но я получаю это исключение при вызове инициализации:

[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)

По сути, я ищу способ создания сервлета в коде без необходимости указывать его в web.xml и не вызывать

getServletConfig().getServletContext().getServlet("dispatcherServlet");

Ответы [ 2 ]

1 голос
/ 22 января 2010

DispatcherServlet - это сервлет, поэтому вам следует вызвать init(ServletConfig) вместо init() для его инициализации.

0 голосов
/ 22 января 2010

Если Google App Engine не делает что-то действительно странное, DispatcherServlet создается только один раз при запуске приложения.

Если вы хотите кэшировать отклик страницы, как вы упомянули, я бы предложил реализовать его как HandlerInterceptor (который вы можете применить к любому шаблону URL, который вам нравится), который дает вам ловушки для подключения логики в либо до, либо после вызова вашего контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...