1. 程式人生 > >造成javax.servlet.ServletException: Could not resolve view with name的各種原因及解決方法

造成javax.servlet.ServletException: Could not resolve view with name的各種原因及解決方法

報錯完成資訊:

javax.servlet.ServletException: Could not resolve view with name '/lose/index' in servlet with name 'SpringMVC'

注:藍色部分根據你的實際情況而定

不管什麼原因:都是因為spring找不到解析的檢視檔案了

造成原因如下:

  1. IDEA預設設定WebRoot目錄錯誤導致
  2. 打包war釋出檔案路徑問題造成
  3. spring mvc解析檢視路徑問題
  4. 控制器程式碼返回檢視的路徑是否正確

解決方法如下,對應上面1 2 3 4點原因

1. IDEA預設設定WebRoot目錄錯誤導致

這個原因很好解決,只是針對IDEA使用使用者或者其他編輯工具使用使用者

如圖:

這樣就OK了

2. 打包war釋出檔案路徑問題造成

這個原因有點坑了,不仔細去觀察查詢根本就不容易發現,這樣就導致很多人在本地執行tomcat沒問題,一打包war部署到伺服器就報錯找不到檢視

如圖:

這是打包的war包,但是一執行起來我們看檢視檔案去哪兒了

而是給我生成到classes資料夾下去了(admin和lose都是我的view資料夾)

好了,看到是這樣導致的,那我們就可以吧這兩個資料夾複製出來到WEB-INF下的view資料夾下了,就解決了問題

3. spring mvc解析檢視路徑問題

spring mvc檢視解析路徑要確認正確,寫錯了路徑會找不到檢視,就會報錯(注:我用的不是jsp檢視模板,而是beetl,類似)

<bean id="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init">
    <property name="root" value="/WEB-INF/view"/>
</bean>
<bean id="viewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
	<property name="contentType" value="text/html;charset=UTF-8"/>
	<property name="suffix" value=".html"/>
</bean>

4. 控制器程式碼返回檢視的路徑是否正確

檢查返回檢視路徑是否正確,並且不加第3點配置的檢視字尾

@Controller
@RequestMapping("/admin/")
public class AdminController {
    @RequestMapping("index")
    String index(){
        return "/admin/index";//此處路徑是否正確?而且要結合第3點的配置來寫
    }
}