`
devil13th
  • 浏览: 43298 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2+Spring 的集成

阅读更多
用到的基本元素

在SSH项目中,包括以下几个元素
hibernate的sessionFactory负责数据库的配置
hibernate的hibernateTemplate负责访问数据库
DAO将hibernateTemplate封装
Service负责各个业务处理
Action负责请求和业务处理的匹配以及页面的跳转

 
流程是这个样子

接受用户请求,Action负责调用service利用dao对数据库进行CRUD(create,read,update,delete)操作,返回处理结果。
Struts获取用户的请求,根据配置把请求分配到相应的Action中,在Action调用Service,返回处理结果

 

 

下面来说一下Struts2和Spring的项目例子

 

建立所有Action的基类PubAction

所有的业务Service都放到PubAction中并实现RequestAware,SessionAware接口(还有ResponseAware,ApplicationAware不过不常用这里没用到)代码如下:

package com.thd.action;

import java.util.Map;

import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.thd.service.article.ArticleService;
import com.thd.service.pub.TreeService;

/**
 * @author thd
 * @serial 所有系统Action的基类,所有需要的service陪在这个action中,其他类继承使用service
 */
public class PubAction implements RequestAware , SessionAware{
	private TreeService treeService;
	private ArticleService articleService;
	private Map<String, Object> request;
	private Map<String, Object> session;
	public void setSession(Map<String, Object> arg0) {
		this.request = arg0;
	}

	public void setRequest(Map<String, Object> arg0) {
		this.session = arg0;
	}

	public Map<String, Object> getRequest() {
		return request;
	}

	public Map<String, Object> getSession() {
		return session;
	}

	public TreeService getTreeService() {
		return treeService;
	}

	public void setTreeService(TreeService treeService) {
		this.treeService = treeService;
	}

	public ArticleService getArticleService() {
		return articleService;
	}

	public void setArticleService(ArticleService articleService) {
		this.articleService = articleService;
	}
}

 

建立模块的Action

模块的Action要继承PubAction,因为要用到的所有Service都放到了PubAction中,代码如下:

package com.thd.action.article;

import com.thd.action.PubAction;
import com.thd.pojo.Article;

/**
 * 
 * @author thd
 * @serial 文章模块的action,用于相关文章模块的所有操作
 */
public class ArticleAction extends PubAction {
	private Article article;
	
	/* 标识是修改文章 还是新增文章 update:修改 save:新增*/
	private String deal;
	
	/*
	 * 新建/编辑文章初始化处理
	 */
	public String articleSaveOrUpdate(){
		
		/*
		 * 修改操作
		 */
		if(deal.equals("update")){
			
		}
		return "articleSaveOrUpdate";
	}
	
	/*
	 * 新增/编辑文章提交处理
	 */
	public String articleSaveOrUpdateSubmit(){
		System.out.println(article.getTit());
		System.out.println(article.getDes());
		System.out.println(article.getCon());
		System.out.println(article.getDic());
		this.getArticleService().saveOrUpdate(article);
		return "articleSaveOrUpdate";
	}
	
	public Article getArticle() {
		return article;
	}
	public void setArticle(Article article) {
		this.article = article;
	}

	public String getDeal() {
		return deal;
	}

	public void setDeal(String deal) {
		this.deal = deal;
	}
}

 在模块的Action中,要调用service直接调用getService就可以直接得到,需要那个拿哪个,在Spring配置中这些service都是配到pubAction中,所以添加或修改service在pubAction中操作,模块的Action中就负责去拿和用就可以了,不用再配置了。

 

建立Service接口和实现类

接口:

package com.thd.service.article;

import com.thd.pojo.Article;

/**
 * @author thd
 * @serial 文章模块的所有操作
 */

public interface ArticleService {
	/**
	 * 保存/更新 文章 如果id属性存在则是更新,如果不存在则是保存
	 * @param article 保存/更新的文章对象
	 */
	public void saveOrUpdate(Article article);
	
	/**
	 * 保存文章
	 * @param article 保存的文章对象
	 */
	public void save(Article article);
	
	/**
	 * 更新文章
	 * @param article 更新的文章
	 */
	public void update(Article article);
	
}
	

 实现类:

package com.thd.serviceImpl.article;

import java.util.Date;

import com.thd.dao.DaoImpl;
import com.thd.pojo.Article;
import com.thd.service.article.ArticleService;

/**
 * @author thd
 *
 */

public class ArticleServiceImpl implements ArticleService {
	private DaoImpl dao;
	
	/*
	 * (non-Javadoc)
	 * @see com.thd.service.article.ArticleService#saveOrUpdate(com.thd.pojo.Article)
	 */
	public void saveOrUpdate(Article article) {
		article.setIdate(new Date());
		article.setState("1");
		this.dao.saveOrUpdate(article);
	}
	
	/*
	 * (non-Javadoc)
	 * @see com.thd.service.article.ArticleService#save(com.thd.pojo.Article)
	 */
	public void save(Article article) {
		article.setIdate(new Date());
		article.setState("1");
		this.dao.save(article);
	}

	/*
	 * (non-Javadoc)
	 * @see com.thd.service.article.ArticleService#update(com.thd.pojo.Article)
	 */
	public void update(Article article) {
		article.setIdate(new Date());
		this.dao.update(article);
	}

	public DaoImpl getDao() {
		return dao;
	}

	public void setDao(DaoImpl dao) {
		this.dao = dao;
	}

}

 实现类中要加入dao这个属性,以便用来访问数据库。在Spring配置文件中配置注入到service实现类中

 

建立Dao类

建立Dao类,用于访问数据库,代码如下:

		
package com.thd.dao;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class DaoImpl extends HibernateDaoSupport {
	public void save(Object obj) {
		this.getHibernateTemplate().save(obj);
	};

	public void update(Object obj) {
		this.getHibernateTemplate().update(obj);
	}

	public void delete(Object obj) {
		this.getHibernateTemplate().delete(obj);
	}
	
	public void saveOrUpdate(Object obj){
		this.getHibernateTemplate().saveOrUpdate(obj);
	}
	
	public List findByHql(String hql){
		return this.getHibernateTemplate().find(hql);
	}
	
	public Object findById(Class c,Serializable id){
		return this.getHibernateTemplate().get(c, id);
	}
	

	public List findBySql(final String sql) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session) {
				Query query = session.createSQLQuery(sql);
				return query.list();
			}
		});
	}

	public void executeSql(final String sql) {
		this.getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session) {
				Query query = session.createSQLQuery(sql);
				query.executeUpdate();
				return null;
			}
		});
	}
	
	public List findPageSql( final String sql,final int currpage, final int rowsNum, final int maxResult) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session s) throws HibernateException,
					SQLException {
								Query query = s.createSQLQuery(sql);
				
				if (rowsNum != -1) {
					query.setFirstResult((currpage - 1) * maxResult);
					query.setMaxResults(maxResult);
				}
				List list = query.list();
				return list;
			}
		});
	}
}

 

 

Spring配置文件

Spring的配置文件,代码如下:

<?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.5.xsd">

	<!-- hibernate sessionFactory配置 -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation"
			value="classpath:hibernate.cfg.xml">
		</property>
	</bean>
	
	<!-- hibernate hibernateTemplate配置 -->
	<bean id="hibernateTemplate"
		class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<!-- 事务处理配置 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory"/>
		</property>	
	</bean>
	
	<!-- 事务处理配置 -->
	<bean id="serviceProxy" abstract="true" lazy-init="true"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="insert*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="regist*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>
	
	
	<!-- 数据库操作类配置 -->
	<bean id="dao" class="com.thd.dao.DaoImpl">
		<property name="hibernateTemplate">
			<ref bean="hibernateTemplate"/>
		</property>
	</bean>
	
	
	<!-- service层配置 -->
	<bean id="treeServiceImpl" class="com.thd.serviceImpl.pub.TreeServiceImpl">
		<property name="dao">
			<ref bean="dao"/>
		</property>
	</bean>
	<bean id="treeServiceProxy" parent="serviceProxy">
		<property name="target">
			<ref bean="treeServiceImpl"/>
		</property>
	</bean>
	
	<bean id="articleServiceImpl" class="com.thd.serviceImpl.article.ArticleServiceImpl">
		<property name="dao">
			<ref bean="dao"/>
		</property>
	</bean>
	<bean id="articleServiceProxy" parent="serviceProxy">
		<property name="target">
			<ref bean="articleServiceImpl"/>
		</property>
	</bean>
	
	
	<!-- PubAction的配置 注入了所有业务的Service -->
	<bean id="pubAction" abstract="true" class="com.thd.action.PubAction">
		<property name="treeService">
			<ref bean="treeServiceProxy"/>
		</property>
		<property name="articleService">
			<ref bean="articleServiceProxy"/>
		</property>
	</bean>
	
	<!-- 所有模块的Action配置,要继承pubAction!! -->
	<bean name="treeAction" class="com.thd.action.pub.TreeAction" parent="pubAction"></bean>
	<bean name="articleAction" class="com.thd.action.article.ArticleAction" parent="pubAction"></bean>
	
</beans>

 

分享到:
评论

相关推荐

    采用共享jar包部署struts2+spring集成项目会遇到的问题

    这篇博客文章“采用共享jar包部署struts2+spring集成项目会遇到的问题”可能涉及了如何解决这些问题的方法。 首先,让我们探讨一下Struts2和Spring集成的基本概念。Struts2是一个基于MVC模式的开源Web应用框架,它...

    struts2+spring+mybatis+easyui的实现

    同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action可以直接由Spring管理,增强了系统的可测试性。 **MyBatis** 是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了更灵活的SQL操作...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    struts2+spring+Ibatis框架包

    这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于MVC(Model-View-Controller)模式的Web应用。 Struts2作为MVC框架,负责处理应用程序的控制逻辑。它通过Action类和配置文件定义...

    struts2+spring+mybatis框架

    Struts2、Spring和MyBatis是Java Web开发中经典的三大框架,它们组合起来可以构建出高效、可维护的Web应用程序。以下是对这三个框架及其整合的详细解释。 **Struts2框架** Struts2是一个基于MVC(Model-View-...

    struts2+spring+ibatis+mysql

    这个组合集成了强大的MVC(Model-View-Controller)框架Struts2、依赖注入与面向切面编程的Spring框架、轻量级持久层框架Ibatis以及关系型数据库管理系统MySQL。 1. **Struts2**:Struts2是Apache软件基金会下的一...

    基于Struts2+Spring+Hibernate+MySql的注册登录系统.zip

    Struts2、Spring、Hibernate和MySql这四个技术是Java Web开发中常用的一套经典组合,被称为SSH框架。这个注册登录系统就是利用这些技术构建的。下面将详细讲解这套组合的相关知识点。 首先,Struts2是一个强大的MVC...

    struts2+spring2.5+hibernate3.2整合完整项目,带数据库脚本

    Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    2. **配置文件**:struts-config.xml定义Struts的配置,spring-beans.xml管理Spring的bean,hibernate.cfg.xml配置Hibernate的数据库连接,可能还有实体类的映射文件(hbm.xml或使用注解)。 3. **JSP页面**:展示...

    struts2+spring练习

    4. **Struts2与Spring集成**:为了结合这两个框架的优点,我们需要配置Struts2的Spring插件。这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`&lt;package&gt;`...

    hiberbate + struts2 +spring 集成实例

    在Java Web开发中,"Hibernate + Struts2 + Spring"是一种经典的MVC(Model-View-Controller)架构组合,常被称为S2SH框架。这个框架集合了Hibernate的强大ORM能力、Struts2的优秀表现层控制以及Spring的依赖注入和...

    Struts2+Spring+Hibernate集成开发环境的配置小例子

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的组合被称为SSH2。SSH2框架集成可以实现MVC(Model-View-Controller)架构,提供强大的数据持久化、业务逻辑管理和用户界面控制能力。下面我们将详细...

    最新项目系统:Struts2+Spring4+Hibernate4三大框架整合

    Struts2、Spring4和Hibernate4是Java Web开发中的三大主流框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个最新的项目系统整合了这三个框架,旨在提供一个高效、灵活且易于维护的开发环境。下面将详细...

    struts2+spring+springstruts2+spring+springstruts2+spring+spring

    将Spring与Struts2集成,可以利用Spring的强大功能来增强Struts2的能力。通常,Spring被用作业务逻辑层和服务层的依赖注入容器,而Struts2则负责处理Web层的请求和响应。这种集成的好处包括: - **依赖注入**:使用...

    Struts2+Spring框架集成实例

    3. **Struts2与Spring集成**:将Struts2和Spring整合可以实现更高效的控制流管理和业务逻辑处理。通常,我们会在Spring中定义Bean,然后在Struts2的Action类中通过@Autowired注解注入这些Bean,从而实现业务逻辑的...

    基于Struts 2+Hibernate+Spring实现论坛系统

    最后,Spring 框架作为企业级应用的全能选手,不仅提供了依赖注入(DI)和面向切面编程(AOP)功能,还集成了其他框架,如Struts 2 和 Hibernate。在论坛系统中,Spring 可以管理所有组件的生命周期,通过IoC容器...

    Struts2+Hibernate+Spring基于单表的增删改查code

    学习这个项目,你可以掌握SSH框架的集成方法,了解如何通过Struts2接收用户请求并调用业务逻辑,由Hibernate处理数据库操作,最后Spring管理整个流程。同时,这也是一个很好的实践,帮助初学者理解Web开发中模型、...

    struts2+spring3+ibatis项目整合案例

    在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...

    struts2+spring2+ibatis

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们的集成应用可以构建出高效、灵活的后端系统。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责处理HTTP请求和展示视图;Spring...

    flex与+struts2+hibernate+spring集成实例项目

    flex与+struts2+hibernate+spring集成实例项目,源码奉献,物有所值

Global site tag (gtag.js) - Google Analytics