Spring、Spring MVC、MyBatis 整合文件配置详解

先总结一下SSM整合的文件配置。其实具体的用法最好还是看官方文档。

Spring:http://spring.io/docs

MyBatis:http://mybatis.github.io/mybatis-3/

基本的组织结构和用法就不说了,前面的博客和官方文档上都非常的全面。jar包可以使用Maven来组织管理。来看配置文件。

web.xml的配置

web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式了。在servlet3.0以前每个servlet必须要在web.xml中配置servlet及其映射关系。但是在spring框架中就不用了,因为Spring中是依赖注入(Dependency Injection)的也叫控制反转(Inversion of Control)。但是也要配置一个重要的servlet,就是前端控制器(DispatcherServlet)。配置方式与普通的servlet基本相似。

配置内容如下:

<!-- 配置前端控制器 -->springorg.springframework.web.servlet.DispatcherServlet<!-- ContextconfigLocation配置springmvc加载的配置文件          适配器、处理映射器等          -->contextConfigLocationWEB-INF/classes/spring/springmvc.xmlspring<!-- 1、.action访问以.action结尾的  由DispatcherServlet进行解析          2、/,所有访问都由DispatcherServlet进行解析      -->/

这里需要注意,springmvc.xml是spring配置文件,将在后面讨论。在<servlet-mapping>中url如果是.action,前端控制器就只会拦截以.action结尾的请求,并不会理会静态的文件。对静态页面的控制就要通过其他的手段。以/作为url的话就会拦截所有的请求,包括静态页面的请求。这样的话就可以拦截任何想要处理的请求,但是有一个问题。如果拦截了所有的请求,如果不在拦截器中做出相应的处理那么所有静态的js、css以及页面中用到的图片就会访问不到造成页面无法正常显示。但这可以通过静态资源的配置来解决这个问题。后面会提到。

配置spring容器:

contextConfigLocationWEB-INF/classes/spring/applicationContext-*.xml

其中applicationContext-*.xml包含3个配置文件,是springIoC容器的具体配置。后面会提到。

配置一个监听器:

org.springframework.web.context.ContextLoaderListener

web.xml的完整配置是这样的:

