XML 方式搭建 Spring MVC 项目
1. 前言
本章节将和大家一起讲解如何使用 XML 方式搭建 Spring MVC 项目。虽然现在的快速开发平台越来越好用,零 XML 配置的理念逐渐流行,但还是有些项目组还在延用或习惯使用 XML 方式。
本节课的重点是你需要掌握使用
XML
配置的流程,最好和本系列的《纯 JAVA 搭建 Spring MVC 项目》对比学习。
2. 前期准备
搭建 Spring MVC 项目,可以使用 JAVA 方式进行组件信息配置,也可以使用 XML 方式,甚至可以使用 JAVA 和 XML 的混合模式。
现在主流框架都流行使用 JAVA 方式(注解),逐步减少对 XML 方式的依赖。主要是 JAVA 方法更适合 JAVA 开发者的习惯,并简化了配置过程。
Spring MVC 项目是基于 Spring 的核心基础功能(IOC、AOP)之上的,Spring 建议 Spring MVC 项目中创建 2 个 WebApplication 对象(也称为上下文容器对象)。这 2 个上下文对象分别依赖于
DispatcherServlet
和
ContextLoaderListener
组件完成创建。
DispatcherServlet
是整个程序的调度中心(本质就是一个 Servlet),
Spring MVC
程序启动时必须要初始化完成对
DispatcherServlet
组件的创建。此组件还会创建一个与自己有关联的
WebApplication
工厂对象,即
Web 上下文对象
;
ContextLoaderListener
是由
Spring
提供的监听器组件,它可以监听程序的启动过程,并在程序启动时创建另一个
WebApplication
工厂对象,即
Root 上下文对象
。
所以,必须配置好
DispatcherServlet
和
ContextLoaderListener
,保证程序启动时创建它们。
使用 XML 配置之前,先准备好 3 个 XML 文件:
web.xml:
理论上,在新建 Spring MVC WEB 项目时, WEB-INF 目录中会自动创建这个文件。如果不存在,就需要创建一个;
spring-mvc.xml:
由开发者新建,一般放在项目的 src/main/resources 目录下面;
application.xml:
由开发者新建,放在项目的 src/main/resources 目录下面。
Tips:
spring-mvc.xml 和 application.xml 的文件名可由开发者根据语义自行指定。这 2 个文件也可以根据需要更改存放目录。 这 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
组件相关的信息;
<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 创建的上下文对象有关的配置文件的位置。此处为
spring-mvc.xml
文件位置。
Tips:
放在 src/main/resource 目录中的文件,编译后都会放入 classpath (字节码目录中)。
在 web.xml 中配置
ContextLoaderListener
监听器组件相关信息;
<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>
配置临听器时,也需要为临听器创建的上下文对象指定配置文件的位置,此处指 application.xml 文件的位置。
测试 web.xml 中的配置是否成功。发布项目,启动 Tomcat 。查看 Tomcat 启动时在控制台中输出的日志信息。
如果能够看到上图标注的信息,说明 Spring MVC 初始化成功。
4. 编辑 spring-mvc.xml
spring-mvc.xml
用来配置与
Spring MVC
相关的组件信息,用来提供给 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/>
<mvc:default-servlet-handler />
<context:component-scan
base-package="com.mk.web.action"></context:component-scan>
<mvc:view-resolvers>
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 时,建议还是结合注解一起使用,这也是 Spring MVC 官方建议的;
context:component-scan:
指定哪些组件由 Spring MVC 的上下文对象负责。除了 Spring MVC 内部组件外,再就是用户控制器;
mvc:view-resolvers:
配置具体的视图解析器。
Tips:
映射器、适配器等组件可以不用显示配置,采用 Spring MVC 默认配置即可。
5. 编辑 application.xml
application.xml
是 Spring 上下文容器所关联的配置文件,可称其为全局上下文对象的关联配置文件。
<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:
启动注解支持,建议需要全局上下文对象创建、维护的对象使用注解的方式;
context:component-scan:
扫描位置,需要排除开 Spring MVC 容器对象扫描的位置。
Tips:
application.xml 文件中一般用来配置业务层逻辑组件、数据层逻辑组件、通用组件、第三方组件相关的信息。
6. 测试
在项目的
WEB-INF
目录下新建
jsp
子目录,在此子目录中新建
htllo.jsp
文件,内容可任意填写。
@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”;
7. 小结
本章节讲解了如何使用 XML 方式搭建 Spring MVC 项目,虽然现在流行使用 JAVA 方式,但 XML 仍然是一个不错的选择。
无论是使用 XML 还是 JAVA 方式,其本质是一样的,只是使用了不同的语法方式进行表达。这相当于有人用英文或中文对你说 “我爱你”。当然,你需要了解英文或中文。对于 Spring MVC 而言,对 XML 和 JAVA 的理解是无障碍的。也意味着你可以随心选择 JAVA 或 XML 方式。