0.源码下载链接:https://download.csdn.net/download/qq_36856975/12594639
1.环境:JDK1.8, eclipse, spring4.2.5,mybatis3,mysql
2.整合思路:
a. 新建web项目:version 2.5 和 3.0 其实都可以,区别就是要不要自己去点击生成web.xml。 这个version默认选项结果是根据你的jdk tomcat来推荐的。自己再新建一个resources存放配置文件资源等。
b. web.xml 里面配置:
<welcome-list>...欢迎页
<context-param>...里面预存spring.xml等配置文件的存放路径
<listener >...ContextLoaderListener
<filter CharacterEncodingFilter>...编码设置
<servlet DispatcherServlet>... 里面还要预存springmvc配置文件的存放路径
c. spring.xml 里面的配置:
<context:component-scan ..> 配置扫描包dao,service等,排除controller扫描,把controller留给springmvc去扫描,父容器。
<context:property-placeholder ...> 配置读取 db的配置文件
<bean dataSource ...> 配置数据源
<bean sqlsession ...> 配置sqlsessionTemplte
<bean sqlsessionFatory ...> 配置mybatis,里面要配置mybatis的配置文件位置,mapper.xml的sql语句文件位置。
mybatis的配置文件,一般是sqlMapConfig.xml,里面根据你的需要进行配置,如:缓存开启、实体类别名等
<bean MapperScannerConfigurer ...>配置DAO接口所在包
<事物配置...> 注解方式/xml方式
d. springmvc.xml 里面的配置:
<mvc:annotation-driven/> mvc的注解
<context:component-scan ...> 配置扫描包controller,子容器。
<bean xxxViewResolver ...> 配置视图解析器
<bean CommonsMultipartResolver ...> 上传拦截设置
<mvc:interceptors ...> 访问拦截器等
<mvc:resources ...> 静态文件配置,推荐使用<mvc:default-servlet-handler/>
3.整合,图文并茂。
a. 新建web项目:version 我这里选择的是 3.0
生成好了之后的项目层次,jar包图就不放了,源码里面都有,或许会存在个别没用的包,不需要你就删除吧。
b. web.xml 里面配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>ssmDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 加载spring配置文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<!-- 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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码 -->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 静态文件一种配置方式,我用的是springmvc.xml 里面的配置方式。
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping> -->
</web-app>
c. spring.xml 里面的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置spring、springmvc父子容器:此处是spring父容器。有疑问自己百度去补充知识。
spring是父容器,扫描dao和service
springmvc是自容器,扫描controller -->
<context:component-scan base-package="com.demo">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 配置数据源 我这边使用的是alibaba的DruidDataSource,注意下面的name里面的值,
别自己想当然,写什么name="jdbcUrl",driver,user等等,不同的数据库配置,这边的值是不一样的,写错你就等着报错吧!!! -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="url" value="${jdbc.url}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="maxActive" value="10"/>
<property name="maxIdle" value="5"/>
</bean>
<!-- 创建sqlSessionFactory。生产sqlSession -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:sqlMapConfig.xml" />
<!-- mapper扫描 -->
<!-- <property name="mapperLocations" value="classpath:mybatis/*/*.xml" /> -->
<property name="mapperLocations" value="classpath:com/demo/dao/*.xml" />
</bean>
<!-- 配置DAO接口所在包 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.demo.dao"></property>
</bean>
<!-- 事物管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事务 注解配置方式, 开启事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
d. springmvc.xml 里面的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 自容器,只扫描controller -->
<context:component-scan base-package="com.demo.controller"/>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- 静态文件配置方式二,不喜欢的用自己喜欢的方式 -->
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 还有上传拦截配置也在这,不用就不配。我没配置,需要的自己去找。 -->
</beans>
e. sqlMapConfig.xml 这个是mybatis的配置,设置什么别名等等。
<?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>
<settings>
<!-- 开启延迟加载 ,默认值为true-->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置积极的懒加载,默认是true -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 二级缓存的总开关 -->
<setting name="cacheEnabled" value="true" />
</settings>
<!-- 自定义别名 -->
<typeAliases>
<package name="com.demo.po"/>
</typeAliases>
</configuration>
f. jdbc.properties 和 log4j.properties
jdbc.url = jdbc:mysql://localhost:13306/mybatis?useUnicode=true&characterEncoding=utf8
jdbc.driver = com.mysql.jdbc.Driver
jdbc.username= root
jdbc.password= 654321
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
4.整合好了,写点业务代码去访问吧。 写之前来一张最后的项目层次图。
5.添加图片服务器搭建和上传功能(图片上传到服务器回显)
a.最终效果图,忽略页面简陋:
b.创建图片服务器:
建议:创建好图片服务器之后,本地运行一下,访问localhost:8003/ssmDemoImage 检验服务本身是否成功。
c. ssmDemo里面添加图片上传功能
d.提醒:
-运行的时候,别忘了运行图片服务器项目。
-form表单提交,访问不到后台controller,报400错误:
有可能对象属性不一致, 问题可能出在createTime 这个字段上,按道理我在jsp页面上进行了<fmt:formatDate>标签转换不会有问题才对,但实际还是有问题。
解决:在实体类Date字段上面添加了一个注解@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 这个格式和jsp那转换的保持一致。
-图片服务器中上传的图片位置:不是看项目里面那个upload文件夹,在: XX盘workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\ssmDemoImage\upload
6.添加oscache缓存