1. 程式人生 > >springMVC中404可能出現的原因

springMVC中404可能出現的原因

1. 如果tomcat啟動正常的話,就檢查springMVC的配置,如果tomcat啟動 都報錯,就找原因去吧。

2. 地址不正確或沒有響應

1) 檢查Controller類上是否有@Controller註解。@RequestMapping加了沒有,是不是在類上面加了父路徑了?

2) 檢查SpringMVC的配置檔案是否掃描了Controller所在的包

1. 如果tomcat啟動正常的話,就檢查springMVC的配置,如果tomcat啟動 都報錯,就找原因去吧。

2. 地址不正確或沒有響應

1) 檢查Controller類上是否有@Controller註解。@RequestMapping加了沒有,是不是在類上面加了父路徑了?

2) 檢查SpringMVC的配置檔案是否掃描了Controller所在的包

3) 相對路徑的問題

如果controller中返回的是index.jsp,那麼SpringMVC就會再後面再追加一個.jsp,變成index.jsp.jsp導致頁面找不到。

@Controller  
@RequestMapping("/aa")  
public class MYController {  
    @RequestMapping("/blog.html")  
    public String page() {  
        return "index.jsp";  
    }  
} 

這段程式碼會到webapp下找/aa/index.jsp這個檔案,因為controller上有父路徑。如果返回值前面加上/

@Controller  
@RequestMapping("/aa")  
public class MYController {  
    @RequestMapping("/blog.html")  
    public String page() {  
        return "/index.jsp";  
    }  
} 
上面這個程式碼就會去webapp下找index.jsp了,因為多了一個/就是相對於根路徑了

4)檢視檢視解析器是否配置正確

    @RequestMapping("/blog.html")  
    public String page(){  
    return "index.jsp";  
    }  

另外檢視解析器的prefix是字首,這段程式碼加上檢視解析器後,執行結果是返回/page/index.jsp。檢視一下webapp目錄下是否有這個頁面,路徑是否正確。

404的時候控制檯不會報錯,但是log4j可以看到執行的過程:

2018-01-06 13:55:29,773 DEBUG [org.springframework.web.servlet.view.JstlView] -Forwarding to resource [/page/index.jsp] in InternalResourceView 'index'
2018-01-06 13:55:29,781 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Successfully completed request

一般情況如果Controller的類上加了@ResuqstMapping("/aa") 如果controller中的方法返回的檢視地址前面沒加/的話,就會是相對於aa的路徑

5) ajax的請求響應是404

ajax一般要求返回的是json,看一下controller的方法上有沒有加@ResponseBody註解

springMVC的配置檔案中是否配置了json轉換器

<!--配置返回值轉換器-->  
    <bean id="contentNegotiationManagerFactoryBean"  
          class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">  
        <property name="favorPathExtension" value="false"/>  
        <property name="favorParameter" value="false"/>  
        <property name="ignoreAcceptHeader" value="false"/>  
        <property name="mediaTypes">  
            <map>  
                <entry key="json" value="application/json"/>  
            </map>  
        </property>  
    </bean>
配置成功後需要啟用它:
    <mvc:annotation-driven content-negotiation-manager="contentNegotiationManagerFactoryBean"/>  

記得要導json的相關jar包,ajax的請求可以在瀏覽器的控制檯上看響應狀態