背景

我们知道,从2002年开始,Spring一直在飞速的发展,如今已经成为了在Java EE开发中的标准,早期的项目都是传统的Spring-SpringMVC-Mybatis项目,打成一个war包丢入tomcat容器运行。但是随着技术的发展,这种传统的项目逐渐笨重,大量的xml配置文件,存在项目之中,繁琐的配置整合第三方框架的配置问题,导致了开发和部署效率的降低。所以才有了后来真香的SpringBoot项目。

尽管传统SSM项目开发很笨重,但是仍有企业在继续使用,而且SpringBoot项目只是简化了它,SSM对于java后端开发来说,仍是要必须学习的。这有助于更好的过度到SpringBoot与后面的SpringCloud之中。

下面就编写SSM项目基本的配置文件(确实比较庞大与繁琐的~~)

主要的配置文件

我们知道 所有的bean都要交于Spring IOC 去托管,Spring的配置文件一般命名为applicationContext.xml,如果把所有的bean都配置到这个文件中,将会显得异常臃肿与杂乱......于是借鉴MVC分层架构将applicatinContext.xml一分为三,各司其职。

资源文件结构

## resources资源目录

- mapper文件夹    						----mapper.xml文件放置处
- applicationContext.xml ----Spring配置文件
- jdbc.properties ----数据库配置文件
- mybatis-config.xml ----Mybatis配置文件
- spring-dao.xml ----dao层配置文件
- spring-mvc.xml ----web-mvc配置文件
- spring-service.xml ----service层配置文件

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 扫描所有的包 -->
<!-- <context:component-scan base-package="com.qd"/>--> <!-- 引入各层的配置文件 -->
<import resource="classpath:spring-dao.xml"/>
<import resource="classpath:spring-service.xml"/>
<import resource="classpath:spring-mvc.xml"/> </beans>

jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/ssmdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=root

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置数据源,交于spring -->
<!-- 打印sql日志 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings> <typeAliases>
<package name="com.qd.pojo"/>
</typeAliases> <!-- 扫描mapper.xml文件 交于spring去做 spring-dao已经配置 -->
<!-- <mappers>-->
<!-- <mapper resource="com/qd/mapper/mapper/userMapper.xml"/>-->
<!-- </mappers>-->
</configuration>

spring-dao.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 关联数据库配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 使用jdbcTemplate用的 -->
<!-- &lt;!&ndash; 扫描包 &ndash;&gt;-->
<!-- <context:component-scan base-package="com.qd.dao"/>-->
<!-- <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!-- <property name="driverClassName" value="${jdbc.driver}"/>-->
<!-- <property name="url" value="${jdbc.url}"/>-->
<!-- <property name="username" value="${jdbc.username}"/>-->
<!-- <property name="password" value="${jdbc.password}"/>-->
<!-- </bean>-->
<!-- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">-->
<!-- <property name="dataSource" ref="dataSource1"/>-->
<!-- </bean>--> <!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--配置数据库连接池的最小连接接数、最大连接数、初始连接数、失败重连次数、连接超时时间-->
<property name="maxPoolSize" value="15"></property>
<property name="minPoolSize" value="5"></property>
<property name="initialPoolSize" value="5"></property>
<property name="acquireIncrement" value="2"></property>
<property name="checkoutTimeout" value="10000"></property>
</bean> <!-- sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 绑定mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 扫描pojo包 -->
<property name="typeAliasesPackage" value="com.qd.pojo"/>
<!-- 扫描mapper xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean> <!-- 配置dao接口扫描,动态注入到spring中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.qd.mapper"/>
</bean> </beans>

