spring学习笔记15--Spring2.x+Hibernate3.x +Struts1.x整合开发(3)struts再次尾随sh


上一章介绍了一.action未交给spring管理

本章介绍
二、action交给spring管理(实现依赖注入,简化action控制端代码)
这样action对象就不是有struts容器创建,而是由spring容器创建、

(1)将action类配置到spring配置文件中的一对bean标签中
注意:把action交给spring管理后,可以使用依赖注入在action中注入业务层的bean,确保action的path属性值与bean的名称相同
spring中由于id属相不能含有/所以使用name属性

 

<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	">


<!-- 配置数据源 -->
<bean id="dataSourceOrcl" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
	<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
	<property name="username" value="websb"/>
	<property name="password" value="ddit"/>
	<!-- 连接池启动时的初始值 -->
	<property name="initialSize" value="1"/>
	<!-- 连接池的最大连接数 -->
	<property name="maxActive" value="500"/>
	<!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,直到减少到MaxIdle为止 -->
	<property name="maxIdle" value="2"/>
	<!-- 最小空闲值,当空闲的连接数少于两个值时,连接池就会预申请一些连接数,以免洪峰来时来不及申请 -->
	<property name="minIdle" value="1"/>
</bean>
<!--hibernate二级缓存的配置  只存在一个(单例) -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	<property name="dataSource" ref="dataSourceOrcl"/>
		<!-- hibernate映射源数据 可以多个-->
		<property name="mappingResources">
		<list>
		<value>cn/itcast/bean/Person.hbm.xml</value>
		</list>
	</property>
	<property name="hibernateProperties">
	<value>
		hibernate.dialect=org.hibernate.dialect.OracleDialect<!--方言  -->
		hibernate.hbm2ddl.auto=update <!-- 是否根据映射源文件生成表结构 -->
		hibernate.show_sql=false <!-- 是否打印sql -->
		hibernate.format_sql=false<!-- 是否格式化sql -->
	</value>
	</property>
</bean>
<!-- 配置事务管理 :spring提供的hibernate事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--只要是通过sessionFactory创建的事务都会纳入这个管理器进行管理  -->
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 采用@Transaction注解方式使用事务
transaction-manager:指定事务管理器
 -->
<tx:annotation-driven transaction-manager="txManager"/>
<context:annotation-config/>
<bean id="personService" class="cn.itcast.service.imp.PersonServiceBean"></bean>
<!--将struts中的action交给spring,以至于实现依赖注入  -->
<bean name ="/person/list" class="cn.itcast.web.action.PersonSpringAction"></bean>
</beans>

(2)在struts配置文件中添加进spring的请求控制器
该请求控制器会先根据action的path属性值到spring容器中寻找跟改属性值同名的bean,如果寻找到即使用该bean处理用户请求
如果spring请求控制器在spring容器中没有找到相应的bean,则将请求转给struts,struts框架找path,进type

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<!--注意标签顺序: The content of element type "struts-config" must match "(display-name?,description?,data-sources?,form-
 beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)". -->
<struts-config>
 <action-mappings>
 	<action path="/person/list" validate="false">
 	<forward name="list" path="/WEB-INF/page/personlist.jsp"></forward>
 	</action>
 </action-mappings>
  	
  	<!-- 配置由spring提供的控制器 -->
 	<controller>
 		<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
 	</controller>
</struts-config>

spring控制器运行过程:

 

 

(3)action类得意简化,是的struts与spring容器进行解耦

package cn.itcast.web.action;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import cn.itcast.service.PersonService;

public class PersonSpringAction extends Action {
	/**
	 * 注解注入:先按对象名称匹配,不行再按类别匹配
	 */
	@Resource PersonService personService;
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
	/**
	 * 如果action没有交给spring管理,可以通过下面语句从appliaction域中获取spring容器
	 */
	/*WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());
	
	PersonService personService = (PersonService)ctx.getBean("personService");
	request.setAttribute("persons", personService.getPersons());
	return mapping.findForward("list");*/
		
		
	/**
	 * 将action交给spring容器管理,是的struts与spring解耦	
	 */
		request.setAttribute("persons",personService.getPersons());
		return mapping.findForward("list");
	}
	
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值