作用:
SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层
使用spring MVC负责请求的转发和视图管理
spring实现业务对象管理,mybatis作为数据对象的持久化引擎
原理:
SpringMVC:
1.客户端发送请求到DispacherServlet(分发器)
2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller
3.Controller调用业务逻辑处理后,返回ModelAndView
4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图
5.视图负责将结果显示到客户端

搭建:
项目结构如下

1、引用需要的jar包,在pom.xml中添加以下内容
2、整合SpringMVC,配置spring-mvc.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:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.1.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
- <!-- 告诉spring注册几个默认的bean,用来处理@requestmapping及处理请求的适配器-->
- <mvc:annotation-driven/>
- <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 (注册@Component,@Controller,@Service,@Repository等注解标记的组件)-->
- <context:component-scan base-package="com.mojxtang.controller" />
- <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
- <bean id="mappingJacksonHttpMessageConverter"
- class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- <property name="supportedMediaTypes">
- <list>
- <value>text/html;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
- <bean
- class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
- <property name="messageConverters">
- <list>
- <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->
- </list>
- </property>
- </bean>
- <!-- 定义跳转的文件的前后缀 ,视图模式配置-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
- <property name="prefix" value="/" /> <!-- /WEB-INF/jsp/ -->
- <property name="suffix" value=".html" />
- </bean>
-
-
- <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <!-- 默认编码 -->
- <property name="defaultEncoding" value="utf-8" />
- <!-- 文件大小最大值 -->
- <property name="maxUploadSize" value="10485760000" />
- <!-- 内存中的最大值 -->
- <property name="maxInMemorySize" value="40960" />
- </bean>
-
- </beans>
3、配置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>Archetype Created Web Application</display-name>
-
- <!-- 配置编码过滤器Start -->
- <filter>
- <!-- url-pattern的值可以是/也可以是/* -->
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <async-supported>true</async-supported>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- 配置编码过滤器End -->
-
- <!-- 如果同一个bean被定义两次,后面一个优先 -->
- <!-- classpath*与classpath的区别:前者遍历所有的classpath加载所有符合条件的资源(效率较差),后者只会去找第一个符合条件的资源(避免重名) -->
- <context-param>
- <description></description>
- <param-name>contextConfigLocation</param-name>
- <!-- <param-value>classpath*:spring-*.xml</param-value> -->
- <param-value>
- classpath:spring-mybatis.xml
- </param-value>
- </context-param>
-
- <!-- 此监听器主要用于解决java.beans.Introspector导致的内存泄漏的问题,回收JavaBean中的缓存垃圾,防止内存变大。默认可以不配 -->
- <!-- 此监听器应该配置在web.xml中与Spring相关监听器中的第一个位置(也要在ContextLoaderListener的前面)-->
- <listener>
- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
- </listener>
- <!-- 启动spring容器用,容器用于管理Bean-->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
-
- <!-- DispatcherServlet 针对MVC上下文加载,即拦截请求,分发请求给Controller -->
- <!-- load-on-startup 标记容器是否在启动的时候就加载这个servlet, >=0时启动,其他情况被选择才启动,相当于懒加载和饿汉模式 -->
- <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:spring-mvc.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- <async-supported>true</async-supported>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>SpringMVC</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
-
- <!-- 解决样式资源丢失问题 -->
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>*.jpg</url-pattern>
- <url-pattern>*.js</url-pattern>
- <url-pattern>*.css</url-pattern>
- <url-pattern>*.png</url-pattern>
- <url-pattern>*.gif</url-pattern>
- <url-pattern>*.json</url-pattern>
- <url-pattern>*.html</url-pattern>
- <url-pattern>*.htm</url-pattern>
- <url-pattern>*.swf</url-pattern>
- <url-pattern>*.eot</url-pattern>
- <url-pattern>*.svg</url-pattern>
- <url-pattern>*.ttf</url-pattern>
- <url-pattern>*.woff</url-pattern>
- <url-pattern>*.woff2</url-pattern>
- <url-pattern>*.jpeg</url-pattern><!-- 页面不显示图片,格式不允许 -->
- </servlet-mapping>
-
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
- </web-app>
4、配置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>
- <!-- 引入db.properties文件 <properties resource="db.properties"> <property name="driver"
- value="oracle.jdbc.driver.OracleDriver"/> </properties> -->
- <!-- 开启延迟加载 -->
- <settings>
- <setting name="lazyLoadingEnabled" value="true" />
- <setting name="aggressiveLazyLoading" value="false" />
- </settings>
- <plugins>
- <plugin interceptor="com.github.pagehelper.PageHelper">
- <property name="dialect" value="mysql" />
- <property name="offsetAsPageNum" value="true" />
- <property name="rowBoundsWithCount" value="true" />
- <property name="pageSizeZero" value="true" />
- <property name="reasonable" value="false" />
- <property name="params" value="pageNum=start;pageSize=limit;" />
- <property name="returnPageInfo" value="check" />
- </plugin>
- </plugins>
- </configuration>
5、配置spring-mybatis.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:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.1.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
- <!-- 自动扫描 com.znkj.dao,com.znkj.service-->
- <context:component-scan base-package="com.mojxtang"/>
-
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
- <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
- <property name="username" value="root"/>
- <property name="password" value="123123"/>
- </bean>
-
-
- <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <!-- 加载 mybatis-config.xml文件-->
- <property name="configLocation" value="classpath:mybatis-config.xml"></property>
- <!-- 自动扫描*.xml文件 -->
- <property name="mapperLocations" value="classpath:com/mojxtang/mapper/*.xml"></property>
- </bean>
-
- <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.mojxtang.dao" />
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
- </bean>
-
- <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
-
- </beans>
6、配置log4j.properties
- log4j.rootLogger=DEBUG, stdout, logfile,ERROR
- #配置根Logger:设定日志记录的最低级别,
- log4j.category.org.springframework=ERROR
- log4j.category.org.apache=INFO
- log4j.logger.org.hibernate=ERROR
-
- #输出到控制台
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Threshold=ERROR
- #:指定日志信息的最低输出级别,默认为DEBUG。
- log4j.appender.stdout.ImmediateFlush=true
- #表示所有消息都会被立即输出,设为false则不输出,默认值是true。
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- #可以灵活自定义布局模式
- log4j.appender.stdout.Target=System.out
- #默认值是System.out。
- log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
- #设定以怎样的格式显示消息
-
- #文件大小到达指定尺寸的时候产生一个新的文件
- log4j.appender.logfile=org.apache.log4j.RollingFileAppender
- log4j.appender.logfile.File=${catalina.home}/webapps/error/log.log
- #日志的输出文件所在目录
- log4j.appender.logfile.Append=false:
- #true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
- log4j.appender.logfile.Threshold=INFO
- log4j.appender.logfile.MaxFileSize=2048KB
- #后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
- log4j.appender.logfile.MaxBackupIndex=2
- #指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。
- log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
- log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
-
- #每天产生一个日志文件
- log4j.appender.DAILY=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.DAILY.Threshold=INFO
- log4j.appender.DAILY.File=${catalina.home}/webapps/error/log.log
- log4j.appender.DAILY.Append=true
- log4j.appender.DAILY.DatePattern='_'yyyy-MM-dd'.txt'
- #每天滚动一次日志文件,即每天产生一个新的日志文件。当天的日志文件名为logging.log4j,前一个天的日志文件名为logging.log4j.yyyy-MM-dd。
- log4j.appender.DAILY.layout=org.apache.log4j.PatternLayout
- log4j.appender.RollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
至此,大致的框架配置完成,增加自己需要的业务代码即可,或者如下配置

项目源码:SSM_Demo
数据库:db