XML 方式搭建 Spring MVC 項目
1. 前言
本章節(jié)將和大家一起講解如何使用 XML 方式搭建 Spring MVC 項目。雖然現(xiàn)在的快速開發(fā)平臺越來越好用,零 XML 配置的理念逐漸流行,但還是有些項目組還在延用或習慣使用 XML 方式。
本節(jié)課的重點是你需要掌握使用 XML 配置的流程,最好和本系列的《純 JAVA 搭建 Spring MVC 項目》對比學習。
2. 前期準備
搭建 Spring MVC 項目,可以使用 JAVA 方式進行組件信息配置,也可以使用 XML 方式,甚至可以使用 JAVA 和 XML 的混合模式。
現(xiàn)在主流框架都流行使用 JAVA 方式(注解),逐步減少對 XML 方式的依賴。主要是 JAVA 方法更適合 JAVA 開發(fā)者的習慣,并簡化了配置過程。
Spring MVC 項目是基于 Spring 的核心基礎(chǔ)功能(IOC、AOP)之上的,Spring 建議 Spring MVC 項目中創(chuàng)建 2 個 WebApplication 對象(也稱為上下文容器對象)。這 2 個上下文對象分別依賴于 DispatcherServlet 和 ContextLoaderListener 組件完成創(chuàng)建。
- DispatcherServlet 是整個程序的調(diào)度中心(本質(zhì)就是一個 Servlet),Spring MVC 程序啟動時必須要初始化完成對 DispatcherServlet 組件的創(chuàng)建。此組件還會創(chuàng)建一個與自己有關(guān)聯(lián)的 WebApplication 工廠對象,即 Web 上下文對象;
- ContextLoaderListener 是由 Spring 提供的監(jiān)聽器組件,它可以監(jiān)聽程序的啟動過程,并在程序啟動時創(chuàng)建另一個 WebApplication 工廠對象,即 Root 上下文對象。
所以,必須配置好 DispatcherServlet 和 ContextLoaderListener ,保證程序啟動時創(chuàng)建它們。
使用 XML 配置之前,先準備好 3 個 XML 文件:
- web.xml: 理論上,在新建 Spring MVC WEB 項目時, WEB-INF 目錄中會自動創(chuàng)建這個文件。如果不存在,就需要創(chuàng)建一個;
- spring-mvc.xml: 由開發(fā)者新建,一般放在項目的 src/main/resources 目錄下面;
- application.xml: 由開發(fā)者新建,放在項目的 src/main/resources 目錄下面。
Tips: spring-mvc.xml 和 application.xml 的文件名可由開發(fā)者根據(jù)語義自行指定。這 2 個文件也可以根據(jù)需要更改存放目錄。 這 2 個 XML 文件中必須至少包括 beans 根元素說明。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> </beans>
3. 編輯 web.xml
- 打開 web.xml,在 web.xml 中配置 DispatcherServlet 組件相關(guān)的信息;
<!-- 配置 Spring MVC 的核心組件 DispatcherServlet -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
contextConfigLocation 是 DispatcherServlet 的屬性,用于指定與 DispatcherServlet 創(chuàng)建的上下文對象有關(guān)的配置文件的位置。此處為 spring-mvc.xml 文件位置。
Tips: 放在 src/main/resource 目錄中的文件,編譯后都會放入 classpath (字節(jié)碼目錄中)。
- 在 web.xml 中配置 ContextLoaderListener 監(jiān)聽器組件相關(guān)信息;
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
配置臨聽器時,也需要為臨聽器創(chuàng)建的上下文對象指定配置文件的位置,此處指 application.xml 文件的位置。
- 測試 web.xml 中的配置是否成功。發(fā)布項目,啟動 Tomcat 。查看 Tomcat 啟動時在控制臺中輸出的日志信息。
如果能夠看到上圖標注的信息,說明 Spring MVC 初始化成功。
4. 編輯 spring-mvc.xml
spring-mvc.xml 用來配置與 Spring MVC 相關(guān)的組件信息,用來提供給 web 上下文對象進行組件維護。這些組件包括 Spring MVC 核心組件和用戶控制器組件。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 啟動注解支持 -->
<mvc:annotation-driven/>
<!--靜態(tài)資源交給 tomcat default servelt 處理-->
<mvc:default-servlet-handler />
<!--掃描組件位置-->
<context:component-scan
base-package="com.mk.web.action"></context:component-scan>
<!-- 視圖解析器 -->
<mvc:view-resolvers>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</mvc:view-resolvers>
</beans>
元素解釋說明:
- mvc:annotation-driven: 啟動注解支持,完全使用 XML 進行 Spring MVC 項目維護,并不是很方便。即使在使用 XML 時,建議還是結(jié)合注解一起使用,這也是 Spring MVC 官方建議的;
- context:component-scan: 指定哪些組件由 Spring MVC 的上下文對象負責。除了 Spring MVC 內(nèi)部組件外,再就是用戶控制器;
- mvc:view-resolvers: 配置具體的視圖解析器。
Tips: 映射器、適配器等組件可以不用顯示配置,采用 Spring MVC 默認配置即可。
5. 編輯 application.xml
application.xml 是 Spring 上下文容器所關(guān)聯(lián)的配置文件,可稱其為全局上下文對象的關(guān)聯(lián)配置文件。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config></context:annotation-config>
<context:component-scan
base-package="com.mk.web">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
</beans>
元素解釋說明:
- context:annotation-config: 啟動注解支持,建議需要全局上下文對象創(chuàng)建、維護的對象使用注解的方式;
- context:component-scan: 掃描位置,需要排除開 Spring MVC 容器對象掃描的位置。
Tips: application.xml 文件中一般用來配置業(yè)務層邏輯組件、數(shù)據(jù)層邏輯組件、通用組件、第三方組件相關(guān)的信息。
6. 測試
在項目的 WEB-INF 目錄下新建 jsp 子目錄,在此子目錄中新建 htllo.jsp 文件,內(nèi)容可任意填寫。
編寫控制器實例:
@Controller
public class HelloAction implements org.springframework.web.servlet.mvc.Controller {
@RequestMapping("/hello")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("Bean URL ");
return “hello”;
}
}
發(fā)布項目、啟動 tomcat、打開瀏覽器。
在瀏覽器的地址欄中輸入:http://localhost:8888/sm-demo/hello 。如果在瀏覽器中看到下圖信息,則恭喜 Spring MVC 項目的基礎(chǔ)平臺搭建完成。
7. 小結(jié)
本章節(jié)講解了如何使用 XML 方式搭建 Spring MVC 項目,雖然現(xiàn)在流行使用 JAVA 方式,但 XML 仍然是一個不錯的選擇。
無論是使用 XML 還是 JAVA 方式,其本質(zhì)是一樣的,只是使用了不同的語法方式進行表達。這相當于有人用英文或中文對你說 “我愛你”。當然,你需要了解英文或中文。對于 Spring MVC 而言,對 XML 和 JAVA 的理解是無障礙的。也意味著你可以隨心選擇 JAVA 或 XML 方式。