【Spring篇】SSM框架整合

提示:ssm是一个整体不整合就达不到快速开发的效果,后期会有boot
boot本质就是封装SSM,实现快速开发
所以学习boot之前,ssm是基础哦
由于个人能力有限,终结篇并不是源码


前言

此篇仅为个人初期学习笔记,如有错误,请xdm指正
你这么好看,还。。。。。。

1.概述

a>各个框架的作用

  • SpringMVC:表述层框架,获取浏览器发送的请求,并响应浏览器
  • MyBatis:持久层框架,操作数据库中的数据
  • Spring:整合型框架,通过IOC管理对象,AOP实现事务操作

b>IOC容器

  1. Spring和SpringMVC整合
    • 俩个各自使用各自的IOC容器,管理各自的组件
    • SpringMVC容器管理控制层组件
    • Spring管理其它组件
  2. 俩个IOC如何交互
    • SpringMVC是子容器,Spring是父容器
    • 子容器可以使用父容器中的bean,父容器不能使用子容器中的bean

c>IOC容器创建的顺序

  1. 先创建spring的,再创建springmvc的

    1. Why?

      • 自动装配是在获取ioc容器时完成的

      • 而springmvc想实现自动往cotroller中装配service组件,此操作是在获取springmvc的ioc容器时完成的

      • 然而controller和service是由spring的ioc来自动装配的

      • 所以要保证二操作的执行,必须在之前就获取到service和从controller组件,才能实现在获取ioc容器时,自动装配

    2. Spring中IOC容器创建时间

      • 服务器三大组件:监听器、过滤器、Servlet
      • springmvc的ioc容器是在servlet初始化方法时创建的,为了实现往controller中自动装配service,必须在这之前创建spring的ioc容器
      • 所以spring创建ioc容器在监听器或者过滤器中
      • 过滤器不适合,过滤器是用来过滤数据的
      • 所以把创建spring的ioc容器的过程交给监听器
      • Spring提供的监听器ContextLoaderListener
        • 必须在web.xml进行配置
        • 监听servletcontext的状态
        • 在web服务器启动时,自动加载spring的配置文件,来创建ioc容器
    3. 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的环境

  1. properties配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=1234
  1. 创建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.总结

  1. Spring的IOC容器创建要先于SpringMVC的IOC容器
  2. SpringMVC扫描的是controller包,spring扫描其它包,分开管理组件
  3. 了解ContextLoderListener监听器的作用,在服务器启动时扫描spring的核心配置文件
  4. mbatis-config.xml被spring.xml给替代了
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小B学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值