文章目錄
1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application*.xml</param-value>
<!--<param-value>/WEB-INF/applicationContext.xml</param-value>-->
<!--<param-value>classpath:application-context.xml,classpath:application-others.xml</param-value>-->
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<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>
<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>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--<param-value>/WEB-INF/classes/*-servlet.xml</param-value>-->
<param-value>classpath:*-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
更詳細的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>
<!--<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application*.xml</param-value>
<!--<param-value>/WEB-INF/applicationContext.xml</param-value>-->
<!--<param-value>classpath:application-context.xml,classpath:application-others.xml</param-value>-->
</context-param>
<!-- 在整合spring容器時使用ContextLoaderListener,它實現了ServletContextListener監聽器接口,ServletContextListener只負責監聽web容器啓動和關閉的事件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- RequestContextListener實現ServletRequestListener監聽器接口,該監聽器監聽HTTP請求事件,web服務器接收的每一次請求都會通知該監聽器 -->
<!--
IntrospectorCleanupListener 在使用Spring本身的時候並不需要使用此監聽器,因爲Spring自己的內部機制會立即清空對應的緩存。雖然,Spring本身不存在這樣的問題,但是如果和其它框架結合使用,而其它框架有這個問題,如Struts、Quartz等,那就需要配置這個監聽器,在銷燬ServletContext的時候清空對應緩存。
-->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<filter>
<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>
<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>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--<param-value>/WEB-INF/classes/*-servlet.xml</param-value>-->
<param-value>classpath:*-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
springmvc老版本使用log4j
web.xml中配置
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4j.properties配置
log4j.rootLogger=warn, stdout
### 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{yyyy-MM-dd HH:mm:ss} [%c{1}-%p %L] - %m%n
#spring jdbc sql
log4j.logger.org.springframework.jdbc.core=debug
#log4j.logger.org.springframework=debug
log4j.logger.org.hibernate=warn
#soms log
#log4j.logger.com.xxx.xxx=debug
#job log
#dailyRollingFile
#log4j.logger.com.bst.bx.jobs=INFO,joblog
#log4j.additivity.com.bst.bx.jobs=true
#log4j.appender.joblog=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.joblog.File=${catalina.home}/logs/job.log
#log4j.appender.joblog.DatePattern='.'yyyyMMdd
#log4j.appender.joblog.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] [%c{1} %L] - %m%n
#log4j.appender.joblog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c{1}-%p] %l - %m%n
#指定文件數量記錄日誌
log4j.logger.com.bst.bx.jobs=INFO,joblog
log4j.additivity.joblog=false
log4j.appender.joblog=org.apache.log4j.RollingFileAppender
log4j.appender.joblog.File=${catalina.home}/logs/job.log
log4j.appender.joblog.MaxFileSize=20000KB
log4j.appender.joblog.MaxBackupIndex=10
log4j.appender.joblog.layout=org.apache.log4j.PatternLayout
log4j.appender.joblog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] [%c{1} %L] - %m%n
過濾器
springmvc中web.xml使用過濾器
<filter>
<filter-name>apiLoginFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>apiLoginFilter</filter-name>
<url-pattern>/api/*</url-pattern>
<dispatcher>ASYNC</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
apiLoginFilter
2. springmvc.xml
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: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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<context:component-scan base-package="com.lwp.**.controller" />
<mvc:annotation-driven>
<!-- 註冊默認的內容 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000"/>
</bean>
<!-- 增加validate資源文件用於註解驗證 -->
<!--<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" >
<property name="validationMessageSource" ref="messageSource" />
</bean>-->
<!--
國際化
useCodeAsDefaultMessage 如果在國際化資源文件中找不到對應代碼的信息,就用這個代碼作爲名稱
-->
<!--<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!– <property name="basename" value="classpath:message"/> –>
<property name="useCodeAsDefaultMessage" value="true" />
<property name="basenames">
<list>
<value>message</value>
</list>
</property>
</bean> -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--<property name="prefix" value="/WEB-INF/views/"/>-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3. applicationContext.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: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/aop http://www.springframework.org/schema/context/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/context/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 啓用掃描 -->
<context:annotation-config />
<!-- 容器自動掃描IOC組件 -->
<context:component-scan base-package="com.lwp, com" />
<!--支持註解驅動的事務管理,指定事務管理器 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- aspectj支持自動代理實現AOP功能 -->
<aop:aspectj-autoproxy/>
<context:property-placeholder location="classpath*:properties/*.properties" />
<!-- 5.2後標誌刪除 -->
<!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:properties/*.properties</value>
</list>
</property>
</bean>-->
</beans>
4. applicationContext-dao.xml
配置 mybatis相關內容
可以根據官方說明填寫
<?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: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/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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--1 引入屬性文件,在配置中佔位使用 -->
<context:property-placeholder location="classpath*:properties/jdbc.properties" />
<!-- 2. druid 數據庫連接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.user}" />
<property name="password" value="${mysql.password}" />
<!-- 統計監控過濾器 -->
<property name="filters" value="stat" />
<!-- 連接池設置 -->
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
</bean>
<!--3 會話工廠bean sqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 數據源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 別名 -->
<property name="typeAliasesPackage" value="com.lwp.domain"/>
<!-- sql映射文件路徑 -->
<property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"></property>
</bean>
<!--4 自動掃描對象關係映射 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定會話工廠,如果當前上下文中只定義了一個則該屬性可省去 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!-- 指定要自動掃描接口的基礎包,實現接口 -->
<property name="basePackage" value="com.lwp.mapper"></property>
</bean>
<!--5 聲明式事務管理 -->
<!--定義事物管理器,由spring管理事務 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<aop:config>
<aop:pointcut id="businessService"
expression="execution(* com.lwp..service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="businessService" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!-- all methods starting with '*' are read-only -->
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
<!-- other methods use the default transaction settings (see below) -->
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
</beans>