配置一个简单的传统SSM项目
背景
我们知道,从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用的 -->
<!-- <!– 扫描包 –>-->
<!-- <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>-->
<!-- <!–对哪些资源执行拦截操作–>-->
<!-- <mvc:mapping path="/**"/>-->
<!-- <bean class="自定义拦截器的包地址"/>-->
<!-- <!–配置哪些资源排除拦截操作–>-->
<!-- <mvc:exclude-mapping path="/"/>-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>-->
<!-- 文件上传解析器 -->
<!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">-->
<!-- <!– 单个文件上传的大小 –>-->
<!-- <property name="maxUploadSizePerFile" value="10240"/>-->
<!-- <!–默认编码–>-->
<!-- <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"/>-->
<!-- <!–打印日志–>-->
<!-- <aop:config>-->
<!-- <!– 注入切面类 –>-->
<!-- <aop:aspect ref="logAspect">-->
<!-- <!– 切入点:service实现类中的任意类任意方法–>-->
<!-- <aop:pointcut id="pointCut" expression="execution(* com.qd.service.impl.*ServiceImpl.*(..))"/>-->
<!-- <!– 环绕通知 –>-->
<!-- <aop:around method="aroundAdvice" pointcut-ref="pointCut"/>-->
<!-- <!– 异常通知 –>-->
<!-- <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项目的更多相关文章
- 在eclipse中配置一个简单的spring入门项目
spring是一个很优秀的基于Java的轻量级开源框架,为了解决企业级应用的复杂性而创建的,spring不仅可用于服务器端开发,从简单性.可测试性和松耦合性的角度,任何java应用程序都可以利用这个思 ...
- 构建一个简单的Spring Boot项目
11 构建一个简单的Spring Boot项目 这个章节描述如何通过Spring Boot构建一个"Hello Word"web应用,侧重介绍Spring Boot的一些重要功能. ...
- 用Eclipse 创建一个 简单的 Maven JavaWeb 项目
使用Maven 创建一个简单的 javaWeb 项目: 本篇属于 创建 JavaWeb 项目的第三篇: 建议阅读本篇之前 阅读 用 Eclipse 创建一个简单的web项目 ;本篇是这这篇文章的基础 ...
- 参照实验室这边案例做一个简单的maven webapp项目
流程 : 首先写出一个简单的前端页面. 之后写配置文件.dao.domain等等,注意这里可以使用generator进行自动配置 实验室这边配置文件如下: 其实主要的配置文件就分为6“个”. appl ...
- 从零开始配置一个简单的webpack打包
一.基础配置 1.创建一个名为demo-webpack的文件夹(名称随意) 2.初始化一个package.json文件 //在cmd窗口中使用以下命令快速创建 npm init -y 3.安装webp ...
- 搭建一个maven管理的ssm项目需要配置那些文件
链接:https://blog.csdn.net/java987654/article/details/80746866
- 用Java构建一个简单的WebSocket聊天项目之新增HTTP接口调度
采用框架 我们整个Demo基本不需要大家花费太多时间,就可以实现以下的功能. 用户token登录校验 自我聊天 点对点聊天 群聊 获取在线用户数与用户标签列表 发送系统通知 首先,我们需要介绍一下我们 ...
- 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目
步骤: 1. 创建一个asp.net mvc 项目 1.1 项目创建好结构如下 2 通过vs安装EntityFramework框架 install-package entityframework 3. ...
- 一个简单的Java Web项目搭建流程
今天试图在服务器上搭建一个web服务器,顺便回顾了java web项目的入门,使用Servlet处理HTTP请求,并记录日志等操作.当很久没有做过web项目时,有些东西还是很容易忘记的. Maven配 ...
随机推荐
- gdb调试用命令与一般调试方法
示例代码 1 #include <iostream> 2 using namespace std; 3 4 void Print() 5 { 6 cout<<"hel ...
- 【java虚拟机】jvm调优
转自:https://www.cnblogs.com/starhu/p/6400348.html?utm_source=itdadao&utm_medium=referral 堆大小设置JVM ...
- JMeter结果树响应数据中文乱码
打开apache-jmeter-2.11\bin\jmeter.properties文件,搜索"encoding"关键字,找到如下配置: # The encoding to be ...
- ABC类IP地址
A类IP地址一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位 必须是"0", 地址范围从1.0.0.0 到126.0.0.0.可用的A类网络有126个,每个 ...
- Go测试--main测试
目录 简介 示例 简介 子测试的一个方便之处在于可以让多个测试共享Setup和Tear-down.但这种程度的共享有时并不满足需求,有时希望在整个测试程序做一些全局的setup和Tear-down,这 ...
- Go并发控制--Channel篇
目录 1. 前言 2. 使用channel控制子协程 2.1 使用场景 2.2 总结 1. 前言 我们考虑这么一种场景,协程A执行过程中需要创建子协程A1.A2.A3-An,协程A创建完子协程后就等待 ...
- deepin-terminal改造风云再起
1. 创作背景 使用deepin-terminal的时候,我发现一些小的问题. 在论坛的帖子(https://bbs.deepin.org/zh/post/224502)也总结反馈了这些问题 终端标签 ...
- 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 ...
- (六)羽夏看C语言——函数
写在前面 由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...
- Spring整合MyBatis小结
MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...