SSM整合

简介: SSM整合

一、引入SSM框架依赖

    <packaging>war</packaging>
    <dependencies>
        <!--服务器支持-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.4.1</version>
        </dependency>
        <!-- 注解 -->
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--spring核心依赖+springmvc全部依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.13</version>
        </dependency>
        <!--spring事务管理-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.13</version>
        </dependency>
        <!--实现面向切面功能-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.8</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--数据库连接-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <!--数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mybatis整合spring-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
        <!--jstl表达式-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <!--json格式转换-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.1</version>
        </dependency>
        <!--数据验证-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.0.Final</version>
        </dependency>
        <!--日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--简化实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <!--分页查询-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.3.0</version>
        </dependency>
        <!--thymeleaf模板-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.11.RELEASE</version>
        </dependency>
    </dependencies>

二、SSM框架搭建

1、创建maven项目

2、在pom.xml文件中添加依赖。

需要注意的是pom文件打包方式为war。

3、在main根目录下创建webapp目录

1、在webapp根目录下创建WEB-INF目录

2、在WEB-INF根目录下创建views目录

views目录是用来存放视图文件(jsp或者是html文件)的,存放在该目录下的jsp文件是不能直接访问的需要在通过转发或者重定向的方式访问,也就是需要通过访问controller来访问。

3、在WEB-INF根目录下创建web.xml配置文件

该配置文件是SSM程序的入口,通过该配置文件程序能读取到spring和springmvc的配置文件。也就是需要在服务器启动的时候加载这两个配置文件。

