- 浏览: 628085 次
- 性别:
- 来自: 北京
最新评论
spring、hibernate、tapestry整合篇
www.aspsky.net2005-9-5动网先锋
目前java开源框架真可以说是琳琅满目,最近一个多星期一直在接触spring、hibernate、tapestry。将最近一个多星期以来的学习汇总一下,以便日后查阅,也方便大家学习。
简单的介绍到处都是,对于spring、hibernate、tapestry是干什么用的,我就不多介绍了。大致能够知道spring的IOC/DI概念(AOP方面我也理解不好,暂时)、hibernate的基本概念,如对象持久,ORM,POJO这些概念,tapestry重在组件。我想懂这些并且做个简单小例子,理解本文应该就没什么大问题了。
我的开发环境是eclipse3.1+tomcat5.0.18+jdk1.4.2/jdk1.5 +mysql+这些相关jar包
注:spring1.2+hibernate2.1+tapestry3.0.3
对于eclipse的操作这里不做详细介绍,下面会给出整合代码。
建立项目如together,引入需要的包,方便起见就把spring.jar引入,因为它比较全,它没有包含mock(主要是测试用的)。总之是把这些都导进到你的project里来。别import时候找不到就可以了。
Spring和hibernate结合部分:
数据库准备工作:如mysql,建库为learn,建表为customer,包含字段(aid,username,password)分别为int,varchar型。
相关代码(代码存放位置):
spring-hibernate.xml(与src保持同级)
test spring and hibernate
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
com.mysql.jdbc.Driver
jdbc:mysql://localhost/learn
root
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
yunguang/learn/springandhibernate/Customer.hbm.xml
net.sf.hibernate.dialect.MySQLDialect
true
customer.hbm.xml(yunguang.learn.springandhibernate包下)
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
/*
* Created on 2005-7-6
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package yunguang.learn.springandhibernate;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class Customer {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setId(int id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
单元测试类
package test.junit;
import junit.framework.TestCase;
import junit.textui.TestRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import yunguang.learn.springandhibernate.Customer;
import yunguang.spring.dao.ITestDao;
public class TestDaoTest extends TestCase {
public void testInsertTest(){
ApplicationContext beans = new FileSystemXmlApplicationContext("spring-hibernate.xml");
// XmlBeanFactory beans = new XmlBeanFactory(new FileInputStream(
// "spring-hibernate.xml"));
ITestDao tests = (ITestDao) beans.getBean("hibernatedao");
Customer customer = new Customer();
customer.setId(55);
customer.setUsername("yunguangtest==================");
customer.setPassword("passwordsdlkjfklsd");
tests.insertTest(customer);
}
public static void main(String[] args) {
TestRunner.run(TestDaoTest.class);
}
}
以eclipse中的junite运行这一单元测试。即可一路跑绿,查看数据库完成插入操作。
小结:
核心为spring-hibernate.xml,利用spring的依赖注入的特性。不用单独配置hibernate的配置文件(hibernate.cfg.xml和hibernate.properties)。其他部分见代码吧!如果单独都能各自都能理解,则看上面代码不会有什么太大障碍。
spring和tapestry结合部分:
相关代码(代码存放位置):
前提当然是建立web project,才能使tapestry发挥其作用,才能完整此例子的练习。这里我只是在tomcat下建立deploy并且简单测试了一下:
Web.xml:(这个文件我想大家都知道放在哪里吧。呵呵)
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
together
contextConfigLocation
/WEB-INF/springandtapestry.xml
context
org.springframework.web.context.ContextLoaderServlet
together
org.apache.tapestry.ApplicationServlet
together
/app
Home.html
Springandtapestry.xml(这个和web.xml 放在同个目录下,即web-inf目录下)
"http://www.springframework.org/dtd/spring-beans.dtd">
Together. application(与project同名的xml文件。这是tapestry的要求)
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
add a description
Home.html(在你的tapestry能够访问到的默认目录)
Home.page(与home.html同级)
"-//Apache Software Foundation//Tapestry Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
global.appContext.getBean("aBean")
相关类文件:
package yunguang.learn.springandtapestry;
public interface IBean {
public String getAmethod();
}
package yunguang.learn.springandtapestry;
public class Bean implements IBean {
public String getAmethod() {
// do something;
System.out
.println("================================================test a amethod=============================================");
return "===================test===========================";
}
}
package yunguang.learn.springandtapestry;
public class Global {
}
package yunguang.learn.springandtapestry;
import java.util.Map;
import org.apache.tapestry.engine.BaseEngine;
import org.apache.tapestry.request.RequestContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class MyEngine extends BaseEngine {
public static final String APPLICATION_CONTEXT_KEY = "appContext";
protected void setupForRequest(RequestContext context) {
super.setupForRequest(context);
Map global = (Map) getGlobal();
ApplicationContext ac = (ApplicationContext) global
.get(APPLICATION_CONTEXT_KEY);
if (ac == null) {
ac = WebApplicationContextUtils.getWebApplicationContext(context
.getServlet().getServletContext());
System.out.println("测试" + ac); global.put(APPLICATION_CONTEXT_KEY, ac);
}
}
}
package yunguang.learn.springandtapestry;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.event.PageRenderListener;
import org.apache.tapestry.html.BasePage;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public abstract class Home extends BasePage implements PageRenderListener {
public abstract IBean getABean();
/** 当页面表现之前,首先运行这个方法 */
public void pageBeginRender(PageEvent event) {
WebApplicationContext appContext = WebApplicationContextUtils
.getWebApplicationContext(getRequestCycle().getRequestContext()
.getServlet().getServletContext());
IBean bean = (IBean) appContext.getBean("aBean");
//bean.getAmethod();
}
}
小结:
核心在于利用engine部分,通过定义map的global。然后在home.page中可以进行通过global.appContext.getBean("aBean")对home.java中abstract属性进行赋值。
另外:
contextConfigLocation
/WEB-INF/springandtapestry.xml
这部分是个小小重点!如果把此xml文件改成spring默认的xml文件,则不需要此配置参数过程。
一个小疑惑是:在home.html中"ognl:aBean.Amethod"中的amethod中的a大小写都可以。我觉得应该小写a是正确的,但是错误的写成大写A了居然也可以正常显示。还是看看tapestry源代码吧。以后再写了!
希望本文对你有所帮助。至于其中原理,我想可以通过breakpoint方式一步一步跟下去就明白了。
当然完成本文例子需要有基本的spring、hibernate、tapestry知识。而高手们就不要见笑了。就当看看笑话吧!
其实距离真正结合还差一步,因为并没有通过tapestry作为view,而spring作为主体框架,实现hibernate的对象持久。逻辑清了,下面也就不难了。GOOD LUCK!
发表评论
-
vlc 必要的参数
2021-08-31 17:18 0vlc.exe -vvv -Idummy "rt ... -
grafana+mysql 页面设计
2019-02-25 08:51 0前提 1。主要是SELECT 。 2。使用mysql ... -
测试用例到底怎么才值的写
2016-04-30 10:32 0有个方法是这样的 public function ... -
postman cookies登陆设置
2016-04-28 09:30 2056必须登陆才能测试的接口如何测试? 打开这个开关就可以共用coo ... -
将png 切成ios android能用的格式
2016-04-28 01:24 741由于要求不高找了个在线切图的工具 http://images. ... -
如何在原有系统中加入功能(一数据库)
2016-04-24 11:06 821第一步想办法把建表语句导入一powerdesginer ... -
php递归 格式化 数字类型
2016-04-20 12:35 793/** * 数字转日期递归 ... -
freemind 怎么处理成为word
2015-06-11 19:37 16写文章用freemind打了一个草稿. 先导出成为htm ... -
架构师之路(工欲善其事,必先利其器)纸牌屋
2014-03-27 06:48 0起因:小胖的一个征集实现过程 https://gist.git ... -
油猴对抗一般广告
2012-11-14 00:07 1886看小说 好多好多的广告是必然的.. 所以 去掉iframe 去 ... -
回答一些很有共性的东西
2011-02-24 21:24 5605我作软件第二第三年时 ... -
粗糙的object打印日志用....
2010-11-04 18:40 2167function logJquery(o){ ... -
拳皇连招
2010-09-29 13:46 2371从列表中找到录入的后N位 class KOFTest { ... -
一个activeX方法 刚刚发现
2010-09-14 19:14 1510解答:此题 http://www.iteye.com/prob ... -
[反例]超短代码,意义不明
2010-08-19 17:49 1562public String logout(HttpServl ... -
站读帝
2010-07-26 09:29 1310http://www.hudong.com/wiki/%E7% ... -
不要重复发明轮子
2010-07-06 17:20 2173一直以为不要重复发明轮子的意义很简单. 今天看了人件.... ... -
答复: 不用判断语句求俩数中的大(或者小)数
2010-05-31 12:55 2126跳大神也是一种艺术: public class MaxMin ... -
集合合并
2010-05-28 10:15 1958用于时间表的合并 时间段的合并工作. public cla ... -
删除重名的记录
2010-04-05 23:04 1944面试看到这种题。。。。。 我估计考官的正确答案有可能是错的 所 ...
相关推荐
整合Tapestry、Spring和Hibernate,开发者可以利用它们各自的优点:Tapestry的组件化开发、Spring的依赖管理和事务控制,以及Hibernate的ORM能力。这样的组合可以构建出结构清晰、易于维护且具有高度可扩展性的Web...
【Tapestry4+Spring+Hibernate 整合实例】 Tapestry4、Spring 和 Hibernate 是三个在Java Web开发中至关重要的框架。Tapestry4 是一个MVC(Model-View-Controller)框架,提供了一种声明式编程模型,使得开发者可以...
通过整合Tapestry、Spring和Hibernate框架,可以构建出结构良好、易于维护且性能优异的Web应用。这种框架整合策略不仅提高了开发效率,还保证了应用的质量和稳定性,是现代企业级Web应用开发的优选方案。开发者在...
【标题】"Tapestry+Hibernate+Spring 整合应用示例" 【正文】 Tapestry、Hibernate 和 Spring 是三个在 Java Web 开发中非常关键的开源框架,它们各自在应用程序的不同层面上发挥着重要作用。Tapestry 是一个基于...
Tapestry通过Spring与Hibernate进行交互,利用Spring的数据源和SessionFactory配置,将持久层与业务层解耦。Tapestry的组件可以直接绑定到由Hibernate管理的实体对象,实现数据的透明访问。这种集成方式简化了数据...
总结一下,"tapestry hibernate Spring应用及组件的使用"这个例子展示了如何整合这三个强大的框架来构建一个完整的Web应用。Tapestry负责用户界面,Hibernate处理数据持久化,而Spring则提供了整体架构的支持。...
### Tapestry5 + Spring + Hibernate 开发指南 #### I. 引言 本文档旨在为初学者提供一个基于 Tapestry5、Spring 和 Hibernate 构建 Web 应用的基础指南。项目将通过一个简单的登录页面来展示如何整合这些技术。本...
总的来说,这个基于Tapestry5.1、Spring2.5.6和Hibernate3.2.5的简单CURD程序展示了如何整合这三个强大的框架,实现高效、灵活的Web应用开发。每个框架都有其独特的优点,结合使用能够发挥更大的效能,为开发者带来...
在本教程中,"Tapestry5First project with Tapestry5, Spring and Hibernate"将教你如何将这三个强大的框架整合到一个项目中。Tapestry5作为前端MVC框架,处理用户界面和交互;Spring则提供服务层和依赖注入,管理...
本系统采用的关键技术是Struts2+Hibernate+Spring整合和AJAX。之所以采用SSH整合是因为在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。其实分层还可以使开发人员专注于某...
- “tapestry-spring”模块则将Tapestry与Spring框架整合,让开发者可以利用Spring的强大功能,如AOP、数据访问和事务管理等。 通过这些组件,开发者可以快速构建复杂的Web应用,同时保持代码的清晰性和可维护性。...
Tapestry 可以很好地与其他技术集成,例如Spring、Hibernate等。这使得开发者可以利用这些技术的优势,构建更强大的应用程序。 **10. 性能优化** Tapestry 提供了缓存机制、延迟加载和高效的页面状态管理,以提高...
5. **tapestry-spring**:这个模块整合了Spring框架,使得Tapestry可以利用Spring的特性,如AOP(面向切面编程)、DI(依赖注入)和Bean管理。对于那些已经熟悉Spring的开发者来说,这是一个非常有用的集成。 6. **...
7. **Spring3 MVC与Hibernate 3整合**:讲解如何结合Spring MVC和Hibernate进行持久化操作。 通过这些教程,开发者可以全面了解和掌握Spring 3.0 MVC框架,从而在实际项目中灵活运用,构建出高效、可靠的Web应用。
6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 ...
- **Tapestry 与 Spring 整合**: - 使用 `SpringModule` 来集成 Spring。 - 示例代码: `@Module("spring") void spring;` - **自定义错误页面**: - 通过 `@PageNotFound` 注解定义 404 页面。 - 示例代码: `@...
6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点...
1. **完整Spring Web应用**:这种应用通常使用Spring的全套功能,包括事务管理、DI和Web MVC,业务逻辑由POJO实现,通过TransactionProxyFactoryBeans实现事务性,同时Spring的ORM支持可以整合Hibernate、JDO和...
7. 结合Hibernate,了解如何在Spring MVC中整合ORM框架,实现数据库操作。 总的来说,Spring3.0 MVC是一个强大且灵活的Web开发框架,通过它的丰富特性和模块化设计,可以帮助开发者构建高效、可维护的Web应用程序。...