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

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

使用 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 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10419 引用 • 47341 回帖 • 60 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    4 引用 • 16 回帖 • 203 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 11 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    189 引用 • 1021 回帖
  • 数据库

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

    346 引用 • 761 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1396 回帖 • 253 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 566 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 2 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 616 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    447 引用 • 1240 回帖 • 604 关注
  • RemNote
    2 引用 • 16 回帖 • 28 关注
  • abitmean

    有点意思就行了

    38 关注
  • OnlyOffice
    4 引用 • 22 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 471 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 16 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 653 关注
  • 安装

    你若安好,便是晴天。

    131 引用 • 1184 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 645 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    498 引用 • 934 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    44 引用 • 44 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 191 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 143 关注