2011-01-19 2 views
1

Я пытался просто вывести свой запрос только с прямой записью в объект ответа. Это отлично работает с сервлетами, но с Spring-MVC я закончил создание бесконечного цикла по какой-то причине, я не понимаю. В основном контроллер просто вызывается повторно. Я даже не знаю, как это возможно.Контроллер неоднократно вызывал себя в Spring-MVC

public ModelAndView handleRequest(
     HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
{ 
    System.out.println("I will get called infinitely"); 
    response.getWriter().print("Hello World!"); 
    response.getWriter().close(); 
    return new ModelAndView(); 

} 

Вопрос в том, знает ли кто-нибудь, почему это приведет к бесконечному количеству повторных запросов на эту страницу? Кажется, что это происходит только в том случае, когда я создаю ModelAndView(), где ничего нет. Но в этом случае я не хочу ничего в этом, просто пустую страницу. Итак, во-вторых, есть ли способ сделать это?

+0

Это зависит от того, что такое технология просмотра и как настроены ваши разрешения. это JSP? Вы вручную настроили любые разрешители вида в сервлет-диспетчере? – Affe

ответ

4

Попробуйте вернуть null, а не ModelAndView, и позвоните по номеру flush(), а не close(). Подобно этому,

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    System.out.println("I will get called infinitely"); 
    response.getWriter().print("Hello World!"); 
    response.getWriter().flush(); 
    return null;  
} 

Примечание: Я не уверен, будет ли close() совершить response или нет, но flush() воли.

+0

Это работает отлично! Благодаря! –

1

Возможно, пустой объект ViewName класса ModelAndView приведет к использованию представления из текущего запроса.

Вы можете использовать void или @ResponseBody String в качестве типа возврата.

Смежные вопросы