<?xml version="1.0" encoding="UTF-8"?> <!-- 404错误拦截 -->404/error404.jsp<!-- 500错误拦截 -->500/error500.jsp <!-- 加载spring容器 -->contextConfigLocationWEB-INF/classes/spring/applicationContext-*.xmlorg.springframework.web.context.ContextLoaderListener <!-- 配置前端控制器 -->springorg.springframework.web.servlet.DispatcherServlet<!-- ContextconfigLocation配置springmvc加载的配置文件          适配器、处理映射器等          -->contextConfigLocationWEB-INF/classes/spring/springmvc.xmlspring<!-- 1、.action访问以.action结尾的  由DispatcherServlet进行解析          2、/,所有访问都由DispatcherServlet进行解析      -->/ <!-- 解决post乱码问题的过滤器 -->CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingutf-8CharacterEncodingFilter/*welcome.jsp

看到配置文件中多了两块内容,一个是error page是用来友好的处理错误的,可以使用错误代码来区别并跳转到相应的处理页面。这段配置代码最好放到最前面,在前端控制器拦截之前处理。

还有一块内容是一个解决post乱码问题的过滤器,拦截post请求并编码为utf8。

2 springmvc.xml的配置

视图解析器的配置:

<!-- 配置视图解析器 --><!-- 使用前缀和后缀 -->

在Controller中设置视图名的时候会自动加上前缀和后缀。

Controller的配置

自动扫描方式,扫描包下面所有的Controller,可以使用注解来指定访问路径。

<!-- 使用组件扫描的方式可以一次扫描多个Controller -->

也可以使用单个的配置方式,需要指定Controller的全限定名。

配置注解的处理器适配器和处理器映射器:

<!-- 注解的处理器适配器 --><!-- 注解的处理器映射器 -->

也可以使用下面的简化配置:

<!-- 配置注解的处理器映射器和处理器适配器 -->

配置拦截器,可以直接定义拦截所有请求,也可以自定义拦截路径。

<!-- 直接定义拦截所有请求 --><!-- <mvc:interceptor>            拦截所有路径的请求  包括子路径            <mvc:mapping path="/**"/>            <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>        </mvc:interceptor> -->

配置全局异常处理器

<!-- 定义全局异常处理器 --><!-- 只有一个全局异常处理器起作用 -->

配置文件上传数据解析器,在上传文件时需要配置。

<!--配置上传文件数据解析器  -->9242880

还可以配置一些自定义的参数类型,以日期类型绑定为例。

<!-- 自定义参数类型绑定 --><!-- 日期类型绑定 -->

上面提到过如果在配置前端控制器时拦截了所有的请求,不做特殊处理就会导致部分静态资源无法使用。如果是这种情况就可以使用下面的配置来访问静态资源文件。

也可以使用默认,但是需要在web.xml中配置。

<!-- 访问静态资源文件 --><!-- <mvc:default-servlet-handler/> 需要在web.xml中配置-->

完全可以不拦截所有路径,大可避免这个问题的发生。完整的配置大概是这样的,需要注意xml文件的命名空间,有时候会有影响的。

<?xml version="1.0" encoding="UTF-8"?> <!-- 配置视图解析器 --><!-- 使用前缀和后缀 --> <!-- 使用组件扫描的方式可以一次扫描多个Controller --><!-- 配置注解的处理器映射器和处理器适配器 --> <!-- 自定义参数类型绑定 --><!-- 日期类型绑定 --> <!-- 访问静态资源文件 --><!-- <mvc:default-servlet-handler/> 需要在web.xml中配置--> <!-- 定义拦截器 --><!-- 直接定义拦截所有请求 --><!-- <mvc:interceptor>            拦截所有路径的请求  包括子路径            <mvc:mapping path="/**"/>            <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>        </mvc:interceptor> --> <!--配置上传文件数据解析器  -->9242880 <!-- 定义全局异常处理器 --><!-- 只有一个全局异常处理器起作用 -->

applicationContext-*.xml的配置

applicationContext-*.xml包括三个配置文件,分别对应数据层控制、业务逻辑service控制和事务的控制。

数据访问层的控制,applicationContext-dao.xml的配置:

配置加载数据连接资源文件的配置,把数据库连接数据抽取到一个properties资源文件中方便管理。

配置为:

<!-- 加载数据库连接的资源文件 -->

其中jdbc.properties文件的内容如下:配置内容如下:

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/databasejdbc.username=rootjdbc.password=1234

配置数据库连接池,这里使用的是dbcp,别忘了添加jar包!

<!-- 配置数据源  dbcp数据库连接池 -->

Spring和MyBatis整合配置,jar包由MyBatis提供

配置sqlSessionFactory

<!-- 配置sqlSessionFactory --><!-- 数据库连接池 --><!-- 加载Mybatis全局配置文件 -->

SqlMapConfig.xml文件是MyBatis的配置文件,后面会提到。

配置Mapper扫描器,扫描mapper包下的所有mapper文件和类,要求mapper配置文件和类名需要一致。

<!-- 配置mapper扫描器 --><!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->

整个applicationContext-dao.xml配置文件应该是这样的:

<?xml version="1.0" encoding="UTF-8"?> <!-- 加载数据库连接的资源文件 --> <!-- 配置数据源  dbcp数据库连接池 --> <!-- 配置sqlSessionFactory --><!-- 数据库连接池 --><!-- 加载Mybatis全局配置文件 --> <!-- 配置mapper扫描器 --><!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->

业务逻辑控制,applicationContext-service.xml的配置:

这个文件里暂时只需要定义service的实现类即可。

<!-- 定义service -->

事务控制,applicationContext-transaction.xml的配置

配置数据源,使用JDBC控制类。

<!-- 配置数据源 -->

配置通知,事务控制。

<!-- 通知 --><!-- 传播行为 -->

配置AOP切面

<!-- 配置aop  -->

整个事务控制的配置是这样的:

<?xml version="1.0" encoding="UTF-8"?> <!-- 事务控制  对MyBatis操作数据库  spring使用JDBC事务控制类 --> <!-- 配置数据源 --> <!-- 通知 --><!-- 传播行为 --> <!-- 配置aop  -->

MyBatis的配置

SqlMapConfig.xml的配置   全局setting配置这里省略,数据库连接池在spring整合文件中已经配置,具体setting配置参考官方文档。

别名的定义:

<!-- 批量定义别名 ,指定包名,自动扫描包中的类,别名即为类名,首字母大小写无所谓-->

mapper映射文件的配置:

<!-- 加载映射文件 --><!-- 这里也可以使用class来加载映射文件,前提是:使用mapper代理的方法,遵循规范,    并且两个文件必须同名且在同一目录    <mapper class="com.wxisme.mybatis0100.mapper.UserMapper"/>    基于class加载,可以进行批量加载    --><!-- 通过扫描包的方式来进行批量加载映射文件 -->

整个文件的配置应该是这样的:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 将数据库连接数据抽取到属性文件中方便测试 --><!-- <properties resource="/WEB-INF/classes/jdbc.properties"></properties> --><!-- 别名的定义 --><!-- 批量定义别名 ,指定包名,自动扫描包中的类,别名即为类名,首字母大小写无所谓--> <!-- 数据库连接用数据库连接池 --> <!-- 通过扫描包的方式来进行批量加载映射文件 -->

具体mapper文件的配置,在使用mapper代理的方法时,命名空间需要是对应的Mapper类。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

以上只是对SSM框架简单使用时的配置文件,如果需要深入使用或者需要理解其内部机理需要参考官方文档和其源代码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容