`
oyhf521
  • 浏览: 41530 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Action类

    博客分类:
  • J2EE
阅读更多

ActionMapping类
将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的execute()方法,Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null.
ActionMapping的方法:
public ExceptionConfig findException(Class type) ,查找异常对象
public ActionForward findForward(String name) 可在映射中动态添加ActionForward:
public String[] findForwards()找到一个Action可以使用的actionForward列表
public ActionForward getInputForward()  得到本action的输入ActionForard.
ActionMapping继承于org.apache.struts.config.ActionConfig

Action类
Action类真正实现应用程序的事务逻辑,它们负责处理请求。在收到请求后,ActionServlet会:
1.为这个请求选择适当的Action
2.如果需要,创建Action的一个实例
3.调用Action的execute()方法
如果ActionServlet不能找到有效的映射,它会调用默认的Action类(在配置文件中定义)。如果找到了ActionServlet将适当的ActionMapping类转发给Action,这个Action使用ActionMapping找到本地转发,然后获得并设置ActionMapping属性。根据servlet的环境和被覆盖的execute ()方法的签名,ActionServlet也会传送ServletRequest对象或HttpServletRequest对象。
所有Action类都扩展org.apache.struts.action.Action类,并且覆盖类中定义的某一个execute ()方法。有两个execute ()方法:
处理非HTTP(一般的)请求:
public ActionForward execute (ActionMapping action,
Acionform form,
ServletRequest request,
ServletResponse response)
   throws java.lang.Exception
处理HTTP请求:
public ActionForward execute (ActionMapping action,
Acionform form,
HttpServletRequest request,
HttpServletResponse response)
   throws java.lang.Exception
Action类必须以”线程安全”的方式进行编程,因为控制器会令多个同时发生的请求共享同一个实例,相应的,在设计Action类时就需要注意以下几点:
不能使用实例或静态变量存储特定请求的状态信息,它们会在同一个操作中共享跨越请求的全局资源
如果要访问的资源(如JavaBeans和会话变量)在并行访问时需要进行保护,那么访问就要进行同步
Action类的方法
除了execute ()方法外,还有以下方法:
可以获得或设置与请求相关联的区域:
public Locale getLocale(HttpServletRequest request)
public void setLocale(HttpServletRequest request,Locale locale)
为应用程序获得消息资源:
protected MessageResources getResources(HttpServletRequest request)
protected MessageResources getResources(HttpServletRequest request,String key)
检查用户是否点击表单上的”取消”键,如果是,将返回true:
public Boolean isCancelled(HttpServletRequest request)
当应用程序发生错误时,Action类能够使用下面方法存储错误信息:
public void saveErrors(HttpServletRequest request,ActionErrors errors)
public void saveMessages(HttpServletRequest request,ActionMessages messages)
ActionError实例被用来存储错误信息,这个方法在错误关键字下的请求属性列表中存储ActionError对象。通过使用在struts标记库中定义的自定义标记,JSP页能够显示这些错误信息。ActionMessages 用来存储一些提示信息,不是错误,在jsp页面可以使用标记现实这些提示信息。
请求有效性处理,使用令牌可以有效的防止重复提交。
protected String generateToken(HttpServletRequest request) 创建一个令牌.
protected boolean isTokenValid(HttpServletRequest request) 检查令牌是否有效
protected boolean isTokenValid(HttpServletRequest request,Boolean reset) 检查令牌是否有效,并且重置令牌(如果reset 是true)
protected void resetToken(HttpServletRequest request) 重置令牌
protected void saveToken(HttpServletRequest request) 添加令牌
获取数据库连接
protected DataSource getDataSource(HttpServletRequest request)
protected DataSource getDataSource(HttpServletRequest request, String key)
其他的
ActionServlet getServlet()  可以获得本action的配置信息.

DispatchAction类
DispatchAction是Action的子类,主要功能可以实现,动态的方法调用。例如action中有一个方法update(ActionMapping mapping, Actionform form, HttpServletRequest request, HttpServletResponse response), 可以通过 saveSubscription.do?method=update来调用update方法。这个类不需要我们实现其他方法,我们只要实现 XXX(ActionMapping mapping, Actionform form, HttpServletRequest request, HttpServletResponse response)就可以了。
在http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=1166&show=150和
http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=1129有对DispatchAction和LookupDispatchAction的详细介绍

 

SwitchAction类
SwitchAction是Action的子类,主要功能是将请求在不同的模块之间转发。对于大的项目很有用。具体看http://www.chinajavaworld.net/forum/topic.cgi?forum=48&topic=1029&show=0

Actionform类
假设用户在应用程序中为每个表单都创建了一个Actionform bean,对于每个在struts-config.xml文件中定义的bean,框架在调用Action类的execute()方法之前会进行以下操作:
在相关联的关键字下,它检查用于适当类的bean实例的用户会话(或请求),如果在会话(或请求)中没有可用的bean,它就会自动创建一个新的bean并添加到用户的会话(或请求)中。至于是在会话还是请求取决于struts-config.xml 中Action 的scope属性。在创建Actionform的时候,系统会将请求中的值,进行相应的类型转换以后对Actionform进行初始化。
对于请求中每个与bean属性名称对应的参数,Action调用相应的设置方法。
当Action execute()被调用时,最新的Actionform bean传送给它,参数值就可以立即使用了。
Actionform类扩展org.apache.struts.action.Actionform类,程序开发人员创建的bean能够包含额外的属性,而且ActionServlet可能使用反射(允许从已加载的对象中回收信息)访问它。
Actionform类提供了另一种处理错误的手段,提供两个方法:
Public ActionErrors validate(ActionMappin mapping, ServletRequest request)
Public ActionErrors validate(ActionMappin mapping, HttpServletRequest request)
你应该在自己的bean里覆盖validate()方法,并在配置文件里设置<action></action>元素的validate为true。在ActionServlet调用Action类前,它会调用validate(),如果返回的ActionErrors不是null,则Actinform会根据错误关键字将ActionErrors存储在请求属性列表中。
如果返回的不是null,而且长度大于0,则根据错误关键字将实例存储在请求的属性列表中,然后ActionServlet将响应转发到配置文件<action></action>元素的input属性所指向的目标。
如果需要执行特定的数据有效性检查,最好在Action类中进行这个操作,而不是在Actionform类中进行。
方法reset()可将bean的属性恢复到默认值:
public void reset(ActionMapping mapping,HttpServletRequest request)
public void reset(ActionMapping mapping,ServletRequest request)
典型的ActionFrom bean只有属性的设置与读取方法(getXXX),而没有实现事务逻辑的方法。只有简单的输入检查逻辑,使用的目的是为了存储用户在相关表单中输入的最新数据,以便可以将同一网页进行再生,同时提供一组错误信息,这样就可以让用户修改不正确的输入数据。而真正对数据有效性进行检查的是Action类或适当的事务逻辑bean。
Actionform中属性允许的类型boolean,byte,short,char,int,long,float,double,Boolean,Btye,Short, Character,Integer,Long,Float,Double,String,Date,Time,Timestamp,Object,以及以上类型的数组。
如果Actionform bean 的属性是一个数组则相应的设置和读取方法要做部分修改。对于数组setXXX(…),和getXXX()在jsp页面中意义不大。应该将添加setXXX( int index , …. ) 方法和getXXX ( int index )方法。这两个方法对于jsp页面来说更有意义。jsp中的property应该是XXX[0]。
如果Actionform bean的属性是一个 Map则应该提供方法setXXX( String key , … )和getXXX(String key),使得jsp页面可以访问Map属性。jsp中的properry应该是XXX(keyname)。
通过getXXX(int index),setXXX (int index,…),getXXX(String key),setXXX(String key,…)可以方便的实现重复html输入框。
例如:
public class Fooform extends Actionform {
   private String yourName;
   public String getYourName() {
       return yourName;
   }
   public void setYourName(String yourName) {
       this.yourName = yourName;
   }
   private final Map values = new HashMap();
   public void setvalue(String key, Object value) {
       values.put(key, value);
   }
   public Object getvalue(String key) {
       if ( values.containsKey(key)){
           return values.get(key);
       }else{
           return "";
       }
   }
   …
}


Validatorform类
org.apache.struts.validator.Validatorform类继承了Actionform类。使用本类可以方便的实现表单参数的校验。在校验的时候,使用在struts-config.xml中action元素中的name属性,确定要在validation.xml中取得校验规则的依据。
使用本类可以方便的解决同一个form在不同的Action中使用不同的校验规则的问题。在继承了Validatorform的类中不再需要我们去写validate方法。而是由Validatorform中的validate方法通过读取validation.xml中的描述信息来进行数据的校验。使用Validatorform也可以方便的实现在浏览器端实现利用脚本的校验。
Validatorform中的新增加的方法:
int getPage()
java.util.Map getResultvalueMap()
ValidatorResults getValidatorResults()
void setPage(int page)
void setValidatorResults()
使用本类可以大大提高我们的编程效率。
ValidatorActionform类
org.apache.struts.validator.ValidatorActionform类继承了Validatorform类。使用本类可以方便的实现表单参数的校验。在校验的时候,使用在struts-config.xml中action元素中的path属性,确定要在validation.xml中取得校验规则的依据。

DynaActionform类
org.apache.struts.action.DynaActionform类继承了Actionform类。使用本类可以方便的实现动态表单。创建不确定的表单,如果jsp发生了变化只需要修改jsp页面和struts-config.xml文件中的form-bean元素就可以了。我们的程序中完全可以不用手工书写actionform的类了。
DynaActionform中的方法:
boolean contains(String name, String key) 检测name(key)在actionform中是否存在。
Object get(String name) 从actionform中取得name的值。
Object get(String name,int index) 从actionform中取得 name对象的index个值。
Object get(String name,String key)从actionform中取得name对象的key对应的值。
Map getMap() 返回对象中包含的对象属性名列表。
void remove(String name, String key) 删除一个元素。
void set(String name, int index,Object value) 对actionform中的属性进行赋值。
void set(String name,Object value)
void set(String name, Strign key ,Object value)

DynaValidatorform类
org.apache.struts.validator.DynaValidatorform类继承了DynaActionform类。使用本类可以方便的实现表单参数的校验。在校验的时候,使用在struts-config.xml中action元素中的name属性,确定要在validation.xml中取得校验规则的依据。
至于校验,同Validatorform。
DynaValidatorform中的新增加的方法:
int getPage()
java.util.Map getResultvalueMap()
ValidatorResults getValidatorResults()
void setPage(int page)
void setValidatorResults()

DynaValidatorActionform类
org.apache.struts.validator.DynaValidatorActionform类继承了DynaValidatorform类。使用本类可以方便的实现表单参数的校验。在校验的时候,使用在struts-config.xml中action元素中的path属性,确定要在validation.xml中取得校验规则的依据。
至于校验,同Validatorform。

ActionForward类
ActionForward类继承了org.apache.struts.config.ForwardConfig。
ForwardConfig的方法:
String getName() 虚名字
String getPath() 实际路径
boolean getRedirect() 是否重定向
void setName(String name)
void setPath(String path)
void setRedirect(boolean redirect)

ActionForward目的是控制器将Action类的处理结果转发至目的地。
Action类获得ActionForward实例的句柄,然后可用两种方法返回到ActionServlet,
ActionMapping实例被传送到execute()方法,使用actionMapping的findForward(String name)根据名称获取一个全局转发或本地转发。
另一种是调用下面的一个构造器来创建它们自己的一个实例:
public ActionForward()
public ActionForward(String path)
public ActionForward(String path,Boolean redirect)
public ActionForward(String name,String path,Boolean redirect)
public ActionForward(String name,String path,Boolean redirect, boolean contextRelative)
或下面的构造方法(下面是ActionForward的子类)
ForwardingActionForward()
ForwardingActionForward(String path)  
RedirectingActionForward()
RedirectingActionForward(String path)

分享到:
评论
1 楼 pubx 2007-04-23  
[b][i][u]rw gda ag

相关推荐

    EXTJS4.0视频教程配套代码包含action类

    这个视频教程配套代码主要涉及EXTJS4.0中的action类,这是EXTJS中处理服务器端交互的关键部分。在EXTJS中,action类通常指的是Ext.Ajax或Ext.data.proxy.Ajax,它们负责发送异步请求到服务器并处理响应。 在EXTJS...

    重新封装struts中action类

    `重新封装struts中action类`这个主题主要涉及的是对Struts中默认的`Action`类进行扩展和优化,以便更好地满足项目需求。在描述中提到的封装主要目标是屏蔽`ActionMapping`对象,使得子类化的`Action`类中的方法只...

    struts2一个action处理多个请求 struts2实例

    在Struts2框架中,Action类是业务逻辑处理的核心组件,它负责接收并处理来自用户的请求。本实例探讨了如何让一个Action类处理多个请求,这在开发中常见于需要集中处理相似请求的情况,可以提高代码复用性和结构的...

    一个Action对应多个类实例。

    在这个框架中,Action类扮演着控制器的角色,负责接收用户请求,处理业务逻辑,并将结果传递给视图进行展示。 **1. Action类的角色** Action类是Struts框架的核心组件,它处理用户的请求并控制应用的行为。一个...

    action登陆实现,获取web元素

    在这个场景中,"action登陆实现,获取web元素"指的是通过Action类来实现用户登录功能,并在登录过程中与Web页面上的元素进行交互。 首先,我们来详细探讨Action类的使用。Action类是业务逻辑的载体,它接收来自...

    struts2例子中的action类

    很经典的struts2开发实例,其中的action类的写法可以教你很清楚的了解具体的调用过程回给你开发带来很大的帮助

    自定义Action继承ActionSupport实现简单登录

    在Struts2框架中,自定义Action类是处理用户请求的核心组件。`ActionSupport`是Struts2提供的一种基础Action类,它包含了多种内置功能,如国际化、异常处理和校验支持等。当我们需要实现一个特定的功能,比如这里的...

    Junit测试Action

    【标题】"Junit测试Action"涉及的是在Java开发中使用JUnit进行Action类的单元测试。JUnit是一款广泛使用的Java编程语言的单元测试框架,它使得开发者能够方便地编写和执行测试用例,确保代码的质量和功能的正确性。 ...

    struts的一个Action类。

    基于web开发的struts应用的一个action代码,帮助初学者学习参考,希望有所帮助。

    Action——Action的配置和作用

    此外,Action类在处理请求时,还可以作为数据传输的中介,通过定义属性和提供getter、setter方法,Action类允许页面部分获取和提交数据。 我们还必须要讨论Action的配置。Action的配置通常在struts.xml文件中进行。...

    用MockStrutsTestCase测试action测试类

    在Struts框架中,Action类是核心组件,负责处理用户请求并调用业务逻辑。为了确保Action类的正确性和可靠性,开发者通常会进行单元测试。MockStrutsTestCase是Apache Struts提供的一个专用测试工具,它允许开发者...

    基于用户登陆的struts2中action的分类实例

    一个Action类通常对应一个具体的业务操作,比如登录、注册、修改个人信息等。它继承自`com.opensymphony.xwork2.ActionSupport`类或其子类,并重写`execute()`方法,这是处理请求的核心部分。Struts2通过配置文件...

    Struts2学习教程之Action类如何访问WEB资源

    在Struts2中,Action类是核心组件,它处理用户请求并控制应用程序的流程。本教程将深入讲解如何在Struts2的Action类中访问Web资源,如HttpServletRequest、HttpServletResponse和ServletContext。 首先,Web资源在B...

    ActionServlet demo

    当用户提交表单或点击链接时,请求会被发送到ActionServlet,它解析请求参数,根据配置的Action Mapping找到对应的Action类,然后调用该Action的execute()方法执行业务逻辑。ActionServlet是Struts的核心,它将用户...

    java-action.rar_action

    在Java Web开发框架中,如Struts和Spring MVC,Action类扮演着控制器的角色。标题"java-action.rar_action"中的"Action"通常指的是这样的控制器类。这类类负责接收用户的请求,处理业务逻辑,然后将结果传递给视图层...

    struts2.0之action

    在Struts 1.x中,Action类需要继承`org.apache.struts.action.Action`或其子类,同时表单数据会封装在FormBean中。而Struts 2.0则更加灵活,Action类不再需要强制继承特定的类或实现特定的接口。表单数据直接包含在...

    多action之间跳转传参问题

    在Struts2框架中,Action类是业务逻辑的载体,它负责接收用户的请求,处理业务逻辑,并返回相应的结果。当需要在多个Action之间跳转时,我们需要考虑如何在Action之间传递数据,以便后续的Action可以继续处理或展示...

    Struts 2.0的Action讲解

    与Struts 1.x相比,Struts 2.0的Action模型更加灵活,不再强制要求Action类必须继承特定的基类或实现特定接口。 在Struts 2.0中,Action类可以完全自定义,但为了方便开发,通常我们会选择继承`...

    Struts2 Action参数详细说明

    这里的`name`属性定义了Action的唯一标识,`class`属性指定了处理请求的Action类全路径,`namespace`属性用于区分不同的功能模块,`result`标签定义了Action执行成功后跳转的页面。 接着,我们讨论`method`属性。...

Global site tag (gtag.js) - Google Analytics