一、三個框架簡介
Struts:
Struts是目前Java Web MVC框架中不爭的王者。經過長達五年的發展,Struts已經逐漸成長為一個穩定、成熟的框架,並且占有了MVC框架中最大的市場份額。
Spring:
Spring是一個開源框架,它是為了解決企業應用開發的復雜性而開發的。Spring使使用基本的JavaBeans來完成以前只可能由EJB完成的事情變得可能了。Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。在Spring中應用對象被聲明式地組合在一個XML文件裡。Spring也提供了很多基礎功能(事務管理、持久化框架集成等),讓開發者更專注於应用逻辑。所有的這些特征使開發者能夠編寫更干淨、更易管理、並且更易於測試的代碼。
Hibernate:
Hibernate是高性能的開源框架。提供O/R映射功能,通過XML配置文件能夠將對象映射到數據庫。對數據操作進行了封裝,能夠方便簡潔地解決大多數的數據持久化操作。
二、實現架構圖
架構介紹
Filter:Web過瀘器,繼承javax.servlet.Filter,用於處理只要客戶請求就必須初始化或處理的實例。例如可以在這裡進行請求的編碼轉換,為了更好地支持中文,更好的方法就是把客戶端的請入信息轉換成UTF-8格式,並存於數據庫中,這種轉換就可以在過瀘器中進行處理。
ActionServlet:是Struts提供的總控制器,在這裡接收來自客戶端的所有請求,並根據請求參數和Struts配置文件struts-config.xml決定請求由那個具體的Action來處理。
Action:由Struts提供的Action類,繼承Struts的org.apache.struts.action.Action類。客戶的不同請求,可以由不同的Action來處理(由ActionServlet總控制器選擇)。Action用於處理客戶請求的具體操作,比如調調用Service層的方法進行數據保存或讀取。Action還根據struts-config.xml配置選擇頁面的轉發。對客戶輸入的信息進行驗證。
ActionForm::由Struts提供的Form類,繼承Struts的org.apache.struts.action.ActionForm類。用於封裝來自客戶表單的信息,並可以對信息進行初級有效性驗證。
Jsp和tiles-defs.xml:tiles-defs.xml由Strtus提供,用於頁面的定義,可以定義JSP模板,不同頁面都可以斷承該模板。Jsp用於表示界面,可以在Jsp中書寫Struts標簽由不牽涉任何Java代碼。
Service接口:定義Service的接口,給上層調用。這裡編寫上層所需方法的定義。
Service接口實現:這裡實現Service接口方法的具本實現,並實現商務邏輯。該類為了支持Spring的依賴注入功能,需要實現一個setXxxDAO()的方法,這樣類就可以利用注入來的DAO進行數處理。在這一層利用Spring的事務管理,對這層的方法進行事務聲明管理。
DAO接口:這裡定義DAO數據訪問層的接口,給業務層Service調用。
DAO接口實現:這裡具體實現DAO接口的所有方法,只進行數據的保存、讀取、更新等動作,不牽涉事務。該類繼承Spring的org.springframework.orm.hibernate3.support.HibernateDaoSupport類,可以不再理會Hibernate的API,即可進行Hibernate方式的數據操作。可以讓代碼更簡潔,有條理。
Spring:這是系統的中心部分,這裡在一個XML配置文件中定義了大部分的系統Bean,並對它們進行集中管理。定義了DAO層、Service層的所有類。定義了事務,並且定義了方法的事務策略。
三、各層的具體實現
1、底層的數據訪問DAO層實現
Hibernate的表與對象映射文件,文件名類似xxxx.hbm.xml(xxxx為表名),它由Hibernate工具根據數據庫的表結構生成而來,一般的結構如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.shingwai.website.bean">
<class name="IncInfo" table="IncInfo">
<id column="incName" length="250" name="IncName" type="string"
unsaved-value="null">
<generator class="native"/>
</id>
<property name="IncDesp" column="incDesp"type="string" not-null="false"/>
</class>
</hibernate-mapping>
第5行表示持久化類所處的包,第6行表示持久化類名和代表數據庫的那個表,第7行表示數據表的主鍵及一些屬性(如長度、字段名、類型等),第11行表示表的一個字段
Spring中可以對Hibernate的表配置文件進行加載,而不用Hibernate獨立的配置文件,這樣就把Hibernate包含在Spring的管理中。把表配置文件加載到Spring中的樣子如下:以下代碼是Spring配置文件片段
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>org/shingwai/website/bean/ProductJPGImage.hbm.xml</value>
<value>org/shingwai/website/bean/Category.hbm.xml</value>
<value>org/shingwai/website/bean/IncInfo.hbm.xml</value>
<value>org/shingwai/website/bean/SwcProduct.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.fetch_size">25</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
</props>
</property>
</bean>
以上代碼表示把Hibernate的四個表配置文件加載到Spring管理中,它們是org/shingwai/website/bean/ProductJPGImage.hbm.xml
org/shingwai/website/bean/Category.hbm.xml
org/shingwai/website/bean/IncInfo.hbm.xml
org/shingwai/website/bean/SwcProduct.hbm.xml
分別代表數據表ProductJPGImage、Category、IncInfo、SwcProduct
<property name="hibernateProperties">標簽設定Hibernate的一些屬性參數
DAO接口定義
只是一個接口類,裡面定義了一些方法,樣子如下:
public interface IIncInfoDAO {
public IncInfo findAll();
}
DAO接口實現類
它繼承org.springframework.orm.hibernate3.support.HibernateDaoSupport類並實現了DAO接口,樣子如下:
public class IncInfoHibernateDAO extends HibernateDaoSupport implements IIncInfoDAO {
private static final String LOAD_ALL ="from IncInfo inc ";
public IncInfo findAll() {
List list = this.getHibernateTemplate().find(LOAD_ALL);
if (list.size()==0) {
return null;
}else {
return (IncInfo)list.get(0);
}
}
}
HibernateDaoSupport類提供了一個操作Hibernate的Template,可以實現Hibernate的大多數操作而不用理會什麼時候Open Session或是什麼時候Close Session。所有這些都由Spring進行處理。只要調用它的getHibernateTemplate()方法,其它的就交給Spring吧。如上例的查詢只有一行代碼List list = this.getHibernateTemplate().find(LOAD_ALL);
2、業務層Service的實現
在Spring配置文件中定義DAO,因為Service層需要注入DAO來進行數據操作。DAO在Spring的Bean定義如下所示:
<bean id ="incInfoDAO" class="org.shingwai.website.dao.impl.IncInfoHibernateDAO">
<property name="sessionFactory">
<ref local="mySessionFactory"/>
</property>
</bean>
它注入了由Spring實現的Hibernate sessionFactory,提供給它的HibernateDaoSupport類使用。(mySessionFactory 的定義見上文Spring加載Hibernate表配置文件)。我們在Service層實現裡說明DAO在Spring中的定義是因為我們的Service層要使用到它。
Service接口
一個普通的接口類,樣子如下:
public interface IIncInfoService {
public IncInfo findAll();
}
Service接口實現,它要實現一個setXxxDAO()方法,用於Spring的依賴注入。代碼樣子如下:
public class IncInfoServiceImpl implements IIncInfoService {
private IIncInfoDAO incInfoDAO;
public void setIncInfoDAO(IIncInfoDAO incInfoDAO){
this.incInfoDAO=incInfoDAO;
}
public IncInfo findAll() {
// TODO 這裡可以加入業務邏輯
return incInfoDAO.findAll();
}
}
在Spring中定義Service,那麼客戶端就可以通過Spring來調用Service的方法。
<bean id="incInfoService" class="org.shingwai.website.service.impl.IncInfoServiceImpl">
<property name="incInfoDAO">
<ref local="incInfoDAO"/>
</property>
</bean>
該定義中注入了incInfoDAO。
至此已經完成了DAO層和Service層的方法和Spring的Bean定義。
3、表示層的實現
表示層使用Struts框架,利用Jbuilder或Eclipse都可以很方便的創建ActionForm,Action。表示的其它技術將不在這裡介紹,這裡只說明在Action中如何調用Servie層的方法。
在Action中通過Spring調用Service的方法,代碼樣例如下:
AbstractApplicationContext appContext=new ClassPathXmlApplicationContext("/applicationContext.xml")
IIncInfoService incInfoService=(IIncInfoService) appContext.getBean("incInfoService");
List list=incInfoService.findAll();
applicationContext.xml為Spring的配置文件名,通過實例appContext可以得到incInfoService實例。
4、附錄Spring的聲明式事務定義,樣式如下:
<!-- transactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="mySessionFactory" />
</property>
</bean>
<!-- baseTxProxy -->
<bean id="baseTxProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 事務定義示例bean -->
<bean id="bookService" parent="baseTxProxy">
<property name="target">
<bean class="com.spring.test.tran.BookService">
<property name="bookdao">
<ref local="bookDAO" />
</property>
</bean>
</property>
</bean>
第一段定義由那個類來進行事務管理;第二段定義一個事務代理模板,並定義事務策略;第三段定義一個需要進行事務管理的Bean,它繼承了事務代理模板,把自己本身的實現類交給代理類來實現。
分享到:
相关推荐
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
简单struts+spring+hibernate搭建,配置,适合初学者
在IT行业中,SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。本项目通过SSH框架实现了图书管理系统的图书修改和删除功能,下面将详细介绍这三个核心组件...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
Struts1.2、Spring2.5和Hibernate3.2是经典的Java企业级开发框架组合,它们各自在应用程序的不同层次上发挥着重要作用。Struts1.2是一个MVC(Model-View-Controller)框架,主要负责处理用户界面与业务逻辑之间的...
网上订餐系统(struts+spring+hibernate).rar 网上订餐设计主要采用采用MYSQL数据库进行数据表的设计,利用JSP的动态生成页面编程技术, 实现了用网络展示餐饮信息、浏览餐饮页面、注册客户、更改客户信息;同时,...
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3
Struts 2+Spring 3+Hibernate框架技术精讲与整合案例Struts 2+Spring 3+Hibernate框架技术精讲与整合案例Struts 2+Spring 3+Hibernate框架技术精讲与整合案例Struts 2+Spring 3+Hibernate框架技术精讲与整合案例...
基于spring实现的网上订餐系统(struts+spring+hibernate+SQL Server) 基于spring实现的网上订餐系统(struts+spring+hibernate+SQL Server) 基于spring实现的网上订餐系统(struts+spring+hibernate+SQL Server) 基于...
SSH(Struts+Spring+Hibernate)是一个经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个教务管理信息系统是基于SSH框架实现的,提供了完整的源代码,可以直接运行,便于开发者学习和参考。 **...
Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...
基于JavaWeb实现的图书管理系统(struts+spring+hibernate+SQL Server) 基于JavaWeb实现的图书管理系统(struts+spring+hibernate+SQL Server) 基于JavaWeb实现的图书管理系统(struts+spring+hibernate+SQL Server) ...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...
标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...
AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架)
struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版 struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动...
轻量级JavaEE企业应用实战_Struts2+Spring3+Hibernate整合开发_第3版.part1
SSH三大框架,即Struts、Spring和Hibernate,是Java Web开发中的常用技术组合,它们各自负责不同的职责:Struts作为MVC模式中的Controller层,处理用户请求并转发到相应的业务逻辑;Spring则作为核心容器,负责依赖...