2014-09-21 2 views
0

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

Итак, у меня есть приложение Spring MVC, которое я пытаюсь наметить с помощью аннотаций, и хотя для некоторых запросов он отлично работает, для других я получаю 404 даже после вызова контроллера.

Итак, вот моя установка ...

web.xml:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 
<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/log4j.properties</param-value> 
</context-param> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 

<filter> 
    <filter-name>sitemesh</filter-name> 
    <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>sitemesh</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>requiredVariableFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>targetBeanName</param-name> 
     <param-value>requiredVariableFilter</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>requiredVariableFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 

<servlet> 
    <servlet-name>appServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>appServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Мои appServlet-servlet.xml:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 

Мой контроллер. Это довольно просто сейчас:

@Controller 
@RequestMapping("/user") 
public class UserController { 

    static Logger log = Logger.getLogger(UserController.class); 

    @Autowired 
    private UserService userService; 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView getBaseUserInfo(HttpServletRequest request, HttpServletResponse response) { 
     log.info("got into the user controller"); 
     ModelAndView mav = new ModelAndView("user/baseinfo"); 

     User user = this.userService.getCurrentUser(); 

     mav.addObject("user", user); 
     log.info("passing off to view"); 
     return mav; 
    } 
} 

Я могу заверить вас, что у меня есть соответствующие JSP в /WEB-INF/pages/user/baseinfo.jsp, так что это не то, что JSP не существует.

Кроме того, мое ведение журнала показывает, что сообщения журнала в контроллере запускаются, поэтому он доходит до того, что возвращает вид, а затем Tomcat дает мне оху-довольно 404 страницу, и мои журналы говорят только, что/пользователь возвращает 404.

в качестве альтернативы, однако, у меня есть еще один контроллер, который работает прекрасно здесь:

@Controller 
public class BaseController { 

    static Logger log = Logger.getLogger(BaseController.class); 

    @Autowired 
    private UserService userService; 

    @Autowired 
    private MailChimpService mailChimpService; 

    @RequestMapping(value="/", method=RequestMethod.GET) 
    public ModelAndView getHomePage(HttpServletRequest request, HttpServletResponse response) { 
     ModelAndView mav = new ModelAndView("index"); 

     User user = this.userService.getCurrentUser(); 
     mav.addObject("welcomeMessage", "Hey There!"); 

     if(user != null) { 
      mav.addObject("user", user); 
     } 

     mav.addObject("newsBlasts", this.mailChimpService.getEmailBlasts()); 
     return mav; 
    } 

    @RequestMapping(value="/login") 
    public ModelAndView getLoginPage (HttpServletRequest request, 
      HttpServletResponse response, 
      @RequestParam(value="error", required=false, defaultValue=StringUtils.EMPTY) String error) { 
     ModelAndView mav = new ModelAndView("login"); 

     SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); 

     if(StringUtils.isNotEmpty(error)) { 
      mav.addObject("badLogin", true); 
     } 
     mav.addObject("returnUrl", savedRequest.getRedirectUrl()); 
     return mav; 
    } 
} 

Оба методов этого возвращения контроллера прекрасно и sitemeshed вверх и все, что с не проблемы. Я пробовал много разных предложений, которые я видел на этом сайте, и пока ничего похожего не делает трюк.

Единственная разница между тем, как я обрабатываю эти контроллеры, состоит в том, что первый из них в конечном итоге будет иметь вложенные @ RequestMapping, поэтому он будет обрабатывать что-либо под шаблоном/user (/ user/edit,/user/throwparty и т. Д.).), тогда как второй контроллер просто обрабатывает одноразовые URL-адреса, которые специально не привязаны к определенному набору функциональных возможностей (в данном случае домашняя страница и страница входа).

У кого-нибудь есть предложения?

+0

Не может быть проблема с sitemesh для обработки представлений в подкаталогах? –

+0

@SergeBallesta Я думал об этом, но когда я перемещаю файл обратно в тот же каталог, что и другие представления, он по-прежнему не работает там, поэтому я не думаю, что это так. Я также (просто чтобы проверить это) переместил мой index.jsp в папку/pages/user, изменил имя представления, и он работал как ожидалось (то есть, он работал). – RGThigpen

+1

Ну тогда похоже, что проблема в самом представлении ... Как она отличается от других (которые работают)? –

ответ

1

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

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