一.摘要
emmmm..
對springmvc不太熟練的情況下,如果不出意外的話,項目啟動后出現404頁面是很煩人。
在這里,我記錄一下可能會導致出現這種情況的原因<因為之前的文章結構不算是很清晰,所以這次做一些修改>
二.出現404的分類以及會導致的原因
1.啟動項目后,訪問項目無法進入主頁,從而出現404;
2.1.1.查看項目是否啟動成功;
2.1.2.確認項目地址的正確性;
2.1.3.作為項目主頁的html頁面應該放到工程的WebContent的根目錄下;
2.項目啟動並且成功進入主頁后,主頁上一些通過controller層跳轉的操作無法找到網頁,導致404;
2.2.1. 相關操作訪問路徑是否正確;
2.2.2. Controller層是否被標注為@Controller組件
2.2.3. 是否配置了對@Controller標簽的支持:<mvc:annotation-driven />
2.2.4. 是否正確配置了對Controller層的掃描:<context:component-scan base-package="controller">
2.2.5. 檢查web.xml中的相關配置是否正確
1.是否配置了spring的監聽,以及正確加載spring相關配置文件
2.是否正確加載springmvc的配置文件
三.分情況詳細說明
3.1.先附上並簡單介紹一下我的工程結構目錄圖:
簡單介紹一下applicationContext-*為什么會有三個:
applicationContext-dao: 里面配置了數據源,以及對mybatis的相關支持<注意我的項目是ssm>
applicationContext-service:里面配置了事務管理
applicationContext-trans: 配置了對Service層的掃描
如果沒有對Service層的掃描,就無法使用到@Service標注的組件,從而導致Controller中的出現空指針情況。
emmm,,,稍微考慮一下,我決定把applicationContext-trans的配置截圖附上:
你看把,真的是只配置了對Service層注解的掃描
3.2.啟動項目后,訪問項目無法進入主頁,從而出現404
3.2.1. 查看項目是否啟動成功;
略<sorry,沒什么可說的>
3.2.2.確認項目地址的正確性;
略
3.2.3.作為項目主頁的html頁面應該放到工程的WebContent的根目錄下;
這一點還是需要補充的,因為可能會附上大量貼圖,所以我把這個抽出來另寫一片博客:
<如果你看到這句話,說明抽出來的這篇博客還沒寫>
3.3.主頁發出請求后,出現404;
3.3.1.相關操作訪問路徑是否正確;
檢查包括:
①. 頁面的請求路徑
②. Controller層的路徑
③. web.xml是否配置了對前端請求的攔截路徑<怎么這么多情況....>
截個圖,給個案例:
①. index.jsp如下
②. Controller如下
多說一句:
如果你喜歡在類名上(也就是@Controller下)也添加一個@RequestMapping(),
那么在類里面的子@RequetMapping注解中的路徑是不能再有/的。
<我記得我之前試過,如果說的不對,或者是有人沒看懂,就當我沒說>
③. 前端攔截器:
注意攔截路徑:
/表示攔截一切路徑,不能是/*
(如果你要問為什么,抱歉,人家這么規定我也無能為力)
3.3.2.Controller層是否被標注為@Controller組件
顧名思義,略
3.3.3.是否配置了對@Controller標簽的支持:<mvc:annotation-driven />
①. 該配置我配置在了springmvc-config.xml文件中,在下面講解合適的時候我會附上代碼截圖
<為什么老是截圖?因為我願意...>
②. 什么是<mvc:annotation-driven/>
相當於注冊了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter兩個bean,配置一些messageconverter。
簡單來說就是: 提供了使用並且能夠識別@Controller注解的前提.
3.3.4.是否正確配置了對Controller層的掃描:<context:component-scan base-package=" ">
①. 既然上面配置了對@Controller的支持,現在就需要配置對@Controller的掃描
值得注意的是(比如在我的demo里),
base-package="controller",而不是bask-package="controller.*";
②. 現在,附上springmvc-config的代碼截圖:
3.3.5.檢查web.xml中的相關配置是否正確
注意:我的配置文件在一個資源文件夾下,具體路徑還請根據自己的結構目錄來配置
①. 是否配置了spring的監聽,以及正確加載spring相關配置文件
<param-name />標簽:contextConfigLocation是固定的;
<param-value />標簽:加載spring配置文件(注意路徑問題)
②. 是否正確加載springmvc的配置文件
先解釋<servlet />標簽中的內容
<servlet>
<servlet-name />:先不說,會在下面(緊挨<init-param />)解釋
<servlet-class />:springmvc的核心,可以理解為對spirngmvc的支持,固定非修改
<init-param>:可以理解為對springmvc的初始化,即為springmvc指定需要加載的xml配置
<param-name />:固定非修改
<param-value />:加載springmvc配置文件(具體根據自己的結構目錄配置)
<init-param/>
<servlet/>
<servlet-name />:將加載到的springmvc.xml文件起一個別名
<servlet-mapping>
<servlet-name />:
與上面的servlet-name標簽保持一致,表示對上面的springmvc.xml做mapping配置
<url-patter />: 配置前端攔截器路徑。
攔截器路徑的配置方式包括: *.do 、*.action 、/
意思是分別:攔截以do、action、任意后綴或者是無后綴的前端請求
<servlet-mapping/>
如果有書寫錯誤的地方,或者是有問題的地方請及時評論或者是私信,只要我看到就一定會回復,
以免誤導個別萌新。
雖然,我也是個萌新。
你好,我叫呂小布。