2014-09-21 81 views
0

如果在其他地方回答這個問題,我很抱歉,但是網站的一些大範圍的搜索功能到目前爲止沒有提供任何幫助,所以我會在這裏問一下。因此,我有一個Spring MVC應用程序,我試圖使用註釋映射出來,雖然對於某些請求,它可以正常工作,對於其他人,即使在控制器被調用後,我也可以獲得404的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處理子目錄中的意見問題? – 2014-09-21 21:32:07

+0

@SergeBallesta我想到了這一點,但是當我將文件移回與其他視圖相同的目錄時,它仍然無法在那裏工作,所以我不認爲是這樣。我也(只是爲了測試這個)將我的index.jsp移動到/ pages/user文件夾中,改變了視圖名稱,它按預期工作(也就是說,它工作)。 – RGThigpen 2014-09-22 04:05:43

+1

那麼它看起來像問題是在視圖本身...它與其他人(哪些工作)有什麼不同? – 2014-09-22 05:33:10

回答

1

錯誤發生在視圖本身。不得不添加一個錯誤頁面來查看例外情況,但是一旦我做了,就能夠弄清楚這一點。

相關問題