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

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

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

    946 引用 • 1460 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 610 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖 • 1 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 3 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 260 关注
  • Quicker

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

    36 引用 • 155 回帖 • 1 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 653 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 170 关注
  • C

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

    85 引用 • 165 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1057 回帖 • 1 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 168 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 819 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    409 引用 • 3586 回帖
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 296 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    180 引用 • 821 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 54 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 3 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 647 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 23 关注
  • Excel
    31 引用 • 28 回帖
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 73 关注
  • Kotlin

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

    19 引用 • 33 回帖 • 74 关注
  • V2Ray
    1 引用 • 15 回帖