提示:ssm是一个整体不整合就达不到快速开发的效果,后期会有boot
boot本质就是封装SSM,实现快速开发
所以学习boot之前,ssm是基础哦
由于个人能力有限,终结篇并不是源码
目录
前言
此篇仅为个人初期学习笔记,如有错误,请xdm指正
你这么好看,还。。。。。。
1.概述
a>各个框架的作用
- SpringMVC:表述层框架,获取浏览器发送的请求,并响应浏览器
- MyBatis:持久层框架,操作数据库中的数据
- Spring:整合型框架,通过IOC管理对象,AOP实现事务操作
b>IOC容器
- Spring和SpringMVC整合
- 俩个各自使用各自的IOC容器,管理各自的组件
- SpringMVC容器管理控制层组件
- Spring管理其它组件
- 俩个IOC如何交互
- SpringMVC是子容器,Spring是父容器
- 子容器可以使用父容器中的bean,父容器不能使用子容器中的bean
c>IOC容器创建的顺序
-
先创建spring的,再创建springmvc的
-
Why?
-
自动装配是在获取ioc容器时完成的
-
而springmvc想实现自动往cotroller中装配service组件,此操作是在获取springmvc的ioc容器时完成的
-
然而controller和service是由spring的ioc来自动装配的
-
所以要保证二操作的执行,必须在之前就获取到service和从controller组件,才能实现在获取ioc容器时,自动装配
-
-
Spring中IOC容器创建时间
- 服务器三大组件:监听器、过滤器、Servlet
- springmvc的ioc容器是在servlet初始化方法时创建的,为了实现往controller中自动装配service,必须在这之前创建spring的ioc容器
- 所以spring创建ioc容器在监听器或者过滤器中
- 过滤器不适合,过滤器是用来过滤数据的
- 所以把创建spring的ioc容器的过程交给监听器
- Spring提供的监听器ContextLoaderListener
- 必须在web.xml进行配置
- 监听servletcontext的状态
- 在web服务器启动时,自动加载spring的配置文件,来创建ioc容器
-
SpringMVC中IOC容器创建时间
-
默认是在获取前端控制器时创建
-
而为了减低第一个用户的访问时间,把该操作提前到服务器启动时
-
-
2.整合步骤
整合思路:先搭建spring工程,在spring工程的基础上整合MyBatis和SpringMVC
a>导入依赖
<dependencies>
<!--spring核心jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.1</version>
</dependency>
<!--springmvc核心jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.1</version>
</dependency>
<!--引入spring的事务管理器,连接池用的是下面的Druid-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.1</version>
</dependency>
<!-- Mybatis核心jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--mybatis和spring的整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- ServletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--springmvc中处理json的依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<!--只是文件上传,文件下载不需要这个依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
b>创建数据库中的表
c>配置web.xml
-
相比springmvc的web.xml多配置了一个ContextLoaderListener监听器
-
作用:在服务器启动时,加载spring的配置文件,创建对象并且注入属性
<?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的编码过滤器--> <filter> <filter-name>CharacterEncodingFilter</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>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置处理请求方式为put和delete的过滤器--> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置springmvc的配置文件的名称和路径--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> <!--配置将前端控制器的初始化时间提前到服务器启动时--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--配置spring的监听器,在服务器启动时加载spring的配置文件--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> </web-app>
d>创建springmvc的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
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.nuesoft.ssm.controller"/>
<!--配置Thymeleaf视图解析器-->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!--视图前缀-->
<property name="prefix" value="/WEB-INF/templates"/>
<!--视图后缀-->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
</property>
</bean>
<!--配置默认的servlet处理静态资源-->
<!--解决啥?如果不配置,就会把静态页面的请求当作普通的控制台请求进行处理,导致找不到页面异常,报404-->
<!--开启了此功能之后,就会忽视掉控制层中其它所用的请求映射-->
<mvc:default-servlet-handler/>
<!--开启MVC注解驱动-->
<!--抵消上面注解中忽视所有请求映射的操作-->
<mvc:annotation-driven/>
<!--配置视图控制器-->
<!--处理那种仅仅是跳转页面的操作,不执行其它任何操作-->
<mvc:view-controller path="/" view-name="index"/>
<!--配置文件上传解析器,来实现上传文件-->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
<!--配置异常处理器,来处理异常-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"/>
</beans>
e>搭建MyBatis的环境
- properties配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=1234
- 创建mybatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--其它配置均不需要再写,在spring的配置文件中已经做了相关配置-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
f>创建log4j日志文件
`encoding=“UTF-8” ?>
<log4j:configuration xmlns:log4j=“http://jakarta.apache.org/log4j/”>`
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
3.总结
- Spring的IOC容器创建要先于SpringMVC的IOC容器
- SpringMVC扫描的是controller包,spring扫描其它包,分开管理组件
- 了解ContextLoderListener监听器的作用,在服务器启动时扫描spring的核心配置文件
- mbatis-config.xml被spring.xml给替代了