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

本贴最后更新于 2773 天前,其中的信息可能已经时移世异

使用 SSM 框架做了几个小项目了,感觉还不错是时候总结一下了。先总结一下 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 基本相似。

配置内容如下:

spring org.springframework.web.servlet.DispatcherServlet contextConfigLocation WEB-INF/classes/spring/springmvc.xml spring /

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

配置 spring 容器:

contextConfigLocation WEB-INF/classes/spring/applicationContext-*.xml

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

配置一个监听器:

org.springframework.web.context.ContextLoaderListener

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

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

404 /error404.jsp 500 /error500.jsp contextConfigLocation WEB-INF/classes/spring/applicationContext-*.xml org.springframework.web.context.ContextLoaderListener spring org.springframework.web.servlet.DispatcherServlet contextConfigLocation WEB-INF/classes/spring/springmvc.xml spring / CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 CharacterEncodingFilter /* welcome.jsp

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

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

springmvc.xml 的配置

视图解析器的配置:

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

Controller 的配置

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

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

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

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

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

配置全局异常处理器

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

9242880

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

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

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

完全可以不拦截所有路径,大可避免这个问题的发生。

完整的配置大概是这样的,需要注意 xml 文件的命名空间,有时候会有影响的。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:jdbc="http://www.springframework.org/schema/jdbc"

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

Index of /schema/context

http://www.springframework.org/schema/context/spring-context.xsd

Index of /schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

Index of /schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

Index of /schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd">

9242880

applicationContext-*.xml 的配置

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

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

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

配置为:

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

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:

jdbc.username=root

jdbc.password=1234

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

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

配置 sqlSessionFactory

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

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

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

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:jdbc="http://www.springframework.org/schema/jdbc"

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

Index of /schema/context

http://www.springframework.org/schema/context/spring-context.xsd

Index of /schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

Index of /schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

Index of /schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd">

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

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

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

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

配置通知,事务控制。

配置 AOP 切面

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

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:jdbc="http://www.springframework.org/schema/jdbc"

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

Index of /schema/context

http://www.springframework.org/schema/context/spring-context.xsd

Index of /schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

Index of /schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

Index of /schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd">

MyBatis 的配置

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

别名的定义:

mapper 映射文件的配置:

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

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

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

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

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 143 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 38 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 1 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 125 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    346 引用 • 760 回帖 • 1 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 53 关注
  • Excel
    31 引用 • 28 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 32 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 726 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 565 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 615 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 391 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖 • 1 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 563 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 508 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 407 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 9 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 1 关注