SSM整合
SSM整合的意义
什么是整合
通过Spring IoC容器管理第三方框架对象,让多框架形成整体。
Spring/Spring MVC/MyBatis是业内最主流的框架搭配。
SSM配置与使用是所有Java工程师必须掌握的技能。
SSM整合三阶段
Spring与Spring MVC环境配置
Spring与MyBatis的整合配置
整合其他组件:声明式事务/日志/任务调度/…
Spring与Spring MVC环境配置
创建web工程
首先创建一个maven工程
然后进行web应用的配置,点击菜单File=>Project Structure,然后在在设置面板选择Modules,增加web应用
然后创建测试页面index.html
在Tomcat发布项目
配置完点击OK在在右上角启动Tomcat,在浏览器中访问http://localhost:8080/
依赖spring-webmvc
打开pom.xml文件,引入spring-webmvc及其他依赖
<?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.ql</groupId>
<artifactId>ssm-reader</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!--Freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!--Jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</project>
引入完依赖,需要手动发布依赖包,选择菜单File=>Project Structure,选择好依赖jar包右键选择Put into/WEB-INF/lib然后点击OK。
配置DispatcherServlet
打开web.xml文件添加配置
<?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_3_1.xsd"
version="3.1">
<!--配置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:applicationContext*.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>
</web-app>
启用Spring MVC注解模式
在src/main/resources目录下创建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.ql"/>
<!--启用Spring MVC的注解开发模式-->
<mvc:annotation-driven/>
<!--将图片/JS/CSS等静态资源排除在外,可提高执行效率-->
<mvc:default-servlet-handler/>
</beans>
配置请求与响应字符集及JSON序列化输出配置
解决请求中的中文乱码,在web.xml中配置
<!--解决请求中的中文乱码(只会对POST请求生效,GET请求需要在Tomcat配置文件server.xml中增加URIEncoding="UTF-8",
但是Tomcat8.x后默认GET请求就是按照UTF-8进行转换的,所以不需要配置)-->
<filter>
<filter-name>characterFilter</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>
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
解决响应中的中文乱码,打开applicationContext.xml修改mvc:annotation-driven标签内容
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!--response.setContentType("text/html;charset=utf-8")-->
<value>text/html;charset=utf-8</value>
<!--JSON序列化输出配置--><value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
配置FreeMarker模板引擎
打开applicationContext.xml添加配置
<bean id="ViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<!--视图解析器将数据和模板引擎结合所产生的新的html片段,向响应输出时设置它的contentType,
这跟上面配置的场景不同,上面是在没有模板引擎的时候的响应配置-->
<property name="contentType" value="text/html;charset=utf-8"/>
<property name="suffix" value=".ftl"/>
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl"/>
<property name="freemarkerSettings">
<props>
<!--在freemarker读取ftl文件时,采用UTF-8编码-->
<prop key="defaultEncoding">UTF-8</prop>
</props>
</property>
</bean>
在src/main/webapp/WEB-INF/ftl目录下创建测试页面test.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
测试页面
</body>
</html>
然后在com.ql.reader.controller包下创建类TestController.java
package com.ql.reader.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.Map;
@Controller
public class TestController {
@GetMapping("/test/t1")
public ModelAndView test1(){
return new ModelAndView("/test");
}
@GetMapping("/test/t2")
@ResponseBody
public Map test2(){
Map map = new HashMap();
map.put("test", "测试文本");
return map;
}
}
然后启动项目,在浏览器中输入http://localhost:8080/test/t1和http://localhost:8080/test/t2分别测试