用到的基本元素
在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集成项目会遇到的问题”可能涉及了如何解决这些问题的方法。 首先,让我们探讨一下Struts2和Spring集成的基本概念。Struts2是一个基于MVC模式的开源Web应用框架,它...
同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action可以直接由Spring管理,增强了系统的可测试性。 **MyBatis** 是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了更灵活的SQL操作...
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于MVC(Model-View-Controller)模式的Web应用。 Struts2作为MVC框架,负责处理应用程序的控制逻辑。它通过Action类和配置文件定义...
Struts2、Spring和MyBatis是Java Web开发中经典的三大框架,它们组合起来可以构建出高效、可维护的Web应用程序。以下是对这三个框架及其整合的详细解释。 **Struts2框架** Struts2是一个基于MVC(Model-View-...
这个组合集成了强大的MVC(Model-View-Controller)框架Struts2、依赖注入与面向切面编程的Spring框架、轻量级持久层框架Ibatis以及关系型数据库管理系统MySQL。 1. **Struts2**:Struts2是Apache软件基金会下的一...
Struts2、Spring、Hibernate和MySql这四个技术是Java Web开发中常用的一套经典组合,被称为SSH框架。这个注册登录系统就是利用这些技术构建的。下面将详细讲解这套组合的相关知识点。 首先,Struts2是一个强大的MVC...
Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...
2. **配置文件**:struts-config.xml定义Struts的配置,spring-beans.xml管理Spring的bean,hibernate.cfg.xml配置Hibernate的数据库连接,可能还有实体类的映射文件(hbm.xml或使用注解)。 3. **JSP页面**:展示...
4. **Struts2与Spring集成**:为了结合这两个框架的优点,我们需要配置Struts2的Spring插件。这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`<package>`...
在Java Web开发中,"Hibernate + Struts2 + Spring"是一种经典的MVC(Model-View-Controller)架构组合,常被称为S2SH框架。这个框架集合了Hibernate的强大ORM能力、Struts2的优秀表现层控制以及Spring的依赖注入和...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的组合被称为SSH2。SSH2框架集成可以实现MVC(Model-View-Controller)架构,提供强大的数据持久化、业务逻辑管理和用户界面控制能力。下面我们将详细...
Struts2、Spring4和Hibernate4是Java Web开发中的三大主流框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个最新的项目系统整合了这三个框架,旨在提供一个高效、灵活且易于维护的开发环境。下面将详细...
将Spring与Struts2集成,可以利用Spring的强大功能来增强Struts2的能力。通常,Spring被用作业务逻辑层和服务层的依赖注入容器,而Struts2则负责处理Web层的请求和响应。这种集成的好处包括: - **依赖注入**:使用...
3. **Struts2与Spring集成**:将Struts2和Spring整合可以实现更高效的控制流管理和业务逻辑处理。通常,我们会在Spring中定义Bean,然后在Struts2的Action类中通过@Autowired注解注入这些Bean,从而实现业务逻辑的...
最后,Spring 框架作为企业级应用的全能选手,不仅提供了依赖注入(DI)和面向切面编程(AOP)功能,还集成了其他框架,如Struts 2 和 Hibernate。在论坛系统中,Spring 可以管理所有组件的生命周期,通过IoC容器...
学习这个项目,你可以掌握SSH框架的集成方法,了解如何通过Struts2接收用户请求并调用业务逻辑,由Hibernate处理数据库操作,最后Spring管理整个流程。同时,这也是一个很好的实践,帮助初学者理解Web开发中模型、...
在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...
Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们的集成应用可以构建出高效、灵活的后端系统。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责处理HTTP请求和展示视图;Spring...
flex与+struts2+hibernate+spring集成实例项目,源码奉献,物有所值