項(xiàng)目:primary
完成功能:用戶提交一個(gè)請(qǐng)求,服務(wù)端處理器在接收到這個(gè)請(qǐng)求后,給出一條歡迎信息,在響應(yīng)頁(yè)面中顯示該信息。
在創(chuàng)建好 web 項(xiàng)目后,首先要導(dǎo)入 Jar 包。SpringMVC 需要的基本 Jar 包,是在原 Spring的 Jar 包基礎(chǔ)上(四個(gè)核心 jar, 日志 jar,spring-aop.jar,spring-web.jar),增加 springmvc 框架的實(shí)現(xiàn)包:spring-webmvc.jar
該中央調(diào)度器為一個(gè) Servlet,名稱為 DispatcherServlet。中央調(diào)度器的全限定性類(lèi)名在導(dǎo)入的 Jar 文件 spring-webmvc-4.3.9.RELEASE.jar 的第一個(gè)包 org.springframework.web.servlet下可找到。
在<servlet/>中添加<Load-on-startup/>的作用是,,標(biāo)記是否在Web服務(wù)器(這里是Tomcat) 啟動(dòng)時(shí)會(huì)創(chuàng)建這個(gè) Servlet 實(shí)例,即是否在 Web 服務(wù)器啟動(dòng)時(shí)調(diào)用執(zhí)行該 Servlet 的 init()方法,而不是在真正訪問(wèn)時(shí)才創(chuàng)建。它的值必須是一個(gè)整數(shù)。
● 當(dāng)值大于等于 0 時(shí),表示容器在啟動(dòng)時(shí)就加載并初始化這個(gè) servlet,數(shù)值越小,該 Servlet的優(yōu)先級(jí)就越高,其被創(chuàng)建的也就越早;
● 當(dāng)值小于 0 或者沒(méi)有指定時(shí),則表示該 Servlet 在真正被使用時(shí)才會(huì)去創(chuàng)建。
● 當(dāng)值相同時(shí),容器會(huì)自己選擇創(chuàng)建順序。
對(duì)于<url-pattern/>,可以寫(xiě)為 / ,建議寫(xiě)為*.do 的形式。詳見(jiàn) 1.4 再解<url-pattern/>。
注冊(cè)完畢后,可直接在服務(wù)器上發(fā)布運(yùn)行。此時(shí),默認(rèn)瀏覽器頁(yè)面,及 MyEclipse 控制臺(tái)均會(huì)拋出 FileNotFoundException 異常。即默認(rèn)要從項(xiàng)目根下的 WEB-INF 目錄下找名稱為Servlet 名稱-servlet.xml 的配置文件。這里的“Servlet 名稱”指的是注冊(cè)中央調(diào)度器時(shí) 標(biāo)簽中指定的 Servlet 的 name 值。本例配置文件名為 springmvc-servlet.xml。
從 DispatcherServlet 類(lèi)的父類(lèi)的源碼注釋 FrameworkServlet 中也可看到相關(guān)描述:
而一般情況下,該配置文件是放在類(lèi)路徑下,即 src 目錄下。所以,在注冊(cè)中央調(diào)度器時(shí),還需要為中央調(diào)度器設(shè)置查找 SpringMVC 配置文件路徑,及文件名。
打開(kāi) DispatcherServlet 的源碼,其繼承自 FrameworkServlet,而該類(lèi)中有一個(gè)屬性contextConfigLocation,用于設(shè)置 SpringMVC 配置文件的路徑及文件名。該初始化參數(shù)的屬性就來(lái)自于這里。
在工程的類(lèi)路徑即 src 目錄下創(chuàng)建 SpringMVC 的配置文件 springmvc.xml。該文件名可以任意命名。而該 xml 文件的約束,則使用 Spring 配置文件最全約束。
該處理器需要實(shí)現(xiàn) Controller 接口。
ModelAndView 類(lèi)中的 addObject()方法用于向其 Model 中添加數(shù)據(jù)。Model 的底層為一個(gè) HashMap。
Model 中的數(shù)據(jù)存儲(chǔ)在 request 作用域中,SringMVC 默認(rèn)采用轉(zhuǎn)發(fā)的方式跳轉(zhuǎn)到視圖,本次請(qǐng)求結(jié)束,模型中的數(shù)據(jù)被銷(xiāo)毀。
在 springmvc.xml 中注冊(cè)處理器。不過(guò),需要注意處理器的 id 屬性值為一個(gè)請(qǐng)求 URI。表示當(dāng)客戶端提交該請(qǐng)求時(shí),會(huì)訪問(wèn) class 指定的這個(gè)處理器。
在 WEB-INF 目錄下新建一個(gè)子目錄 jsp,在其中新建一個(gè) jsp 頁(yè)面 show.jsp。
SpringMVC 框架為了避免對(duì)于請(qǐng)求資源路徑與擴(kuò)展名上的冗余,在視圖解析器 InternalResouceViewResolver 中引入了請(qǐng)求的前輟與后輟。而 ModelAndView 中只需給出要跳轉(zhuǎn)頁(yè)面的文件名即可,對(duì)于具體的文件路徑與文件擴(kuò)展名,視圖解析器會(huì)自動(dòng)完成拼接。