Struts2

2024-09-17

Struts2(共10篇)

Struts2 篇1

0、引言

Hibernate是一个非常优秀的ORM框架,通过使用Hibernate框架,允许开发人员使用面向对象的方式进行数据库访问,从而避免了是原始的JDBC进行数据库访问。在这种方式下,企业应用的面向对象分析、面向对象设计和面向对象编程一脉相承,让系统分析、设计更加简洁【4】。

Hibernate作为JAVA EE持久化的解决方案,使用传统的POJO作为系统的持久化类,具有低侵入式设计,不会造成代码污染。系统的持久化类无需继承任何Hibernate基类,或者实现任何Hibernate接口,提供了极好的代码复用。

Struts2是JAVA EE应用的MVC层解决方案,主要提供系统的控制器支持,当然也为系统的页面表现提供了一些标签支持。

可见,Struts2主要用于实现用户交互功能,而Hibernate则主要用于实现系统的持久化。因此,Struts2通常不会直接访问Hibernate API,即使Struts2并不直接与Hibernate整合。但我们可以通过一个中间层,让系统向上整合Struts2框架,向下整合Hibernate框架,并通过JAVA EE的DAO模式,将Hibernate和Struts2框架以松耦合的方式整合在一起。

1、Hibernate概述

对于JAVA EE应用而言,不可避免地设计数据库访问,而目前主流数据库都是关系数据库,JAVA EE应用的编程语言是纯粹的面向对象语言。Hibernate允许程序员开发者采用面向对象的方式来操作关系数据库。因为有了Hibernate的支持,使得JAVA EE应用开发过程的OOA(面相对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个过程一脉相承,成为一个整体【2】。

虽然Hibernate这个框架问世的时间不长,但已经成为目前最流行的持久化层解决方案,Hibernate更具有面向对象的特征,较之传统的Entity EJB的持久层解决方案Hibernate则采用低侵入式的设计,即完全采用普通的Java对象(POJO),而不必继承Hibernate的某个超类或实现Hibernate的某个接口。Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,Hibernate允许程序开发者采用面向对象的方式来操作关系数据库。

Hibernate是一个面向JAVA环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

Hibernate的目标是释放开发者通常的数据持久化相关的编程任务的95%。对于以数据为中心的程序而言,往往在数据库中使用存储过程实现商业逻辑,Hibernate可能不是最好的解决方案,但对于那些基于JAVA的中间件应用,设计采用面向对象的业务模型和商业逻辑,Hibernate是最有用的。不管怎样,Hibertnate能消除那些针对特定数据库厂商的SQL代码,并且把结果集从表格式的形式转换成值对象的形式。

Hibernate不仅管理JAVA类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。

Hibernate能在众多的ORM框架中脱颖而出,因为Hibernate与其他ORM框架对比具有如下优势:

◆开源和免费的License,方便需要时研究源代码,改写源代码,进行功能定制。

◆轻量级封装,避免引入过多复杂的问题,调试容易,减轻程序员负担。

◆具有可扩展性,API开放。功能不够用时,自己编码进行扩展。

◆开发者踊跃,产品有稳定的发展保障。

2、Struts2简介

Struts2是一个为开发基于模型 (Model) -视图 (View) -控制器 (Controller) (MVC) 模式的应用架构的开源框架,是利用Java Servlet和JSP构建Web应用的一项非常有用的技术。Struts2使用了WebWork的,由于Struts2能充分满足应用开发的需求,简单易用,敏捷迅速,因而吸引了众多的开发人员的关注。首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts2使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute () 。Struts2重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts2就不太可能,当然通过结合JavaScript也是可以转弯实现的。Struts2是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts2把Servlet、JSP、自定义标签和信息资源 (message resources) 整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts2是一个非常不错的应用框架。

3、自定义整合方案

从上面的介绍中,我们可以看出,Hibernate是一个持久层解决方案,它使用O/R Mapping来简化持久层编程,允许开发者使用面向对象方式进行数据库操作。Struts2则是一种MVC层的解决方案,它致力于与用户交互层次。严格来讲,Struts和Hibernate是不能直接整合,因为必须在Hibernnate和Struts2中间插入其他解决方案。对于严格的JAVA EE分成理论而言,底层持久化API不应该暴露给MVC层框架。

Struts2无法和Hibernate直接交互,因此,如果需要将Hibernate和Struts2整合,必然有如图1所示的架构方案。

Hibernante的数据库访问是建立在JDBC技术基础之上的。这就是说:虽然使用Hibernate技术无需显示使用JDBC编程,但Hibernate框架本身还必须借助于JDBC技术。【5】

Hibernante对传统JDBC进行包装,对外提供了一种面向对象的编程方式,但Hibenrnate底层仍然采用JDBC进行数据库访问,只是Hibernante底层的JDBC操作对用户是完全透明的。

图中包含了一个虚线框;中间层组件,这个组建包含了非常复杂的内容,大部分业务操作都是由该组件负责实现的,即使图中的中间层组件,也并不是直接访问Hibernate持久层API,为了提供更好的解耦,我们可以见中间层组件分为两个层:

业务逻辑层:改成的组件专注于业务逻辑的实现,避免与任何的持久化技术耦合。

DAO层:该层里包含大量的DAO组件,每个DAO组件专注于底层持久化实现,一个具体的DAO组件职能与特定的持久化技术耦合。

在这种策略下,中间层组件按功能分成了两层,业务逻辑层组件专注于实现业务逻辑功能,但不关心底层的持久化访问,无需理会业务逻辑功能,这种策略将不通功能封装在不同组件中,提供了更好的复用和解耦。

为了让上面的架构有较好的解耦,必须将上面的业务逻辑组件和DAO组件的接口,而不是依赖与DAO组件的实现类。

4、整合方案的实现策略:

为了实现上面的设计架构,这种策略应该为每个DAO组件、业务逻辑组件都提供一个接口,从而将应用中的各组件形成接口依赖,而不是类依赖。具体的说,就是让系统的Action依赖于业务逻辑组件接口,而业务逻辑组件则依赖于DAO接口。一旦采用面向接口的编程方式,则工厂模式也是必不可少的,Action不再关心业务逻辑组件的实现,而是通过业务逻辑组件工厂来获得业务逻辑组件,而业务逻辑组件也不再关心DAO组件的实现,而是通过DAO组件工厂来获得DAO组件。在这种整合策略下,中间层组件有如图所示的顺序图:

从图中看出,通过这种策略,控制器Action不再直接依赖于业务逻辑组件实现类,而是依赖于业务逻辑组件接口;而业务逻辑组件不再依赖与DAO组件实现类,而是依赖于DAO组件接口,从而提供良好的解耦。

我们完全可以将系统中的DAO组件和业务逻辑组件配置在一个配置文件中,并在DAO工厂和业务逻辑组件工厂统一起来,使用一个工厂类来管理系统中DAO组件和业务逻辑组件。这的确是一个好思路,而且很容易实现,对于控制器而言,它是根据XML文件的组件ID来取得系统组件,至于该组件是业务逻辑组件还是DAO组件,根本不是Action说需要关心的。

因此,上面整合结构中的业务逻辑组件工厂和DAO组件工厂完全可以合并成一个工厂,因为所有的业务逻辑组件和DAO组件都通过一个配置文件进行管理,所以所有的DAO组件和业务逻辑组件都通过一个工厂类进行管理,在这种模式下,可以让系统创建业务逻辑组件时就完成该业务逻辑组件所需的DAO组件的初始化。

为了让系统业务逻辑组件知道所依赖的DAO组件,可以有如下形式的配置文件:

通过上面配置文件,即可让系统在创建persoService组件,personDao和sonDao组件注入persoService组件中,从而避免了persoService组件主动通过DAO工厂获取DAO组件,从而提供更好的解耦。

5、总结

文章介绍了Hibernate和Struts2的概念和机制,并提出了Struts2整合Hibernate的新方案,该方案并不直接在Struts2的Action中访问Hibernate API,而是使用业务逻辑工厂、DAO组件工厂来管理系统的业务逻辑组件,将Hibernate的持久化访问都封装在DAO组件里,从而提供较好的解耦。

参考文献

[1].《Java Web服务应用开发祥解》.飞思科技产品研发中心电子工业出版社2002年4月

[2].《Hibernate ORM最佳实践 (配光盘) 》作者:陶勇李晓军清华出版社2007年9月

[3].《Spring应用开发完全手册 (附盘) 》作者:明日科技人民邮电出版社2007年

[4].王庆生闫宝华《Hibernate和struts的整合架构中数据持久化技术的应用研究》太原理工大学学报2008年5月

[5].《Struts2权威指南--基于WebWork核心的MVC开发》李刚电子工业出版社, 2007年9月

Struts2 篇2

标识、可以、如果没写,说明该包为默认空间 2.Action 的实现通集成常用那种方法? 一种是直接实现自己的Action 另一种是实现Action的接口 继承ActionSupport 3.不属于Struts2的动作类的常量返回值的是(C)

A.success

B.input

C.never

D.login 4.以下不属于Struts2动作执行的结果类型是(A)a.action b.redirect c.redirectAction d.dispatcher 5.在struts.xml中。假如在一个package中没有配置namespace,那么在其中配置一个Action名字叫做login,它的result是这样配置的/login.jsp,已知在此配置文件中还有另一个name为user的package其中也有一个Action名字为login,它的result是这样

配置的/loginUser.jsp那么在以下什么情况下将能访问到login.jsp

A A.在根路径后输入/login B.在根路径后输入/user/login C.在根路径后输入/login/user D.在根路径后输入/abc/login 6.正规开发中,在使用struts2时定义Action使用哪种方式。B A.直接定义Action类。B.从ActionSupport继承。C.从Action继承。D.实现Action接口。

7.不同的线程在调用Action时创建几个Action实例。C A.1个 B.2个

C.每个线程创建1个。D.可以自定义配置。

8.struts提供了Action接口定义了5个标准字符串常量,不包括的有(C)A SUCCESS

B NONE C REG D LOGIN

9.列举出action执行结果类型,并说明用途。

默认结果类型是dispatcher chain:Action链式处理的结果类型,也就是将结果转发到这个action中。

dispatcher:用于整合JSP的结果类型

redirect:实际上dispatcher和redirect的区别就是在于转发和重定向的区别。

redirect-action:重定向action 10.struts2中result-type的chain和redirectAction的区别 chain,它是一个琏式的,是从一个Action转发另外一个Aciton redirectAction,是从新请求一个Action 11.action的class里面写的是什么? Action相应类的详细路径

12.action的extends里面调用的是什么?

从另外一个包继承、相当于拥有即承包的所有配置

13.如果不写action的后面mothod,默认的调用的方法是什么,如果写的话,写的时候有什么需要注意的?

不写会默认调用最上面的方法

14.输出值的strtus标签是什么?

s:property

15.循环的struts标签是什么?

s:iterator

15.判断的strtuts标签是什么?

s:if

16.显示文本的strtuts标签是什么?

17.请简述前台提交后是如何到达后台action的。

通过form表单action找到struts配置文件相应action的类 再去找相应action类里的方法

Struts2习题2

一、填空题

1.Struts2框架由___________和___________框架发展而来。(Struts&WebWork)2.Struts2以___________为核心,采用___________的机制来处理用户的请求。(WebWork,拦截器)

3.Struts2中的控制器类是一个普通的___________。Class或填过滤器类

二、选择题

1.不属于Action接口中定义的字符串常量的是___________。B A.SUCCESS B.FAILURE

C.ERROR D.INPUT 2.在控制器类中一般需要添加相应属性的___________和___________。AC A.setter方法 B.as方法 C.getter方法 D.is方法 3.控制器需要在___________配置文件中进行配置。B A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 4.不属于Struts 2表单标签库的是___________。D A. B. C. D.