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属性可以导入更多的配置文件,实现信息分散配置的目的。
分享到:
相关推荐
"最新版Hibernate-struts-spring框架整合"指的是将三个主流的Java开发框架——Struts2、Hibernate和Spring进行集成,以构建高效、稳定且可维护的Web应用程序。这篇文档可能是关于如何在2012年8月8日时,使用这三个...
标题 "spring2+struts2+hibernate3整合(Europa)" 指的是一个集成开发项目,其中使用了Spring 2、Struts 2和Hibernate 3这三大流行开源框架,它们都是Java Web开发中的重要组件。在这个项目中,开发者将这三个框架...
### 基于Struts、Hibernate和Spring的J2EE架构研究 #### 一、引言 随着互联网技术的发展和企业需求的日益多样化,软件开发领域面临着越来越多的挑战。为了解决这些问题,J2EE(Java 2 Platform, Enterprise ...
#### 二、Struts+Hibernate+Spring框架的特点 ##### 2.1 Struts框架 Struts是由Apache Software Foundation发起的开源项目,它在服务器端实现了MVC(Model-View-Controller)设计模式,是一种用于简化Web应用程序...
因此,将Struts2、Spring3和Hibernate三个强大的Java框架整合起来成为了开发高效稳定的企业级应用的标准做法之一。本文将详细介绍这三个框架如何进行整合,并通过一个简单的示例来展示整个过程。 #### 二、所需框架...
### 基于Struts_Hibernate_Spring轻量级框架的Web应用开发 #### 引言 随着互联网技术的快速发展,Web应用系统的需求日益增长,同时也对系统的性能、可维护性和扩展性提出了更高的要求。传统的“重量级”技术(如...
本项目采用SSH(Struts2、Spring、Hibernate)框架来构建,这是一个常见的Java Web开发技术栈,提供了强大的功能和灵活性。 Struts2是MVC(模型-视图-控制器)设计模式的一个实现,用于处理用户请求并控制应用程序...
Spring、Hibernate和Struts是Java开发中非常经典的三大框架,它们分别负责控制层、持久层和视图层的处理,组合使用可以构建出强大的企业级应用。本文将深入探讨SSH框架的整合方法及其常见问题解决方案。 Spring框架...
Struts、Hibernate和Spring是Java开发中非常重要的三个框架,它们分别是MVC(Model-View-Controller)架构的代表性组件、持久层管理和依赖注入的神器。这个BBS系统结合了这三个框架,为我们提供了一个深入理解它们...
标题中的“博客系统(struts+hibernate+spring)”指的是一个基于Java技术栈的Web应用程序,它整合了三个核心框架:Struts、Hibernate和Spring。这个压缩包文件“130225.zip”可能是该项目在2013年2月25日的一个版本。...
### Struts+Spring+Hibernate整合的关键知识点 #### 1. J2EE Web 开发方法论 - **背景**: 随着Internet技术和企业信息化建设的发展,构建基于Web的应用系统的需求日益复杂,对开发周期的要求也更为紧迫。因此,开发...
#### 二、Spring+Struts+Hibernate的J2EE架构探讨 J2EE作为全球最流行的Web系统开发架构,在企业级应用开发领域占据主导地位。其中,Spring+Hibernate+Struts这一开源轻量级框架逐渐成为主流开发体系。 1. **...
总的来说,基于Struts2、Spring、Hibernate框架的人力资源管理系统是一个高效、灵活的企业级应用,它整合了前端展示、业务逻辑和数据访问,为企业提供了一套完整的人力资源管理解决方案。通过合理的架构设计和模块...
### Hibernate与Struts在J2EE中的应用 #### 一、引言 随着企业级应用需求的日益增长,Java作为一种广泛使用的编程语言,在构建大型、复杂的企业应用方面展现了其强大的能力。Java 2 Platform, Enterprise Edition...
这是一个基于Java技术栈的会员管理系统项目,主要使用了Struts、Hibernate和Spring三大框架进行开发。这个系统在2013年2月26日时已经完成,它展示了如何将这三个流行的技术集成到一个实际的应用中,以实现高效、灵活...
标题“良葛格Gossip_struts_spring_hibernate”表明这是一个关于编程框架和技术教程的集合,其中涵盖了Spring、Struts和Hibernate等关键组件。描述提到是Spring技术手册的作者提供的教程,暗示内容可能深入且权威。 ...
### 基于Struts、Spring、Hibernate考核管理系统的研究与实现 #### 一、引言 随着信息技术的迅速发展,特别是在企业管理领域,信息化建设已成为提升工作效率和服务质量的关键手段。传统的人力资源考核管理工作通常...