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

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

使用 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 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    32 引用 • 130 回帖 • 2 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 27 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 474 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 67 关注
  • Pipe

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

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

    132 引用 • 1114 回帖 • 124 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 4 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 617 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    6 引用 • 63 回帖
  • OpenStack

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

    10 引用 • 4 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • Chrome

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

    62 引用 • 289 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1348 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 742 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 63 关注
  • SEO

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

    35 引用 • 200 回帖 • 22 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖
  • abitmean

    有点意思就行了

    29 关注
  • VirtualBox

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

    10 引用 • 2 回帖 • 6 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • CloudFoundry

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

    5 引用 • 18 回帖 • 167 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 528 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    5 引用 • 107 回帖
  • C

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

    85 引用 • 165 回帖 • 1 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 94 关注