`
txf2004
  • 浏览: 6920120 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

12月1日struts、spring、hibernate等框架的整合培训日记

阅读更多

facade模式:就是中关村攒机者的角色,他负责与多个零件供销商交互并将这些零件组装起来交给最终客户。
struts与spring集成的两种方式:
第一种是在struts的Action的execute方法中调用spring的applicationContext去获得Manager对象,这里的Action自身没有用到spring的思想,Action无法作为Spring中的JavaBean进行配置,相应代码如下:
ServletContext application = this.getServlet().getServletContext();
WebApplicationContext wapp = (WebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(application);
//WebApplicationContext wapp = (WebApplicationContext)application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
StudentManager studentManager = (StudentManager)wapp.getBean("studentManager");
另外,spring为集成struts而提供了一个ContextLoaderPlugIn插件,其作用在于:创建一个ApplicationContext对象,并将这个对象存储在ServletContext中,以后在ActionSupport中就可以调用getWebApplicationContext来获得这个ApplicationContext对象了,这并没有让我感觉有多大的好处,示例代码如下:
Enumeration e = application.getAttributeNames();
while(e.hasMoreElements())
{
String attributeName = (String)e.nextElement();
String objClassName = application.getAttribute(attributeName).getClass().getName();
try
{
response.getWriter().println(attributeName + ":" + objClassName + "<br>");
}catch(Exception ex){}
}
StudentManager studentManager = this.getWebApplicationContext().getBean("studentManager"));

第二种是将struts的Action作为spring的一个JavaBean进行配置,在Action里面只需要定义一个Manager变量和相应的setter/getter方法,就可以通过spring为其注入一个Manager对象。这种方式太复杂,很牵强,个人觉得没有什么实际意义,建议大家不必花费时间去学习。

spring与hibernate整合的原理:
class MyController extend simpleformcontroller
{
public MyController()
{
setCommandClass(Studnet.class);
}
}
首先回忆使用hibernate的步骤:
1.创建和配置Configuration对象,配置Congiuration对象可以通过hibernate.properties或hiberate.cfg.xml文件,也可以完全采用如下的编程方式:
configuration = new Configuration()
configuration.addClass(Student.class)
//.addFile("Student.hbm.xml")
//.addResource("/Student.hbm.xml")
.setProperty("show_sql","true");
2.由configuration创建出SessionFactory对象:
SessionFactory sf = configuration.buildSessionFactory();
3.通过SessionFactory获得session对象,然后进行CRUD操作:
Session session = sf.openSession();
session.save()\delete\update\load\
session.close();
使用spring集成hibernate的第一步就是借助spring的配置创建出SessionFactory对象
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="mappingResource?>
<list>
<value>xx.hbm.xml</value>
<value>yyy.hbm.xml</value>
<list>
</Property>
<property name="hibernateProperties">
<props>
<prop key="show_sql">true</prop>
<props>
</property>
<property name="datasource"><ref locale=""/></property>
</bean>
在LocalSessionFactoryBean内部完全采用编程方式来配置configuration对象,而不再通过hibernate.properties或hiberate.cfg.xml配置文件,带着大家查看了LocalSessionFactoryBean的源代码。
有了SessionFactory,我们接着就可以通过spring将这个SessionFactory注入到DAO类中,配置如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
相应的调用程序代码示意如下:
class StudentDAO
{
sessionFactroy;
void setSessionFactory(sessionFactory)
{
this.sessionFactory = sessionFactory;
}
insert(User user)
{
sessionFactory.openSession();//累
session.save(user);
session.close();//累
}
}
我们还有自己openSession和getSession,这是不是很累呢?为此,spring又提供了一个配置类hibernateTemplate,它可以帮助我们去openSession和closeSession,这个配置类能够openSession,显然它一定要有SessionFactory的引用。
<bean id="hibernateTemplate" class="HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
遵循spring的IOC思想,我们接着还要将HibernateTemplate注入到DAO类中,配置如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>

class StudentDAO
{
hibernateTemplate;
void sethibernateTemplate(hibernateTemplate)
{
this.hibernateTemplate = hibernateTemplate;
}
insert(User user)
{
hibernateTemplate.save(user);//我们不再openSession和closeSession,不是很爽吗?
}
}

另外,spring还提供了一个HibernateSuport类,它可以通过注入的SessionFactory返回一个HibernateTemplate,我们的DAO类继承这个HibernateSupport,也可以获得HibernateTemplate对象进行CRUD操作,配置及示意代码如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
class StudentDAO extends HibernateSuport
{
/*hibernateTemplate;
void gethibernateTemplate()
{
return hibernateTemplate;
}
sessionFactroy;
void setSessionFactory(sessionFactory)
{
this.sessionFactory = sessionFactory;
hibernateTemplate = new HibernateTemplate(sessionFactory);
}*/


insert(User user)
{

getHibernateTemplate().save(user);
}
}

最后由王泽佑提问引出spring mvc的注册绑定的详细讲解:
在spring帮助文档中搜索editor,可以看到有关注册绑定的信息,CustomDateEditor是没有被自动注册的,需要用户在initBinder方法内部调用,示例代码如下:
protected void initBinder(
HttpServletRequest request,
ServletRequestDataBinder binder)
throws ServletException {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"),true));
}
一种替换的方式及registerCustomEditor底层的实现内幕:
调用BaseCommandController.setPropertyEditorRegistrars()方法,显然这可以作为controller的属性进行配置。
class MyPropertyEditorRegistrar
{
void registerCustomEditors(PropertyEditorRegistry registry)
{
reguistry.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
}
}

关于Date数据校验的问题:通过在struts帮助文挡的Validator帮助页面中搜索validate,是可以搜索到DateValidator的配置帮助的。

如果注册了DateEditor,数据成功转换成Date类型的字段,那么随后的的Validator框架就没必要对这个Date字段进行校验了,因为Validator是对已装配到Bean中的字符串类型的字段进行校验,而数据都已经成功装配进了Date字段中,哪还有校验的必要。框架把数据装配到formbean里面,Validator从Formbean里面拿数据进行校验。


<bean id="myController class="cn.itcast.MyController">
<property key="commandClass">
<value>cn.itcast.Student</value>
</prperty>
</bean>
上面的配置信息相当于下面的一段代码,这其中就涉及到了属性绑定的问题,要把字符串"cn.itcast.Student"转换成Class对象。
Class clazz = Class.forName("cn.itcast.Student");
setCommandClass(clazz);

小记:通过spring配置文件中的<import>元素的resource属性可以导入更多的配置文件,实现信息分散配置的目的。

分享到:
评论

相关推荐

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    中国移动业务管理系统(struts+spring+hibernate)源码

    本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的一个...

    计算机专业实习日记.docx

    在实习的第七天,学生学习了Struts、Spring和Hibernate框架。Struts代表表示层,Spring代表业务逻辑层,Hibernate则代表持久层。这三个框架都是轻量级的,没有侵入性或者侵入性很低。学生认为这些框架可以提高开发...

    基于SSH框架的Web网站设计与实现.pdf

    12. Struts实现:本论文对基于SSH框架的Web网站的Struts实现进行了介绍和分析,包括Struts的设计技术和实现原理等。 13. Spring实现:本论文对基于SSH框架的Web网站的Spring实现进行了介绍和分析,包括Spring的设计...

    Java_EE企业应用实战SSH(第3版)-part1

    尤其适合于对Struts2、Spring、Hibernate了解不够深入,或对Struts2+Spring+Hibernate整合开发不太熟悉的开发人员阅读。 作者简介 李刚,从事10年的JavaEE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的...

    Java_EE企业应用实战SSH(第3版)-part2

    尤其适合于对Struts2、Spring、Hibernate了解不够深入,或对Struts2+Spring+Hibernate整合开发不太熟悉的开发人员阅读。 作者简介 李刚,从事10年的JavaEE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的...

    基于java的药店管理系统毕业设计毕业设计论文.doc

    该系统使用 Spring、Hibernate、Struts 等流行的框架技术来实现业务逻辑和数据持久化操作。 系统需求分析 随着现代科学技术的发展,计算机技术已经渗透到各个领域,成为各行业必不可少的工具。特别是 Internet ...

    计算机专业毕业实习日记.docx

    Struts这个框架其实就是Java MVC设计模式中简称Model1与Model2Model2的一个具体实现,Spring 则通过提供ICO控制反转,也称依赖注入实现了对对象甚至事务如声明式事务的集中管理,此外还引入了AOP对向切面编程,当然...

    【计算机软件毕业设计】二手车交易平台的分析、设计与实现文献综述1.doc

    1.3 Spring框架 徐景秀在期刊发表说Spring是一个开源框架,它由Rod Johnson在2004年3月24日发布 创建,并在他的著作《J2EE设计开发编程指南》里进行了描述,这也使他一度成为一个改 变Java世界的大师级人物。...

    JAVA WEB典型模块与项目实战大全.part2(第二卷)

    第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 请手动搜索其它3卷下载 或点击上传者的链接可直接查到 第1篇 开发工具及框架概述 第1章 开发前奏 第2章 MyEclipSO开发工具对各种框架的支持: 第3章 ...

    JAVA WEB典型模块与项目实战大全.part4

    第1版 (2011年1月1日) 平装: 922页 由于上传限制 共分成4卷 请手动搜索其它3卷下载 第1篇 开发工具及框架概述 第1章 开发前奏 第2章 MyEclipSO开发工具对各种框架的支持: 第3章 实现各种框架的集成 第2篇 典型...

    JAVA WEB典型模块与项目实战大全.part3(第三卷)

    第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 请手动搜索其它3卷下载 或点击上传者的链接可直接查到 第1篇 开发工具及框架概述 第1章 开发前奏 第2章 MyEclipSO开发工具对各种框架的支持: 第3章 ...

    JAVA WEB典型模块与项目实战大全.part1(第一卷)

    典型模型与项目实战大全&gt;&gt; 出版社: 清华大学出版社; 第1版 (2011年1月1日) 平装: 922页 由于上传限制共分成4卷 下面是其它三卷的链接 第二卷: http://download.csdn.net/detail/jincheng52rmb/5349256 第三卷: ...

    JavaWeb技术整合应用与项目实战(光盘)完整下载

    JavaWeb技术整合应用与项目实战(光盘)完整下载地址! (JSP+Servlet+Struts2+Hibernate+Spring3) - 张志锋 出版社: 清华大学出版社; 第1版 (2013年6月1日)

    Java_EE企业应用实战SSH(第三版)-part3

    尤其适合于对Struts2、Spring、Hibernate了解不够深入,或对Struts2+Spring+Hibernate整合开发不太熟悉的开发人员阅读。 作者简介 李刚,从事10年的JavaEE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的企业...

    基于web开发的学校失物招领系统设计与研究20200421.docx

    该系统基于J2EE开发框架,结合“Struts 2 + Spring + Hibernate”框架,开发了一个轻量级的高校失物招领系统。 关键词:校园失物招领、Web网站、MySQL、J2EE 1. 校园失物招领系统的需求分析 随着高校师生的校园...

    旅游网站后台管理-毕设论文.doc

    同时,本文还对J2EE框架的使用进行了详细的分析,并对Struts2、Spring、Hibernate三大开源框架的应用进行了详细的介绍。 本文还对J2EE技术的发展前景进行了分析,认为J2EE技术当前发展普及全球并会继续发展,其技术...

    ACCP5.0Y2-电子宠物网站源码SSH和培训案例素材

    用Struts、Hibernate和Spring,使用三层结构,开发一个电子宠物网站,实现如下功能: 1. 宠物领养。 2. 宠物信息列表查询;宠物信息编辑;宠物信息察看(含该宠物的日记列表)。 3. 系统登录。 4. 宠物训练。 5. 写...

    基于javaEE健康管理系统SSH设计软件源码+数据库+word毕业论文文档.zip

    这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台。该网站主要有教师饮食管理、教师健康日志、教师体检管理、疾病预测评估等功能模块。通过该网站,教师可以更好的关注...

Global site tag (gtag.js) - Google Analytics