@wxf
2019-07-26T06:28:05.000000Z
字数 10636
阅读 1326
项目实战
Controller层也就是SpringMVC,在SpringMVC包括三大组件:处理器映射器、处理器适配器、视图解析器,对于这三大组件我们是不可见的,这些都是SpringMVC框架给实现的。除了三大组件外还包括前端控制器。
<mvc:annotation-driven/>。它可以代替处理器映射器和处理器适配器。我们需要将配置文件放到web工程下,因为该工程为war工程,其他的工程只是一个jar包。当项目发布后,jar包是存放在lib文件下的,无法读取。
mybatis、spring、resource文件夹,用于区分配置文件。 
在mybatis文件夹下创建SqlMapConfig.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><!-- 分页工具包 --><plugins><plugin interceptor="com.github.pagehelper.PageHelper"><property name="dialect" value="mysql"></property></plugin></plugins></configuration>
创建applicationContext-jdbc.xml
该配置文件中需要配置的信息包括:加载配置文件、配置数据库连接池、配置sqlSessionFactory、配置mapper扫描器(加载mapper代理对象)。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 加载配置文件 --><context:property-placeholder location="classpath:resource/db.properties" /><!-- 数据库连接池-阿里的Druid(支持可视化监控,需在web.xml中配置) --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close"><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="driverClassName" value="${jdbc.driver}" /><property name="initialSize" value="3"></property><!-- 初始化数量 --><property name="minIdle" value="3" /><!-- 最小空余 --><property name="maxActive" value="20" /><!-- 最大活跃数 --><property name="maxWait" value="60000"></property> <!-- 最大等待时长 --><property name="filters" value="stat,wall"></property><!-- 数据库监控 --></bean><!-- 让spring管理sqlSessionfactory,使用mybatis和spring整合包中的SqlSessionFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /><!-- 自动扫描mybatis的SQL配置文件 --><property name="mapperLocations" value="classpath:com/wxf/persist/mapper/*.xml" /></bean><!-- 配置扫描包,加载mapper代理对象,使用mybatis和spring整合包中的MapperScannerConfigurer--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> --> <!-- 扫描工具会自动查找sqlSessionFactory,所以这里不用指定了 --><property name="basePackage" value="com.wxf.persist.dao" /></bean><!-- 数据库监控-监控慢SQL --><bean id="stat" class="com.alibaba.druid.filter.stat.StatFilter"><property name="slowSqlMillis" value="3000"></property><property name="logSlowSql" value="true"></property><property name="mergeSql" value="true"></property></bean><!-- 数据库监控-数据库类型 --><bean id="wall" class="com.alibaba.druid.wall.WallFilter"><property name="dbType" value="mysql"></property></bean></beans>
创建db.properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mmall?characterEncoding=utf-8&useUnicode=truejdbc.username=rootjdbc.password=123456
创建applicationContext-service.xml
该配置文件中需要配置的信息包括:配置扫描器(加载Service实现类)。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 包扫描器,加载Service实现类 --><context:component-scan base-package="com.wxf.logic"></context:component-scan></beans>
创建applicationContext-tr.xml
配置事务管理,需要配置的信息包括:事务管理器、事务通知、事务切面。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /> <!-- 数据源 --></bean><!-- 通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 传播行为 --><tx:method name="save*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="create*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="find*" propagation="SUPPORTS" read-only="true" /><tx:method name="select*" propagation="SUPPORTS" read-only="true" /><tx:method name="get*" propagation="SUPPORTS" read-only="true" /><tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" /></tx:attributes></tx:advice><!-- 切面 --><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wxf.logic.service.*.*(..))" /></aop:config></beans>
创建springmvc.xml
在该配置文件中配置SpringMVC相关的组件:扫描器(加载controller)、配置注解驱动、配置视图解析器。
<?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: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.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 包扫描器 --><context:component-scan base-package="com.wxf.mmall.controller" /><!-- 配置注解驱动 --><mvc:annotation-driven /><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean></beans>
注意:在配置前端控制器时,如果拦截所有请求包括静态资源,那么就需要在springmvc.xml配置文件中添加资源映射。后面会讲到。
配置web.xml
在该配置文件中配置:spring容器、SpringMVC的前端控制器、处理post请求乱码的过滤器。
<?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_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>mmall</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 配置spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext-*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置前端控制器 --><servlet><servlet-name>mmall-manager</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value><!-- 指定classpath时,程序会从resources文件夹下查找配置文件;不指定时,程序会从WEB-INFO文件夹下查找配置文件。 --></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>mmall-manager</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 解决post乱码 --><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><!-- druid可视化监控配置 --><servlet><servlet-name>DruidStatServlet</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><!-- 登录信息 --><init-param><param-name>loginUsername</param-name><param-value>druid</param-value></init-param><init-param><param-name>loginPassword</param-name><param-value>druid</param-value></init-param></servlet><servlet-mapping><servlet-name>DruidStatServlet</servlet-name><url-pattern>/sys/druid/*</url-pattern></servlet-mapping><filter><filter-name>DruidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>*.js,*.css,*.jpg,*.png,*.ico,*.gif,/sys/druid/*</param-value></init-param></filter><filter-mapping><filter-name>DruidWebStatFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
配置资源映射
由于在SpringMVC的前端控制器中我们配置的是<url-pattern>/</url-pattern>,/表示拦截所有请求包括静态资源。所以需要在springmvc.xml中添加静态资源的映射。
<!-- 资源映射 --><mvc:resources mapping="/css/**" location="/WEB-INF/css/"></mvc:resources><mvc:resources mapping="/js/**" location="/WEB-INF/js/"></mvc:resources>
在WEB-INF文件夹下创建css、js、jsp等文件夹。如下图:
在这里我们使用logback和sl4f对系统中的日志进行处理。
创建logback.xml
在该配置文件中配置:日志输出形式,日志级别等。配置如下:
<?xml version="1.0" encoding="UTF-8" ?><configuration scan="true" scanPeriod="60 seconds"><!-- scan属性作用是修改配置文件后允许自动扫描加载log配置文件 --><!-- 输出控制台--><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern></encoder></appender><!-- 输出到文件并按天压缩 --><appender name="system-log" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${catalina.home}/logs/system-log.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${catalina.home}/logs/system-log.%d{yyyy-MM-dd}.log.gz</FileNamePattern></rollingPolicy><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern></layout></appender><!--<logger name="XXX" level="INFO"><appender-ref ref="指定一个appender"></appender-ref></logger>--><!-- 日志级别(TRACE < DEBUG < INFO < WARN < ERROR) --><root level="INFO"><appender-ref ref="STDOUT"></appender-ref></root></configuration>
至此,SSM框架整合完成。最终形成的问价结构如下图:
