@wxf
2019-07-26T14:28:05.000000Z
字数 10636
阅读 1027
项目实战
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.xsd
http://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.Driver
jdbc.url=jdbc:mysql://localhost:3306/mmall?characterEncoding=utf-8&useUnicode=true
jdbc.username=root
jdbc.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.xsd
http://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.xsd
http://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.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://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框架整合完成。最终形成的问价结构如下图: