SSM三大框架详细整合流程

Posted Margaery

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSM三大框架详细整合流程相关的知识,希望对你有一定的参考价值。

1、基本概念

1.1、Spring 

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.2、SpringMVC

      Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

1.3、MyBatis 

       MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2、整合步骤

首先对SSM框架有一个相应的认识:

 


 

SpringMVC:

  SpringMVC:主要进行页面的 请求接受与响应。

  组件包括:前端控制器,处理器映射器,处理器适配器,视图解析器,处理器Handler,视图View。其中,只有处理器Handler和视图View需要程序员开发。

View是一个接口,实现类支持不同的View类型(jsp,freemarker,pdf等)。另外,处理器Handler就是Controller。


 

Service:

  Service层功能:注入dao,调用dao方法。


 

Mybatis:

  开始Mybatis时要记住最终目的,我们要对数据库的数据进行操作,所以你只需要记住,他的使用很方便,很方便,方便,即可。

  

  最后我们的开发思路就很明确了,从页面获取数据到Controller层,然后传递到service层进行相关操作(调用方法等),然后再传递到持久层对数据库进行相应增删改查即可。

2.1、整合准备

  整合内容:

    整合架构:Spring、SpringMVC以及MyBatis的整合。

    数据库:mysql

    连接池:C3P0或Druid

  整合工具:

    整合工具为:Eclipse

    Jar管理工具:Maven

    项目类型为:Maven Pproject

 

2.2 创建项目

  使用eclipse,创建一个maven project,建立好相应的目录结构,步骤如下:

  1、New --> Maven Project --> Create a simple project and location;

  2、填入GAV坐标(Group Id、Artifact Id、Version),选择war包,点击finish;

    注意:此处会报错:web.xml is missing and <failOnMissingWebXml> is set to true。因为默认没有生成web.xml文件,需手动创建。

  3、在项目名上右键,选择Properties --> Project Facets.

    先勾掉Dynamic Web Services,点击Apply,再勾选Dynamic Web Services,选择版本2.5,点击下方Further configuration available…,手动创建web文件的目录,即在directory处输入src/main/webapp,apply --> 确定 即可,此时WEB-INF下会创建web.xml文件。

  web.xml是整个项目的核心配置文件,也可以理解为Web程序访问的入口,

此时文件目录结构中各自作用如下:

 文件名

 作用

src

  根目录,没什么好说的,下面有main和test。

main

  主要目录,可以放java代码和一些资源文件。

java

  存放我们的java代码,这个文件夹要使用Build Path -> Use as Source Folder,这样看包结构会方便很多,新建的包就相当于在这里新建文件夹咯。

resources

  存放资源文件,譬如各种的spring,mybatis,log配置文件。

mapper

  存放dao中每个方法对应的sql,在这里配置,无需写daoImpl。

spring

  这里当然是存放spring相关的配置文件,有dao service web三层。

sql

  其实这个可以没有,但是为了项目完整性还是加上吧。

webapp

  这个貌似是最熟悉的目录了,用来存放我们前端的静态资源,如jsp js css。

resources

  这里的资源是指项目的静态资源,如js css images等。

WEB-INF

  很重要的一个目录,外部浏览器无法访问,只有羡慕内部才能访问,可以把jsp放在这里,另外就是web.xml了。你可能有疑问了,为什么上面java中的resources里面的配置文件不妨在这里,那么是不是会被外部窃取到?你想太多了,部署时候基本上只有webapp里的会直接输出到根目录,其他都会放入WEB-INF里面,项目内部依然可以使用classpath:XXX来访问,好像IDE里可以设置部署输出目录,这里扯远了~

test

  这里是测试分支。

java

  测试java代码,应遵循包名相同的原则,这个文件夹同样要使用Build Path -> Use as Source Folder,这样看包结构会方便很多。

resources

  没什么好说的,好像也很少用到,但这个是maven的规范。

 

