配置
				Spring
				环境公共设置的
				applicationContext.xml
				文件放在
				/WEB-INF/
				目录下,
				首先定义视图类型为
				Jstl
				,并约定
				JSP
				文件的默认保存路径,配置异常捕获处理
				Bean
				,当系统发生异常时,自动重新定向到
				error.jsp
				文件显示异常内容。
		
		
				
						
								
										| 
														<?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: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-2.0.xsd
												 
														
																           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
												 
														
																           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
												 
														
																 
														
												 
														
																    <!--
														返回的视图资源的前缀和后缀,基于
														Jstl
														模板
														-->
												 
														
																    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
												 
														
																        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
												 
														
																       
																 <property name="prefix" value="/WEB-INF/jsp/"/>
												 
														
																    </bean>
												 
														
																 
														
												 
														
																    <!--
														启动加载异常处理的类,用于监听各模块中触发的异常
														-->
												 
														
																    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
												 
														
																        <property name="defaultErrorView" value="error.jsp"/>
												 
														
																    </bean>
												 
														</beans>
												 | 
						
				
		 
		
		
				在
				applicationContext.xml
				文件中加入下面配置,首先加载数据库配置文件
				jdbc.properties
				,然后配置数据源,此处使用的是
				TOMCAT
				自带的数据库连接池实现,其实就是
				Apache DBCP
				连接池的重新封装。
		
		
				
						
								
										| 
														<!--
														加载
														properties
														配置文件
														-->
												 
														<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
												 
														
																    <property name="locations">
												 
														
																        <list>
												 
														
																            <value>/WEB-INF/jdbc.properties</value>
												 
														
																        </list>
												 
														
																    </property>
												 
														</bean>
												 
														
																 
														
												 
														<!--
														数据源
														-->
												 
														<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
												 
														
																    <property name="driverClassName" value="${jdbc.driverClassName}"/>
												 
														
																    <property name="url" value="${jdbc.url}"/>
												 
														
																    <property name="username" value="${jdbc.username}"/>
												 
														
																    <property name="password" value="${jdbc.password}"/>
												 
														</bean>
												 | 
						
				
		 
		
				  jdbc.properties
				文件在
				/WEB-INF/
				目录下:
		
		
				
						
								
										| 
														jdbc.driverClassName=oracle.jdbc.OracleDriver
												 
														jdbc.url=jdbc:oracle:thin:@localhost:1521:oradb
												 
														jdbc.username=demo
												 
														jdbc.password=123456
												 | 
						
				
		 
		
		
				在
				applicationContext.xml
				文件中加入下面配置,数据库事务管理,采用的是
				AOP
				代理,对所有文件名称以
				Logic
				结尾的接口类进行事务代理。在接口类中,方法名称以
				insert
				、
				update
				等开头的采用事务管理,设置
				Propagation 
				为
				REQUIRED
				表示支持当前事务,如果当前没有事务,就新建一个事务;而其他的方法以
				*
				表示,设置
				Propagation 
				为
				SUPPORTS
				表示支持当前事务,如果当前没有事务就以非事务方式执行,
				read-Only
				为
				true
				表示对应事务被最优化为只读事务。
		
		
				
						
								
										| 
														<!--
														事务管理器
														-->
												 
														<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
												 
														
																    <property name="dataSource" ref="dataSource"/>
												 
														</bean>
												 
														
																 
														
												 
														<!--aop
														代理,对所有以
														Logic
														为后缀文件名的接口类进行代理
														-->
												 
														<aop:config>
												 
														
																    <aop:advisor pointcut="execution(* *..*Logic.*(..))" advice-ref="txAdvice"/>
												 
														</aop:config>
												 
														
																 
														
												 
														<!--
														数据库事务代理,对类中的指定前缀的方法进行事务控制
														-->
												 
														<tx:advice id="txAdvice">
												 
														
																    <tx:attributes>
												 
														
																        <tx:method name="insert*" propagation="REQUIRED"/>
												 
														
																        <tx:method name="update*" propagation="REQUIRED"/>
												 
														
																        <tx:method name="delete*" propagation="REQUIRED"/>
												 
														
																        <tx:method name="upload*" propagation="REQUIRED"/>
												 
														
																        <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
												 
														
																    </tx:attributes>
												 
														</tx:advice>
												 | 
						
				
		 
		
				
		
		
				pointcut
				的语法说明如下:
		
		
				execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
				
						
						
				
		
		
				
						Ø  
				
				除了返回类型模式、名字模式和参数模式以外,所有的部分都是可选的;
				
						
						
				
		
		
				
						Ø  
				
				返回类型模式(
				ret-type-pattern
				)决定了方法的返回类型必须依次匹配一个连接点,返回类型模式
				*
				代表了匹配任意的返回类型;
				
						
						
				
		
		
				
						Ø  
				
				名字模式(
				name-pattern
				)匹配的是方法名,可以使用
				* 
				通配符作为所有或者部分命名模式;
				
						
						
				
		
		
				
						Ø  
				
				参数模式(
				param-pattern
				)稍微有点复杂,
				() 
				匹配了一个不接受任何参数的方法,而
				(..) 
				匹配了一个接受任意数量参数的方法(零或者更多),模式
				(*) 
				匹配了一个接受一个任何类型的参数的方法,模式
				(*,String) 
				匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是
				String
				类型。
				
						
						
				
		
		
				
						
								 
						
				
		
		
				下面给出一些常见切入点表达式的例子。
				
						
						
				
		
		
				
						Ø  
				
				任意公共方法的执行:
				execution(public * *(..))
				;
				
						
						
				
		
		
				
						Ø  
				
				任何一个以“
				set
				”开始的方法的执行:
				execution(* set*(..))
				;
				
						
						
				
		
		
				
						Ø  
				
				AccountService 
				接口的任意方法的执行:
				execution(* com.xyz.service.AccountService.*(..))
				;
				
						
						
				
		
		
				
						Ø  
				
				定义在
				service
				包里的任意方法的执行:
				execution(* com.xyz.service.*.*(..))
				;
				
						
						
				
		
		
				
						Ø  
				
				定义在
				service
				包或者子包里的任意方法的执行:
				execution(* com.xyz.service..*.*(..))
				;
				
						
						
				
		
		
				
						
								 
						
				
		
		
				表达式
				execution(* *..BookManager.save(..))
				的解读:
				
						
						
				
		
		
				
						Ø  
				
				第一颗
				*
				代表
				ret-type-pattern 
				返回值可任意;
				
						
						
				
		
		
				
						Ø  
				
				*..BookManager 
				代表任意
				Pacakge
				里的
				BookManager
				类,如果写成
				com.xyz.service.* 
				则代表
				com.xyz.service
				下的任意类,
				com.xyz.service..* com.xyz.service
				则代表
				com.xyz.service
				及其子
				package
				下的任意类;
				
						
						
				
		
		
				
						Ø  
				
				save
				代表
				save
				方法,也可以写
				save* 
				代表
				saveBook()
				等方法;
				
						
						
				
		
		
				
						Ø  
				
				(..) 
				匹配
				0
				个参数或者多个参数的,任意类型,
				(x,..) 
				第一个参数的类型必须是
				X
				,
				(x,,,s,..) 
				匹配至少
				4
				个参数,第一个参数必须是
				x
				类型,第二个和第三个参数可以任意,第四个必须是
				s
				类型。
				
						
						
				
		
		
		
				控制器的配置文件为servlet-xxx.xml,xxx为URI请求的扩展名,此文件可以在web.xml中配置,如果不配置,spring默认查找的是xxx-servlet.xml文件,前后调转一下可方便很多的同类文件排序查看。
  如果配置了多个处理器映射,并且配置了对同一请求的处理,那么哪个处理器映射(BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping)会被优先查找映射关系呢?最好的方法是配置order属性,DispatcherServlet 按顺序采用映射处理器,数值小的会被优先匹配。
		
		
				
						
								
										| 
														<?xml version="1.0" encoding="UTF-8"?>
												 
														<beans xmlns="http://www.springframework.org/schema/beans"
												 
														
																       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-2.0.xsd">
												 
														
																 
														
												 
														
																    <import resource="applicationContext.xml"/>
												 
														
																 
														
												 
														
																     <bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="order" value="0"/>
 </bean>
 
 
														
																    <bean name="/mainpage.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController"><property name="viewName" value="mainpage.jsp"/>
 </bean>
 
 
														
																    <!--无拦截请求--><bean id="noInterceptors" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 <property name="order" value="2"/>
 <property name="mappings">
 <props>
 <prop key="login.do">doController</prop>
 </props>
 </property>
 </bean>
 
 
														
																    <!--有拦截请求--><bean id="hasInterceptors" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 <property name="order" value="1"/>
 <property name="interceptors">
 <list>
 <ref bean="authInterceptor"/>
 </list>
 </property>
 <property name="mappings">
 <props>
 <prop key="enter.do">doController</prop>
 <prop key="logout.do">doController</prop>
 </props>
 </property>
 </bean>
 
 
														
																    <!--
														请求与方法映射控制器
														-->
												 
														
																    <bean id="doController" class="com.fyyk.core.LogicController">
												 
														
																        <property name="logicClass" ref="doLogic"/>
												 
														
																        <property name="uriMethodMapping">
												 
														
																            <props>
												 
														
																                <prop key="login">login</prop>
												 
														
																                <prop key="enter">enter</prop>
												 
														
																                <prop key="logout">logout</prop>
												 
														
																            </props>
												 
														
																        </property>
												 
														
																    </bean>
												 
														
																 
														
												 
														</beans>
												 | 
						
				
		 
		
		
				逻辑类的配置文件为
				applicationContext-xxx.xml
				,此文件可以在
				web.xml
				中配置,如
				applicationContext-admin.xml
				文件,也可以配置合并在
				applicationContext.xml
				中:
		
		
				
						
								
										| 
														
																    <bean id="authInterceptor" class="com.fyyk.interceptor.AuthInterceptor">
												 
														
																        <property name="noLoginRedirect" value="/WEB-INF/jsp/noLogin.jsp"/>
												 
														
																    </bean>
												 
														
																 
														
												 
														
																    <bean id="doLogic" class="com.fyyk.logic.DoLogicImpl">
												 
														
																        <property name="dataSource" ref="dataSource"/>
												 
														
																    </bean>
												 |