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的請求可以在瀏覽器的控制檯上看響應狀態