集成Spring和Spring MVC
创建了一个基本的 maven web项目,这一节要为这个项目集成Spring。
为了方便控制层的开发还会集成最流行的Spring MVC。集成Spring和Spring MVC的步骤如下。
添加Spring项目清单用于管理Spring依赖
在pom.xml文件中的dependencies后面添加如下配置。
spring-framework-bom 是 Spring 的一个项目清单文件,由于集成 Spring 时需要添加很多Spring 组件的依赖,为了避免使用不同版本的组件导致意外情况发生,可以使用spring-framework-bom。添加spring-framework-bom后,在使用Spring依赖时就不需要再配置每个依赖的版本号了,Spring 组件的版本由 spring-framework-bom 统一管理。这不仅可以避免版本混乱引起的问题,还可以很方便地升级Spring的版本。
添加Spring依赖
在pom.xml文件的dependencies中添加如下依赖。
添加Spring MVC依赖
在pom.xml文件的dependencies中添加如下依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.shimpking</groupId>
<artifactId>mybatis-03</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 清单管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.3.10.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- spring上下文,核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!-- spring事务 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<!-- spring面向切面 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<!-- aop依赖 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
<!-- spring web 核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- spring mvc-json依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.4</version>
</dependency>
<!-- -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.0.1</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
</project>
添加Spring XML配置文件
在src/main/resources中新增applicationContext.xml文件,内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 包扫描 -->
<context:component-scan base-package="com.shrimpking.service.impl"/>
<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeZone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</bean>
<import resource="mybatis-servlet.xml"/>
</beans>
代码中的第一个component-scan用于配置Spring自动扫描类,通过base-package属性来设置要扫描的包名。包名支持Ant通配符,包名中的*匹配0或者任意数量的字符,这里的配置可以匹配如com.shirmpking.web.service.impl和com.shrimpking.simple.service.impl这样的包。
第二个bean配置了一个数据库连接池,使用了最基本的4项属性进行配置。
添加Spring MVC的配置文件
在src/main/resources中新增mybatis-servlet.xml文件,内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--启用controller注解支持-->
<mvc:annotation-driven/>
<!-- 映射静态资源 -->
<mvc:resources mapping="/static/**" location="static/"/>
<!-- 包扫描 -->
<context:component-scan base-package="com.shrimpking.controller"/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
这是一个最简单的配置,各项配置简单说明如下。·
mvc:annotation-driven启用Controller注解支持。·
mvc:resources配置了一个简单的静态资源映射规则。·
context:component-scan扫描controller包下的类。·
InternalResourceViewResolver将视图名映射为URL文件。
配置web.xml
集成Spring和Spring MVC后,需要在web.xml中进行相应的配置。对于Spring来说,需要增加如下配置。
这个配置用于在Web容器启动时根据contextConfigLocation配置的路径读取Spring的配置文件,然后启动Spring。针对Spring MVC,需要增加如下配置。
为了避免编码不一致,通常还需要增加如下的编码过滤器配置。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--spring 配置文件在哪里-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mybtis</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mybatis-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mybtis</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>springEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>springEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
增加一个简单的Controller示例
将index.jsp移动到web/WEB-INF/view目录中。增加com.shirmpking.controller包,然后新建IndexController类,该类代码如下。
package com.shrimpking.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/6/11 21:43
*/
@Controller
public class IndexController
{
@RequestMapping("/index")
public ModelAndView dicts()
{
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("now",new Date());
modelAndView.setViewName("index");
return modelAndView;
}
}
再对index.jsp页面中的body部分做如下修改。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--
Created by IntelliJ IDEA.
User: user1
Date: 2023/6/11
Time: 21:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<p>
Hello spring mvc!
</p>
<p>
服务器时间:<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>
</p>
</body>
</html>
经过以上这么多步的操作后,基本的Spring和Spring MVC就集成完了。
重启Tomcat然后访问地址http://localhost:8089/index,浏览器就会显示如下内容。
Hello Spring MVC!