2.3 引入jar包依赖

  <dependencies>
        <!-- 1    Spring核心包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <!-- 关系型数据库整合时需配置,包含Spring对DAO特性集进行了扩展,使其支持 Mybatis、JDO等。
        此jar文件里大部分类都要依赖spring-dao.jar里的类,用这个包时需要同时包含spring-dao.jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>

        <!-- 2    SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        
        <!-- 3    MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <!-- 3.1 MyBatis/Spring包  -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!-- MyBatis中延迟加载需要使用Cglib,即启用懒加载 --> 
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
        
        <!-- 4    数据库连接 -->
        <!-- 4.1 MySQL数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
        <!-- C3P0数据库连接池 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.2</version>
        </dependency>
        <!-- 或者使用 -->
        <!-- dbcp连接池 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <!-- 5    Servlet、jsp、jstl依赖 -->
        <!-- provided表明该包只在编译和测试的时候用,而Tomcat中也有servlet-api包,所以当启动tomcat的时候,就不会冲突了 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1.3-b06</version>
            <scope>provided</scope>
        </dependency>
        <!-- JSTL标签类 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>


        <!-- 6    辅助 -->

        <!-- 6.1 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!-- 表示开发的时候引入,发布的时候不会加载此包 -->
            <scope>test</scope>
        </dependency>
        
        <!-- 6.2 日志文件管理包 -->
        <!-- log4j是具体的实现(即怎么来打印日志等),和logback是一样的。 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- slf4j是日志的接口(只定义了一些方法而没有去实现),和commons-logging一样。 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        
        <!-- 6.3 格式化对象工具包,方便输出日志 -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>
        
        <!-- 6.4 上传组件包 -->
       <dependency>
           <groupId>commons-fileupload</groupId>
           <artifactId>commons-fileupload</artifactId>
           <version>1.3.1</version>
       </dependency>
       <dependency>
           <groupId>commons-io</groupId>
           <artifactId>commons-io</artifactId>
           <version>2.5</version>
       </dependency>
       <dependency>
           <groupId>commons-codec</groupId>
           <artifactId>commons-codec</artifactId>
           <version>1.10</version>
       </dependency>
       
       <!-- 6.5 代码生成器(逆向工程) -->
        <dependency>  
            <groupId>org.mybatis.generator</groupId>  
            <artifactId>mybatis-generator-core</artifactId>  
            <version>1.3.3</version>  
        </dependency>
        
        <!-- 6.6 Apache提供的包含StringUtils工具类的Jar包 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        
        <!-- 其余辅助 -->
        <!-- springmvc默认使用的是jackson来解析json的 -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.11</version>
        </dependency>
        
        <!-- 各种集合类和集合工具类的封装类库 -->
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.1</version>
        </dependency>
        
        <!-- json需使用的包 -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        
        <!-- jedis包 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
          
    </dependencies>

 

2.4 集成Spring框架

  Spring框架是整个系统架构的核心,将前端请求数据的处理以及数据库的数据操作整合在一起,非常重要。

  在web.xml文件中增加配置信息集成Spring框架:

 1 <web-app>
 2 ...
 3     <context-param>
 4         <param-name>contextConfigLocation</param-name>
 5         <param-value>classpath*:spring-*.xml</param-value>
 6     </context-param>
 7     <listener>
 8         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 9     </listener>
10 ...
11 </web-app>

  Spring环境构建时需要读取web应用的初始化参数contextConfigLocation, 从classpath中读取配置文件spring/spring-*.xml在项目src/main/resources目录中增加spring文件夹,并在其中增加spring-context.xml配置文件。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:tx="http://www.springframework.org/schema/tx"
 6     xmlns:aop="http://www.springframework.org/schema/aop"
 7     xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
 8         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
10         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
11 
12 </beans>

  Spring框架的核心是构建对象,整合对象之间的关系(IOC)及扩展对象功能(AOP),所以需要在spring-context.xml配置文件中增加业务对象扫描的相关配置。扫描后由Spring框架进行管理和组合。

1 <beans>
2     ...
3     <context:component-scan base-package="com.getmymoney.*" >
4         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
5     </context:component-scan>
6     ...
7 </beans>

扫描配置中为什么要排除Controller注解

  Controller注解的的作用是声明控制器(处理器)类。从数据流转的角度,这个类应该是由SpringMVC框架进行管理和组织的,所以不需要由Spring框架扫描。

以上是关于SSM三大框架详细整合流程的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb学习笔记之SSM三大框架整合详细教程

SpringBoot整合SSM三大框架源码剖析之SpringBoot源码剖析

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

java高并发框架 SSM框架 详细整合教程(Spring+SpringMVC+MyBatis)

SSM框架——以注解形式实现事务管理

SSM三大框架整合