背景

我们知道,从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. gdb调试用命令与一般调试方法

    示例代码 1 #include <iostream> 2 using namespace std; 3 4 void Print() 5 { 6 cout<<"hel ...

  2. 【java虚拟机】jvm调优

    转自:https://www.cnblogs.com/starhu/p/6400348.html?utm_source=itdadao&utm_medium=referral 堆大小设置JVM ...

  3. JMeter结果树响应数据中文乱码

    打开apache-jmeter-2.11\bin\jmeter.properties文件,搜索"encoding"关键字,找到如下配置: # The encoding to be ...

  4. ABC类IP地址

    A类IP地址一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位 必须是"0", 地址范围从1.0.0.0 到126.0.0.0.可用的A类网络有126个,每个 ...

  5. Go测试--main测试

    目录 简介 示例 简介 子测试的一个方便之处在于可以让多个测试共享Setup和Tear-down.但这种程度的共享有时并不满足需求,有时希望在整个测试程序做一些全局的setup和Tear-down,这 ...

  6. Go并发控制--Channel篇

    目录 1. 前言 2. 使用channel控制子协程 2.1 使用场景 2.2 总结 1. 前言 我们考虑这么一种场景,协程A执行过程中需要创建子协程A1.A2.A3-An,协程A创建完子协程后就等待 ...

  7. deepin-terminal改造风云再起

    1. 创作背景 使用deepin-terminal的时候,我发现一些小的问题. 在论坛的帖子(https://bbs.deepin.org/zh/post/224502)也总结反馈了这些问题 终端标签 ...

  8. Excel vba call Python script on Mac

    How can I launch an external python process from Excel 365 VBA on OSX? It took me a while, but I fig ...

  9. (六)羽夏看C语言——函数

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  10. Spring整合MyBatis小结

    MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...