springmvc不進入Controller導致404


一.摘要

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/>


如果有書寫錯誤的地方,或者是有問題的地方請及時評論或者是私信,只要我看到就一定會回復,

以免誤導個別萌新。

雖然,我也是個萌新。


你好,我叫呂小布。










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM