1 Action
每个Action在第一次请求的时候初始化,而不是在ActonServlet启动读取配置的时候初始化。
在web环境中,Actioni一旦被初始化就一直存在于容器中,也就是单例模式。如果处理不当会产生并发问题,所以一般不能在Action中保存用户状态。
即使在<action>配置中多个path路径都指向同一个Action类,在内存中也只有一份Action,也就是说多个url访问到的Action都是同一个。
如果要统计Action被访问的次数,则可以利用Action的单例性在Action中设置一个属性来进行统计。
在Action的execute()方法中,一般需要返回一个ActionForward对象,但是如果返回null,这时,ActionServlet就不会做相应的转发处理,而只是简单的返回。所以如果业务逻辑很简单的话,也可以在execute()中直接调用response.getWriter(),得到PrintWriter对象,然后和普通servlet一样,用pw对象输出响应。
2 ActionMapping
struts-config.xml中的<action>元素的配置都被一个org.apache.struts.action.ActionMapping实例所封装,包括path,name,forward属性。通过这个对象可以得到action对应的配置属性。
这个实例对象也在Action.execute()方法中作为第一个参数传递,所以我们可以在execute()方法中得到这个Action的配置信息。
ActionMapping中有一些set/get方法,但是在execute()中进行set时,会抛出异常,操作被frozen,set只能在struts框架中调用,初始化完成后就被禁止访问了。
3 ActionForward
ActionForward类封装了在<forward>标签中的配置,可以通过逻辑名称name得到path指向的页面或者资源路径。其中的redirect属性如果为true则指明使用sendRedirect方法重定向,否则默认就是请求转发。还有个重要的属性,contextRelative
指明了path中的/是站点根目录context-relative还是应用根目录module-relative。默认是false指明是应用根目录。如果不写 / 的话,就必须是完全绝对路径,http://...这样加协议头的。
4 ActionForm
生命周期:
- 检查Action的映射,确定存在对应的Action
- 根据name属性,查找formbean的配置信息
- 检查ActionForm的使用范围(request or session),确定在此范围下是否已经存在一个实例
- 如果已经存在了这样一个formbean,就重用,否则就重新构建一个formbean对象,并且置入相应的范围(request or session)中,scope属性需要在<action>元素中配置,如果不配置scope属性,默认是session!
- 调用reset方法
- 调用form的set方法为属性赋值
- 如果<action>元素中的validate属性为true,就调用formbean的validate方法进行校验
- 如果vallidate方法没有返回错误信息,ActionServlet就将formbean作为参数传给Action.execute()方法,否则返回input页面
注:ActionForm基类中的reset和validate方法都没有实际处理能力,需要自己来覆写来实现功能。
分享到:
相关推荐
Struts1 API是开发者在使用Struts1框架进行开发时的重要参考文档,提供了框架的核心组件、类库以及方法的详细说明。 在描述中提到的"使用Struts的中文API",这对于不熟悉英文文档的开发者来说是一个宝贵的资源,它...
在Struts框架中,`validate`是用于表单验证的重要组成部分,帮助开发者实现业务逻辑中的数据校验。 在`struts validate`中,验证过程通常分为两个阶段:客户端验证和服务器端验证。客户端验证通常使用JavaScript...
总之,掌握Struts2、Spring3和Hibernate的整合应用是成为一名合格的Java EE开发者的重要技能,它可以帮助我们构建出高效、稳定、易于维护的企业级应用。在学习过程中,不仅要理解各个框架的基本概念,还要熟悉它们的...
Struts2漏洞通常涉及到框架的核心组件,例如OGNL(Object-Graph Navigation Language)表达式,这是一种强大的语言,允许在运行时动态地操作对象属性。2017年,一个名为CVE-2017-9805的重大漏洞被发现,它允许远程...
Struts和Oracle是两个在IT领域中非常重要的技术,它们被广泛应用于构建高效、稳定的Web应用程序,特别是企业级的应用。这个"news.rar_Struts+Oracle_oracle_struts新闻发布系统"项目,显然就是利用Struts框架与...
由于OGNL(Object-Graph Navigation Language)是Struts2中用于表达式语言的组件,恶意用户可以通过OGNL表达式来绕过安全控制,注入并执行恶意代码。 该描述提到的"Struct 2 S2-045/046 漏洞检测工具"是一个用于...
而Struts作为控制器,协调各个组件协同工作,实现了业务逻辑和视图的分离,提高了代码的可维护性和可扩展性。对于初学者来说,通过学习这个项目,可以深入理解Web开发的基本流程,掌握Struts框架的工作原理和配置...
这个“struts-api.rar”压缩包包含的是Struts框架的重要API文档,对于深入理解和使用Struts是至关重要的。在本文中,我们将详细探讨Struts API及其相关知识点。 1. **Struts架构**: Struts框架的核心设计是基于...
在实际的“vote_struts_DAO”项目中,文件名列表“vote_struts_DAO”可能包括以下组件: 1. Action类:如`VoteAction.java`,实现投票业务逻辑。 2. DAO接口:如`VoteDAO.java`,定义数据库操作接口。 3. DAO实现类...
配置文件是任何框架的核心,因为它们定义了框架的行为和组件间的通信方式。 首先,让我们从Struts2的配置开始。`struts-default.xml`通常包含默认的拦截器栈和全局结果,而`struts-plugin.xml`则用于定义Struts2和...
在这个项目中,Struts1扮演着核心控制器的角色,协调各个组件协同工作,实现用户交互和数据处理。 首先,让我们了解Struts1的核心概念。Action类是Struts1的心脏,它接收来自客户端的请求,执行相应的业务逻辑,并...
在`jar_struts2`这个压缩包中,可能包含以下重要知识点: 1. **Struts2核心组件**:Struts2的核心组件包括Action、Interceptor(拦截器)、Result(结果类型)和Plug-in(插件)。Action负责处理用户请求,...
描述中提到的“开发时必须包含的5个核心包”可能指的是以下关键组件: 1. **Struts2 Core**:这是Struts2的核心模块,包含了处理请求、执行Action、管理配置信息等功能。它实现了MVC架构,提供了Action、Result、...
在Struts框架中,数据库连接池是一个重要的组件,它能够有效地管理数据库连接,提高应用性能并降低资源消耗。本篇文章将深入探讨如何在Struts中配置数据库连接池,并介绍相关的关键知识点。 首先,数据库连接池是一...
此系统采用Struts框架和ExitServlet进行设计,下面我们将深入探讨这两个关键组件及其在系统中的作用。 首先,Struts是一个开源的Java Web应用框架,它遵循Model-View-Controller(MVC)设计模式,旨在简化开发过程...
**JavaEE设计模式** 对于理解Struts2的工作原理非常重要。其中,**前端控制器模式**是Struts2中最为关键的设计模式之一。这种模式的主要作用是集中处理所有的HTTP请求,并将请求转发给合适的组件处理。 ### 2. ...
Struts 1的核心组件包括ActionServlet、ActionForm、Action和Tiles等。ActionServlet作为控制器,负责转发请求;ActionForm用于封装用户输入的数据;Action则处理业务逻辑,与模型交互;Tiles用于页面布局。 **...
OGNL(Object-Graph Navigation Language)是Struts2框架中重要的表达式语言,它用于在应用程序中进行数据绑定和表达式求值。这篇文档将详细解释OGNL API及其在Struts2框架中的应用。 首先,OGNL是一个强大的、动态...
Struts1的核心是ActionServlet,这是一个实现了Servlet API的控制器组件,负责处理HTTP请求,并将请求转发给相应的业务逻辑组件(Action)。ActionForm对象用于收集用户输入的数据,而视图通常是JSP页面,通过JSP...
标题中的"struts2-core-2[1].0.11.zip"指的是Struts2的核心库版本2.0.11.2,这是一个重要的组件,包含了处理请求、动作映射、结果渲染等核心功能。 在描述中提到的"有错误是难免的",这通常是指任何软件,包括开源...