Spring+struts集成方案(一)
u 配置struts框架
1.拷贝struts的jar包到项目/WEB-INF/lib中
2.拷贝struts-config.xml,web.xml配置文件到/WEB-INF中
3.拷贝资源文件到类路径下/WEB-INF/classes
u 集成Spring框架
1.拷贝spring.jar到项目/WEB-INF/lib中
2.拷贝log4j.jar,common-logging.jar到项目/WEB-INF/lib中
3.拷贝aop支持包spring_install\lib\aspectj\*.jar
4.拷贝spring配置文件及log4j的属性文件到src目录下
5.集成消除版本冲突的包,除去低版本的包
6.拷贝struts.jar到lib目录下
u 在web.xml配置监听器
<!-- spring Bean上下文监听器使用以下context-param获得spring配置文件的路径集合 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<!--spring Bean上下文监听器,用于加载beanfactory实例到ServletContext -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
u 在spring中配置数据源及事务的管理特性
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/info</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>java</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<!-- 配置事务的管理特性(隔离级别,传播特性) -->
<tx:advice id="transAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置切面,把事务 管理advice和切入点织入到一起-->
<aop:config>
<aop:advisor advice-ref="transAdvice"
pointcut ="execution(* com.xasxt.manager..*.*(..))"/>
</aop:config>
u 在action中做如下处理
//耦和性小,第一种集成,它的实现类继承自JdbcDaoSupport
BeanFactory bf = WebApplicationContextUtils.getRequiredWebApplicationContext(
request.getSession().getServletContext());
RegManager rm = (RegManager) bf.getBean("regManager");
rm.add(reg);
Spring+struts集成方案(二)
u 在一种方案的基础上做如下操作:
6.拷贝spring-webmvc-struts.jar到lib目录下
7.在spring配置文件中配置action,并把属性id改为name,值使用struts action配置中的path属性
8.在struts-config.xml配置文件中把请求Action的type属性值改为:
org.springframework.web.struts.DelegatingActionProxy
也就是由以上代理获得spring创建的Action的引用,把请求转发给spring
框架所创建的Action,从而可以利用Spring的ioc
具体操作如下:
Ø 重新建立一个spring配置文件,专门放action的配置
<bean name="/reg" class="com.xasxt.web.struts.action.RegAction">
<property name="regManager">
<ref bean="regManager"/>
</property>
</bean>
Ø 修改struts配置文件,用代理模式
<action-mappings>
<action path="/reg"
type="org.springframework.web.struts.DelegatingActionProxy"
name="regForm"
parameter="method"
validate="false"
>
<forward name="success" path="/success.jsp"></forward>
</action>
Ø 在action中,用接口作为属性,注入spring容器中。
它的实现类同样继承自JdbcDaoSupport
RegManager regManager = null;
public RegManager getRegManager() {
return regManager;
}
public void setRegManager(RegManager regManager) {
this.regManager = regManager;
}
在调用方法时:直接RegForm rf = (RegForm) form;
Reg reg = new Reg();
BeanUtils.copyProperties(reg, rf);
regManager.add(reg);
Spring+struts+hibernate集成方案
u 同样在以上的基础上做如下操作:
集成hibernate框架
1. 拷贝hibernate.jar核心包到项目/WEB-INF/lib中
2. 拷贝hibernate_INSTALL\lib\*.jar到项目/WEB-INF/lib中
3. 创建hibernate.cfg.xml配置文件配置数据库连接,创建到类路径下
4. 集成清除版本冲突的jar包
5. 配置spring配置文件中事务
6. 在web.xml文件配置CharacterEncodingFilter及OpenSessionInViewFilter
<!-- 配置OpenSessionInView过滤器 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置字符集过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
u 现在可以把数据源配置到hibernate中,在spring中配置sessionFactory工厂
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
这个实现类继承自HibernateDaoSupport
<bean id="regManager" class="com.xasxt.manager.impl.RegManagerImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
u 增删改查的代码通过框架的集成,最后结果如下,很简单。
public void add(Reg reg) {
getHibernateTemplate().save(reg);
}
public void del(int id) {
getHibernateTemplate().delete(findById(id));
}
public List<Reg> findAll() {
return getHibernateTemplate().find("from Reg");
}
public Reg findById(int id) {
return (Reg) getHibernateTemplate().load(Reg.class, id);
}
public void update(Reg reg) {
getHibernateTemplate().update(reg);
}
u 注册器的实现
public class DateConvert implements Converter {
public Object convert(Class c, Object value) {
if(value instanceof Date){
return value;
}
Date d = null;
if(value instanceof String){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
d = sdf.parse(value.toString());
} catch (ParseException e) {
e.printStackTrace();
}
}
return d;
}
}
Ø 在写一个插件,继承自PlugIn
ConvertUtils.register(new DateConvert(), Date.class);
Ø 在struts配置文件中注册
<plug-in className="com.xasxt.common.plugIn.RegPlugIn"></plug-in>
Spring+dwr集成方案
u 配置dwr框架
l 拷贝dwr.jar文件及dwr.xml到工程目录下。
<allow>
<create creator="spring" javascript="Intro">
<param name="beanName" value="hello"/>
</create>
</allow>
l