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>
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
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三大框架详细整合流程的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot整合SSM三大框架源码剖析之SpringBoot源码剖析
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)