<?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">
    <!--配置前端控制器,接收除了访问.jsp请求之外的所有请求。-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--其他控制器都配置在了springmvc.xml文件里面交给Ioc管理了。因此需要在这里添加xml文件的路径-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-*.xml</param-value>
            <!--因为其他控制器是需要前端控制器(DispatcherServlet)的调度的,因此需要在服务器开启时就要
                加载其他控制器,也是为了减少资源的消耗 -->
        </init-param>
        <!--启动时会调用servlet的构造方法创建servlet对象,还会调用init()方法初始化一些参数-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
        <!--
            /:除了.jsp的请求都会匹配
            /*:所有的请求都会匹配
            .do、.action:结尾是do或者action的请求都会匹配
            -->
    </servlet-mapping>
    <!--配置编过滤器CharacterEncodingFilter,编码的过滤器要写在所有过滤器的前面-->
    <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>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!--配置过滤器要拦截那些请求-->
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <!--设置拦截规则,使用 <servlet-name>springmvc</servlet-name>
            表示只拦截拦截springmvc的请求。-->
        <!--<url-pattern></url-pattern>-->
        <servlet-name>springmvc</servlet-name>
    </filter-mapping>
    <!-- &lt;!&ndash;处理HTML不支持put和delete提交方式&ndash;&gt;
         <filter>
             <filter-name>hiddenHttpMethodFilter</filter-name>
             <filter-class> org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
         </filter>
         <filter-mapping>
             <filter-name>hiddenHttpMethodFilter</filter-name>
             <servlet-name>springmvc</servlet-name>
         </filter-mapping>-->
</web-app>

4、在Java目录下创建SSM三层结构(控制层、服务层、持久层和实体类)

5、在resources根目录下创建spring、springmvc、mybatis、数据库和日志的配置文件。

三、流程分析

客户端发出请求被springmvc框架及的前端控制器(dispatcherServlet)拦截,前端控制器将请求交给处理器映射器,处理器映射器需要从spring容器中检索到controller,因此需要在springmvc配置文件中配置扫描(该扫描仅仅是针对controller的),如下:

<!--扫描controller-->
<context:component-scan base-package="cn.edu.qtc.Controller"/>


当controller实例被加载到spring容器中时,此时的处理器映射器会找到能够处理前端控制器传递来的url的controller,并生成调用链并将其传递给前端控制器。前端控制器接受到处理器映射器传递来的调用链后,将该调用链传递给处理器适配器,处理器适配器根据调用链找到具体的controller的方法来处理客户端发送来的请求。


controller只是负责接受客户端的请求,controller需要调用service层实现具体的业务逻辑。所以还需要在springmvc的配置文件中扫描service层。如下:

<context:component-scan base-package="cn.edu.qtc.Service"/>

service层负责具体的逻辑,但是对数据库的操作是由mybatis框架实现的,也就是dao层,因为spring框架既有数据库功能也有事务管理功能因此数据库与数据库的事务管理交给spring框架,mybatis框架只负责执行sql语句。 spring配置文件中的数据库配置和事务管理配置代码如下:

<!--数据库配置文件-->
<context:property-placeholder location="druid.properties"/>
<!-- 数据库-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${druid.driver}"/>
    <property name="url" value="${druid.url}"/>
    <property name="username" value="${druid.username}"/>
    <property name="password" value="${druid.password}"/>
</bean>
<!-- 事务管理 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>

这样, 就相当于是和数据库打通了,然后就是要让mybatis框架干活,spring框架和mybatis框架的链接是sqlsession对象,也就是说spring框架只有通过sqlsession对象执行SQL语句才能操作数据库,那么sqlSession对象能执行哪些SQL语句呢?这就看mapper文件中有哪些SQL语句了,sqlSessionFactory是生产sqlSession的工厂,是根据mapper文件生产出来的sqlSession对象,因此需要在spring配置文件中配置sqlSessionFactory的实例,代码如下:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>

可以看到首先是加载数据源,加载数据源之后sqlSessionFactory对象生产出来的sqlSession对象才知道它要操作哪个数据库!然后又加载了mybatis配置文件。 mybatis配置文件现在只需要加载mapper文件即可,代码如下:

<configuration>
    <mappers>
        <mapper resource="Mappers/userMapper.xml"/>
    </mappers>
</configuration>

得到数据库信息和SQL语句的信息之后就能生产sqlSession对象了,代码如下:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    <property name="basePackage" value="cn.edu.qtc.Dao"></property>
</bean>

在mybatis中sqlSession通过getMapper(xxx.class)来执行该接口对应的mapper文件的SQL语句,在SSM中dao层需要注入到service层中,因此我们还需要扫描Dao层。也就是


此时service会访问到dao层,controller层会访问到service层,得到service层的结果后还需要返回视图,因此还需要在springmvc配置文件中配置视图解析器,代码如下:

<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

至此,整个SSM流程完毕。  

相关文章
|
6月前
|
前端开发 Java 应用服务中间件
SSM相关
SSM相关
|
前端开发 Java 数据库连接
SSM整合~
SSM整合~
|
1月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
5月前
|
前端开发 JavaScript Java
SSM
【6月更文挑战第6天】
28 1
|
5月前
|
Java 数据库连接 Maven
ssm整合
ssm整合
19 0
|
6月前
|
XML Java 关系型数据库
springboot整合ssm详细讲解
springboot整合ssm详细讲解
171 1
|
6月前
|
Java 数据库连接 Spring
SSM整合
SSM整合
|
XML 存储 JSON
SSM 之 SpringMVC(下)
SSM 之 SpringMVC(下)
67 0
SSM 之 SpringMVC(下)
|
JSON 前端开发 JavaScript
SSM 之 SpringMVC(上)
SSM 之 SpringMVC(上)
71 0
|
Java 数据库连接 Spring
SSM整合(超详细)
新建一个excepition包包下创建所需各个异常类记得继承相应的异常父类,原因:程序运行时遇到相应异常后可以不处理向上抛不继承坏处:以后每个方法都要加上这个类//继承RuntimeException类 public class TestExcepition extends RuntimeException {//区别自定义异常类的编码 public TestExcepition(Integer code) {} }
134 1
SSM整合(超详细)