spring-mvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 扫描包 -->
<context:component-scan base-package="com.qd.controller"/>
<!--注解驱动-->
<mvc:annotation-driven/>
<!--静态资源过滤 -->
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- <property name="prefix" value="/web/"/>-->
<property name="suffix" value=".html"/>
</bean> <!--配置拦截器-->
<!-- <mvc:interceptors>-->
<!-- <mvc:interceptor>-->
<!-- &lt;!&ndash;对哪些资源执行拦截操作&ndash;&gt;-->
<!-- <mvc:mapping path="/**"/>-->
<!-- <bean class="自定义拦截器的包地址"/>-->
<!-- &lt;!&ndash;配置哪些资源排除拦截操作&ndash;&gt;-->
<!-- <mvc:exclude-mapping path="/"/>-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>--> <!-- 文件上传解析器 -->
<!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">-->
<!-- &lt;!&ndash; 单个文件上传的大小 &ndash;&gt;-->
<!-- <property name="maxUploadSizePerFile" value="10240"/>-->
<!-- &lt;!&ndash;默认编码&ndash;&gt;-->
<!-- <property name="defaultEncoding" value="UTF-8"/>-->
<!-- </bean>--> </beans>

spring-service.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 扫描service下的包 -->
<context:component-scan base-package="com.qd.service"/>
<!-- 将service层的业务类注入到spring 通过注解或者xml实现 --> <!-- 声明式事务配置 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean> <!-- aop事务支持 -->
<!-- 日志切面类 -->
<!-- <bean id="logAspect" class="com.qd.aspect.LogAspect"/>-->
<!-- &lt;!&ndash;打印日志&ndash;&gt;-->
<!-- <aop:config>-->
<!-- &lt;!&ndash; 注入切面类 &ndash;&gt;-->
<!-- <aop:aspect ref="logAspect">-->
<!-- &lt;!&ndash; 切入点:service实现类中的任意类任意方法&ndash;&gt;-->
<!-- <aop:pointcut id="pointCut" expression="execution(* com.qd.service.impl.*ServiceImpl.*(..))"/>-->
<!-- &lt;!&ndash; 环绕通知 &ndash;&gt;-->
<!-- <aop:around method="aroundAdvice" pointcut-ref="pointCut"/>-->
<!-- &lt;!&ndash; 异常通知 &ndash;&gt;-->
<!-- <aop:after-throwing method="afterThrowing" pointcut-ref="pointCut" throwing="throwable"/>-->
<!-- </aop:aspect>-->
<!-- </aop:config>--> <bean id="LogAspect" class="com.qd.aspect.LogAspect"/>
<!-- Aop切面开启注解支持 -->
<aop:aspectj-autoproxy/> </beans>

WEB-INF下的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!--web服务默认打开index.jsp文件,修改为index.html-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list> <!-- DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- 乱码过滤 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- session 过期时间 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>

ps: 这些配置完成创建后,一个简单的SSM项目就能启动运行了,这些只是基础,需要什么尽管配置就行,有些配置也可使用注解代替。这样分层之后,确实清爽了许多呢!

一个成功启动的项目示例:https://chenyu6666.lanzoui.com/iSfMru6jkqb

