- 浏览: 915064 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
作为基于MVC模式的Web应用最经典框架,Struts已经正式推出了1.1版本,该版本在以往版本的基础上,提供了许多激动人心的新功能。本文就将带你走进Struts 1.1去深入地了解这些功能。
说明:希望本文的读者能有一定的Struts使用基础。
Struts是基于Model 2之上的,而Model 2是经典的MVC(模型-视图-控制器)模型的Web应用变体,这个改变主要是由于网络应用的特性--HTTP协议的无状态性引起的。Model 2的目的和MVC一样,也是利用控制器来分离模型和视图,达到一种层间松散耦合的效果,提高系统灵活性、复用性和可维护性。在多数情况下,你可以将Model 2与MVC等同起来。
下图表示一个基于Java技术的典型网络应用,从中可以看出Model 2中的各个部分是如何对应于Java中各种现有技术的。
在利用Model 2之前,我们是把所有的表示逻辑和业务逻辑都集中在一起(比如大杂烩似的JSP),有时也称这种应用模式为Model 1,Model 1的主要缺点就是紧耦合,复用性差以及维护成本高。
既然Struts 1.1是基于Model 2之上,那它的底层机制也就是MVC,下面是Struts 1.1中的MVC实现示意图:
图解说明:其中不同颜色代表MVC的不同部分:红色(控制器)、紫色(模型)和绿色(视图)
首先,控制器(ActionServlet)进行初始化工作,读取配置文件(struts-config.xml),为不同的Struts模块初始化相应的ModuleConfig对象。比如配置文件中的Action映射定义都保存在ActionConfig集合中。相应地有ControlConfig集合、FormBeanConfig集合、ForwardConfig集合和MessageResourcesConfig集合等。
提示:模块是在Struts 1.1中新提出的概念,在稍后的内容中我们将详细介绍,你现在可以简单地把模块看作是一个子系统,它们共同组成整个应用,同时又各自独立。Struts 1.1中所有的处理都是在特定模块环境中进行的。模块的提出主要是为了解决Struts 1.0中单配置文件的问题。
控制器接收HTTP请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面。否则控制器将请求分发至具体Action类进行处理。
在控制器调用具体Action的execute方法之前,ActionForm对象将利用HTTP请求中的参数来填充自己(可选步骤,需要在配置文件中指定)。具体的ActionForm对象应该是ActionForm的子类对象,它其实就是一个JavaBean。此外,还可以在ActionForm类中调用validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。如果执行成功,ActionForm自动将这些参数信息以JavaBean(一般称之为form bean)的方式保存在Servlet Context中,这样它们就可以被其它Action对象或者JSP调用。
Struts将这些ActionForm的配置信息都放在FormBeanConfig集合中,通过它们Struts能够知道针对某个客户请求是否需要创建相应的ActionForm实例。
Action很简单,一般只包含一个execute方法,它负责执行相应的业务逻辑,如果需要,它也进行相应的数据检查。执行完成之后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。我们主张将获取数据和执行业务逻辑的功能放到具体的JavaBean当中,而Action只负责完成与控制有关的功能。遵循该原则,所以在上图中我将Action对象归为控制器部分。
提示:其实在Struts 1.1中,ActionMapping的作用完全可以由ActionConfig来替代,只不过由于它是公共API的一部分以及兼容性的问题得以保留。ActionMapping通过继承ActionConfig来获得与其一致的功能,你可以等同地看待它们。同理,其它例如ActionForward与ForwardConfig的关系也是如此。
下图给出了客户端从发出请求到获得响应整个过程的图解说明。
下面我们就来详细地讨论一下其中的每个部分,在这之前,先来了解一下模块的概念。
我们知道,在Struts 1.0中,我们只能在web.xml中为ActionServlet指定一个配置文件,这对于我们这些网上的教学例子来说当然没什么问题,但是在实际的应用开发过程中,可能会有些麻烦。因为许多开发人员都可能同时需要修改配置文件,但是配置文件只能同时被一个人修改,这样肯定会造成一定程度上的资源争夺,势必会影响开发效率和引起开发人员的抱怨。
在Struts 1.1中,为了解决这个并行开发的问题,提出了两种解决方案:
- 多个配置文件的支持
- 模块的支持
支持多个配置文件,是指你能够为ActionServlet同时指定多个xml配置文件,文件之间以逗号分隔,比如Struts提供的MailReader演示例子中就采用该种方法。
|
这种方法可以很好地解决修改冲突的问题,不同的开发人员可以在不同的配置文件中设置自己的Action、ActionForm等等(当然不是说每个开发人员都需要自己的配置文件,可以按照系统的功能模块进行划分)。但是,这里还是存在一个潜在的问题,就是可能不同的配置文件之间会产生冲突,因为在ActionServlet初始化的时候这几个文件最终还是需要合并到一起的。比如,在struts-config.xml中配置了一个名为success的<forward>,而在struts-config-registration.xml中也配置了一个同样的<forward>,那么执行起来就会产生冲突。
为了彻底解决这种冲突,Struts 1.1中引进了模块(Module)的概念。一个模块就是一个独立的子系统,你可以在其中进行任意所需的配置,同时又不必担心和其它的配置文件产生冲突。因为前面我们讲过,ActionServlet是将不同的模块信息保存在不同的ModuleConfig对象中的。要使用模块的功能,需要进行以下的准备工作:
1、为每个模块准备一个配置文件
2、配置web.xml文件,通知控制器
决定采用多个模块以后,你需要将这些信息告诉控制器,这需要在web.xml文件进行配置。下面是一个典型的多模块配置:
|
要配置多个模块,你需要在原有的一个<init-param>(在Struts 1.1中将其对应的模块称为缺省模块)的基础之上,增加模块对应的<init-param>。其中<param-name>表示为config/XXX的形式,其中XXX为对应的模块名,<param-value>中还是指定模块对应的配置文件。上面这个例子说明该应用有三个模块,分别是缺省模块、customer和order,它们分别对应不同的配置文件。
3、准备各个模块所需的ActionForm、Action和JSP等资源
但是要注意的是,模块的出现也同时带来了一个问题,即如何在不同模块间进行转发?有两种方法可以实现模块间的转发,一种就是在<forward>(全局或者本地)中定义,另外一种就是利用org.apache.struts.actions.SwitchAction。
下面就是一个全局的例子:
|
可以看出,只需要在原有的path属性前加上模块名,同时将contextRelative属性置为true即可。此外,你也可以在<action>中定义一个类似的本地<forward>。
|
如果你已经处在其他模块,需要转回到缺省模块,那应该类似下面这样定义,即模块名为空。
<forward name="success" contextRelative="true" path="/login.do"/> |
此外,你也可以使用org.apache.struts.actions.SwitchAction,例如:
|
发表评论
-
struts1 vs struts2
2012-06-07 10:55 1061struts1 2001年6月发布str ... -
struts中通过action跳转到外网(框架页面)
2010-04-26 16:26 2302HttpSession session = arg2.getS ... -
struts中利用ExceptionHandler处理异常
2010-02-03 18:14 697在Struts1.X的版本中加入了对异常的处理 ... -
Struts+spring, 多模块Struts配置文件
2010-01-13 10:41 11721. web.xml ... <init-param&g ... -
struts1.2多模块开发
2010-01-13 10:24 1466一、多个配置文件的支持和模块的支持支持多个配置文件,是指你能够 ... -
struts1.2与spring整合手记
2010-01-12 16:51 1057相关文章: spring入门编程问题集锦 ... -
Struts action mapping (controller的inputforward属性)
2010-01-12 16:22 31301. Full action 这可以说是Struts ac ... -
Struts1.2 控制流程----面试时可用
2010-01-12 15:34 1081有的同学问我如何向面 ... -
深入Struts1.1(下)
2010-01-12 15:21 988在Struts 1.1中,除了DynaActionForm以外 ... -
深入Struts1.1(中)
2010-01-12 15:19 755ActionServlet 我们首先来 ... -
struts1.x执行流程分析
2010-01-12 14:49 1456先来整体的了解一下Struts的工作流程. 在实现一个基于S ... -
一步一步学习 Struts
2009-11-05 16:22 814专栏: 一步一步跟我学Struts2 (17) 如何学习S ... -
Struts2 OGNL
2009-11-05 15:27 1261众所周知,Strut 2的Action类通过属性可以获得所有相 ... -
struts2验证信息重复出现解决方案
2009-10-17 10:33 1270今天遇到一个很蠢的问题,所以写下来给自己留个教训。 ... -
STRUTS2.0影射REST风格地址
2009-10-14 14:40 1060[摘要]: 介绍如何改写Struts2的Restful2Act ... -
strust2标签实践总结
2009-10-06 00:42 14371:输出action中属性值,在jsp页面中显示用:<s ... -
关于Spring , Struts结合学习
2009-09-30 13:28 874关于Spring , Struts结合学习。 一、前言 刚 ...
相关推荐
Struts 1.1 源代码分析 Struts 是 Apache 软件基金会下的一个开源框架,主要用于构建基于 Java 的企业级 Web 应用程序。...希望这次对 Struts 1.1 源代码的剖析能对你有所帮助,让你在 Java Web 开发领域更上一层楼。
论Struts 1.1框架的关键特性及其...通过深入理解Struts 1.1的组件和工作原理,开发者可以更好地构建可扩展、可维护的大型企业级应用。在实际开发中,正确地使用Struts 1.1的各种特性,能够显著提升开发效率和应用质量。
Struts 1.1 API 是一个用于构建基于Java的企业级Web应用程序的重要框架。这个API包含了Struts 1.1版本的核心组件、控制器...通过深入理解和实践这些API,开发者可以更好地利用Struts来构建健壮且可扩展的Java Web应用。
这个"struts1.1_EJB小例子"很可能是演示如何在Struts 1.1框架下集成和使用EJB。具体实现可能包括创建一个Action,该Action通过调用EJB来处理业务逻辑,然后返回结果给客户端。通过分析源码,我们可以学习到如何在Web...
通过这个模拟项目,开发者可以深入理解Struts1.1和EJB在实际项目中的配合使用,提升在Java Web开发领域的专业技能。同时,train_lwf可能是一个训练或示例文件,它可能是项目中的一个部分,例如包含了一些练习、教程...
9. **拦截器(Interceptor)**: 虽然Struts 1.1没有引入完整的拦截器概念,但它的PlugIn机制在某种程度上实现了类似的功能,允许开发者在请求处理流程中插入自定义逻辑。 10. **异常处理**: Struts 1.1提供了处理...
在本文中,我们将深入探讨Struts 1.1 API的主要组件、功能以及如何利用它们来构建高效的Web应用程序。 首先,Struts的核心组件包括Action、ActionForm、ActionServlet和配置文件。Action是处理用户请求的业务逻辑...
Struts 1在后续版本中不断演进,添加了更多特性,但随着Spring MVC和Play Framework等新型框架的崛起,Struts 1逐渐被替换,尽管如此,它仍然是Java Web开发历史上的一个重要里程碑,为后来的MVC框架奠定了基础。...
"重要说明.txt"可能包含了使用Struts 1.1 API时需要注意的事项和最佳实践,而"阅读器及更多E书下载.url"则可能是指向其他相关开发资源的链接,帮助开发者深入学习和理解Struts框架。 了解和掌握这些核心概念,...
解决这些问题通常需要对Struts和Validator的工作原理有深入理解,以及熟悉XML配置和异常处理。通过仔细阅读官方文档,查阅相关论坛和博客,如给出的链接,可以找到更多解决问题的线索和示例代码。 在实际操作中,...
Struts1.1版本在当时是非常流行的一个版本,它帮助开发者更好地组织和控制应用程序的流程,使得业务逻辑与展示层分离,提高代码的可维护性和可重用性。这个CHM文件可能会涵盖Struts的核心概念,如ActionForm、Action...
本文就将带你走进Struts1.1去深入地了解这些功能。说明:希望本文的读者能有一定的Struts使用基础。Model2Struts是基于Model2之上的,而Model2是经典的MVC(模型-视图-控制器)模型的Web应用变体,这个改变主要是...
《精通Struts1.1》是一本专注于Java Web开发领域中的经典著作,主要围绕着Struts 1.1框架展开,旨在帮助读者深入理解和熟练应用这个基于Model-View-Controller(MVC)设计模式的开源框架。Struts是Apache软件基金会...
在深入探讨Struts1.1的知识点之前,我们先来了解一下Struts的基本概念。 Struts是一个MVC(Model-View-Controller)框架,它提供了一种结构化的开发方式,将业务逻辑、数据模型和用户界面分离,使代码更易于维护和...
这个版本包含了文档、源码以及相关的库文件,对于开发者来说,是深入理解和自定义Struts2功能的重要资源。 首先,Struts2是一个流行的开源框架,由Apache软件基金会维护。它的核心功能是处理HTTP请求,提供强大的...
Struts2.2.1.1源码是一个重要的开源框架,它是Apache...总之,Struts2.2.1.1源码是一份宝贵的教育资源,对于Java Web开发者来说,深入研究不仅可以提高技术水平,也有助于在实际项目中更好地运用和优化Struts2框架。
通过深入学习和理解Struts 1.1 API,开发者能够有效地构建和管理复杂的Web应用程序,提高开发效率,同时利用框架提供的功能来增强应用的可扩展性和可维护性。查阅CHM文档,可以帮助开发者快速定位并了解每个类、接口...
深入学习Struts1的源代码,可以让我们更好地理解MVC模式在实际应用中的实现,了解控制层、模型层和视图层如何协作。同时,也能帮助我们了解Web应用程序的生命周期,以及如何通过配置文件来定制框架的行为。这对于...