配置一个简单的传统SSM项目的更多相关文章

  1. 在eclipse中配置一个简单的spring入门项目

    spring是一个很优秀的基于Java的轻量级开源框架,为了解决企业级应用的复杂性而创建的,spring不仅可用于服务器端开发,从简单性.可测试性和松耦合性的角度,任何java应用程序都可以利用这个思 ...

  2. 构建一个简单的Spring Boot项目

    11 构建一个简单的Spring Boot项目 这个章节描述如何通过Spring Boot构建一个"Hello Word"web应用,侧重介绍Spring Boot的一些重要功能. ...

  3. 用Eclipse 创建一个 简单的 Maven JavaWeb 项目

    使用Maven 创建一个简单的 javaWeb 项目: 本篇属于 创建 JavaWeb 项目的第三篇: 建议阅读本篇之前 阅读 用 Eclipse 创建一个简单的web项目  ;本篇是这这篇文章的基础 ...

  4. 参照实验室这边案例做一个简单的maven webapp项目

    流程 : 首先写出一个简单的前端页面. 之后写配置文件.dao.domain等等,注意这里可以使用generator进行自动配置 实验室这边配置文件如下: 其实主要的配置文件就分为6“个”. appl ...

  5. 从零开始配置一个简单的webpack打包

    一.基础配置 1.创建一个名为demo-webpack的文件夹(名称随意) 2.初始化一个package.json文件 //在cmd窗口中使用以下命令快速创建 npm init -y 3.安装webp ...

  6. 搭建一个maven管理的ssm项目需要配置那些文件

    链接:https://blog.csdn.net/java987654/article/details/80746866

  7. 用Java构建一个简单的WebSocket聊天项目之新增HTTP接口调度

    采用框架 我们整个Demo基本不需要大家花费太多时间,就可以实现以下的功能. 用户token登录校验 自我聊天 点对点聊天 群聊 获取在线用户数与用户标签列表 发送系统通知 首先,我们需要介绍一下我们 ...

  8. 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目

    步骤: 1. 创建一个asp.net mvc 项目 1.1 项目创建好结构如下 2 通过vs安装EntityFramework框架 install-package entityframework 3. ...

  9. 一个简单的Java Web项目搭建流程

    今天试图在服务器上搭建一个web服务器,顺便回顾了java web项目的入门,使用Servlet处理HTTP请求,并记录日志等操作.当很久没有做过web项目时,有些东西还是很容易忘记的. Maven配 ...

随机推荐

  1. 字符串拷贝函数递归与非递归的C语言实现

    初学递归的时候,觉得很抽象,不好分析,确实如此,尤其是有些时候控制语句不对,导致程序进去无限次的调用,更严重的是栈溢出.既要正确的控制结束语句,又要有正确的进入下次递归的语句,还要有些操作语句.... ...

  2. go语言内存对齐

    内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址并占用合适的长度,这就是内存对齐 每种类型的对齐值就是他的内存边界 64位 类型 对齐边界 (对齐值) int8 1byte ...

  3. Spring Boot +Vue 项目实战笔记(二):前后端结合测试(登录页面开发)

    前言:关于开发环境 每位 Coder 都有自己偏好的开发工具,从大的方面划分主要有文本编辑器流和 IDE 流两种,我有一段时间也喜欢用编辑器(Sublime Text.Vim),但对我来说开发效率确实 ...

  4. linux下查看磁盘使用内存及清除日志内存

    1.查看磁盘内存 df -h 2.清理日志内存 echo "">catalina.out

  5. C# - 音乐小闹钟_BetaV2.0

    时间:2017-11-21 作者:byzqy  介绍: 虽然上一版本基本实现了闹钟的功能,但是界面.功能.用户体验(简直谈不上体验^_^),以及众多的bug,所以升级,刻不容缓! 还是先看一下Beta ...

  6. Learning ROS: rostopic pub yaml demo

    官方Tutorials中例程的等效命令: rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '{linear:[2.0, 0.0, 0.0 ...

  7. iptables开启后造成本地套接字阻塞的问题

    前段时间,我使用iptables实现了针对IP地址与MAC地址的白名单功能,即将INPUT链的默认规则设为DROP: iptables -P INPUT DROP 这样就能拒绝一切外来报文.随后只需要 ...

  8. 字符型:char

    字符型:char 字符变量的定义和输出 字符变量用于存储一个单一字符,在C语言中用char表示,其中每个字符变量都会占用1个字节.在给字符型变量赋值时,需要用一对因为半角格式的单引号('   ')把字 ...

  9. 【Spring 持久层】Spring 与 Mybatis 整合

    持久层整合总述 1.Spring 框架为什么要与持久层技术进行整合? JavaEE开发需要持久层进行数据库的访问操作 JDBC.Hibernate.MyBatis 进行持久开发过程存在大量的代码冗余 ...

  10. GUI容器之Panel

    Panel //panel可以看成是一个空间,但不能单独存在 public class MyPanel { public static void main(String[] args) { Frame ...