Struts中不同的Action和ActionForm组合 选择自 sean_gao 的 Blog

一个struts的action跳转大全 首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.xml的配置定位到相应的mapping (映射);接下来如果form的范围是request或者在定义的范围中找不到这个form,创建一个新的form实例;取得form实例以后,调用其 reset ()方法,然后将表单中的参数放入form,如果validate属性不为false,调用validate()方法;如果validate ()返回非空的ActionErrors,将会被转到input属性指定的URI,如果返回空的ActionErrors,那么执行Action的 execute() 方法,根据返回的ActionForward确定目标URI。 这样做的效果是:execute()仅当validate()成功以后才执行;input属性指定的是一个URI。 立即下载
 

在TSS.com上看到一篇好文,有关Struts使用中各种不同的Action和ActionForm组合的利弊。我先消化一下,整理好,供大家参考。原文标题:Struts action mappings: Divide Et Impera,作者:Michael Juravlev。在TSS上的URL:http://www.theserverside.com/articles/article.tss?l=StrutsActionMapping

说明:阅读本文需要一定的Struts基础。
注:文中小写的action不一定代表具体的Struts Action类,有时也指作为一个整体的action mapping。


[1] 完整的action

<action path="/aFullAction"
    type="somePackage.someActionClass">
    name="someForm"
    input="someJSP.jsp"
    <forward name="successful" path="someJSP.jsp"/>
    <forward name="failed" path="someOtherJSP.jsp"/>
</action>

首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.xml的配置定位到相应的mapping(映射);接下来如果form的范围是request或者在定义的范围中找不到这个form,创建一个新的form实例;取得form实例以后,调用其reset()方法,然后将表单中的参数放入form,如果validate属性不为false,调用validate()方法;如果validate()返回非空的ActionErrors,将会被转到input属性指定的URI,如果返回空的ActionErrors,那么执行Action的execute()方法,根据返回的ActionForward确定目标URI。

这样做的效果是:execute()仅当validate()成功以后才执行;input属性指定的是一个URI。


[2] 仅有Form的action

<action path="/aFormOnlyAction"
    type="org.apache.struts.actions.ForwardAction"
    name="someForm"
    input="someJSP.jsp"
    parameter="someOtherJSP.jsp"
/>

首先,Struts会在定义的scope搜寻someForm,如果找到则重用,如果找不到则新建一个实例;取得form实例以后,调用其reset()方法,然后将表单中的参数放入form,如果validate属性不为false,调用validate()方法;如果validate()返回非空的ActionErrors,将会被转到input属性指定的URI,如果返回空的ActionErrors,那么转到parameter属性指定的目标URI。

这样做的效果是:没有action类可以存放我们的业务逻辑,所以所有需要写入的逻辑都只能写到form的reset()或者validate()方法中。validate()的作用是验证和访问业务层。因为这里的action映射不包括forward(也没有意义),所以不能重定向,只能用默认的那个forward。这种仅有form的action可以用来处理数据获取并forward到另一个JSP来显示。


[3] 仅有Action的action

<action path="/anActionOnlyAction"
    type="somePackage.someActionClass">
    input="someJSP.jsp"
    <forward name="successful" path="someJSP.jsp"/>
    <forward name="failed" path="someOtherJSP.jsp"/>
</action>

首先,ActionServlet接收到请求后,取得action类实例,调用execute()方法;然后根据返回的ActionForward在配置中找forward,forward到指定的URI或action。

这样做的效果是:没有form实例被传入execute()方法,于是execute()必须自己从请求中获取参数。Action可以被forward或者重定向。这种action不能处理通过HTML FORM提交的请求,只能处理链接式的请求。


[4] 仅有JSP的action

<action path="/aJSPOnlyAction"
    type="org.apache.struts.actions.ForwardAction"
    parameter="someOtherJSP.jsp"
/>

首先,ActionServlet接到请求后调用ForwardAction的execute()方法,execute()根据配置的parameter属性值来forward到那个URI。

这样做的效果是:没有任何form被实例化,比较现实的情形可能是form在request更高级别的范围中定义;或者这个action被用作在应用程序编译好后充当系统参数,只需要更改这个配置文件而不需要重新编译系统。


[5] 两个action对应一个form

<action path="/anAction"
    type="somePackage.someActionClass">
    name="someForm"
    input="someJSP.jsp"
    <forward name="successful" path="/anotherAction.do"/>
</action>
<action path="/anotherAction"
    type="somePackage.someOtherActionClass">
    name="someForm"
    input="someOtherJSP.jsp"
    <forward name="successful" path="someResultJSP.jsp"/>
</action>

就每个单独的action来讲,处理上并没有和完整的action有什么实质的区别。这个组合模式可以被用来传递命令对象(form)。需要注意的是在后一个action中同样会调用form的reset()和validate()方法,因此我们必须确保form中的信息不被重写。

处理的方式大致分为两种:a) 在request中放入一个指示器表明前一个action有意向后一个action传递form,从而在后一个action可以保留那个form中的值,这一方式只能在使用forward时使用。b) 当使用redirect而不是forward时,可以把指示器放在session或更高的级别,在命令链的最后一环将这个指示器清除。


[6] 两个action对应两个form

<action path="/anAction"
    type="somePackage.someActionClass">
    name="someForm"
    input="someJSP.jsp"
    <forward name="successful" path="/anotherAction.do" redirect="true"/>
</action>
<action path="/anotherAction"
    type="somePackage.someOtherActionClass">"
    name="someOtherForm"
    input="someOtherJSP.jsp"
    <forward name="successful" path="someResultJSP.jsp"/>
</action>

这个组合方式跟前一种在流程上没有太大区别,只是我们现在对于两个action分别提供了form,于是代码看上去更加清晰。于是我们可以分别处理WEB应用程序的输入和输出。值得注意的是,后一个action同样会尝试往form中写入那些参数,不过我们可以这样处理:a) 在后一个form中使用另一套属性名;b) 只提供getter而不提供setter。

大致的处理是这样:
前一个action接收输入、验证、然后将数据写入业务层或持久层,重定向到后一个action,后一个action手动的从业务层/持久层取出数据,写入form(通过其他方式),交给前台JSP显示。

这样做的好处是不必保留输入form中的值,因此可以使用redirect而不是forward。这样就降低了两个action之间的耦合度,同时也避免了不必要的重复提交。

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】 Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性) 阅读详情

相关推荐

保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)

本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。

weixin_30800987的博客 618

[整理文章]Struts中不同的Action和ActionForm组合

在TSS.com上看到一篇好文,有关Struts使用中各种不同的Action和ActionForm组合的利弊。我先消化一下,整理好,供大家参考。原文标题:Struts action mappings: Divide Et Impera,作者:Michael Juravlev。在TSS上的URL:http://www.theserverside.com/articles/article.tss?l=

1208

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\\,\‘,\“,\?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解;

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\\,\',\",\?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解;

南城花开过的博客 3万+

struts1配置文件中action的常用属性

首先列举action的属性代码如下: <action path="URL" type="ActionClass" name="userForm" scope="request" attribute="key" input="/register.jsp" forward="/index.jsp" ...

weixin_34318272的博客 500

大模型蒸馏实战:让小模型获得大模型的知识

本文为初学者提供了一份大模型蒸馏实战指南,通过情感分析任务演示如何将 BERT 的知识迁移到轻量级 TextCNN。文章结合原理图解与 PyTorch 代码,详解软标签生成、温度调节和双损失设计等核心概念,并对比蒸馏前后的性能差异(准确率提升 4.6%,推理速度达 1200 句 / 秒)。内含可直接运行的代码片段、训练技巧及常见问题解答,助力开发者快速掌握模型压缩核心技术,实现工业级部署效率。适合 NLP 入门者学习实践。

1368

Zemax热分析实战:多重结构编辑器与操作数优化技巧

本文详细介绍了在Zemax中进行热分析的全流程,重点讲解了如何利用多重结构编辑器模拟不同温度环境,并通过TENP、CRVT、THIC等关键操作数建立热膨胀模型。文章结合双胶合透镜实例,阐述了如何设置热跟随、构建多温度评价函数,并运用锤型优化提升光学系统在全温度范围内的热稳定性与成像质量。

yog99的博客 575

Struts功能详解——Action

Action是struts中的一个抽象类,它其实是Struts的心脏部分,前面提到的ActionServlet和ActionForm进过处理获取的请求和数据,都会到达Action中得到分发。 一:Action有那些作用 可以进行一些表单数据的检查,这里面的检查一般和页面的检查是不一样的,页面的检查都是客户端的一些数据格式规范的检查,这里的检查而与业务相关的检查一般放到这里面检查,比如与JavaB...

web开发自学 507

一文搞懂多速率信号处理中信号插值的本质:从插 0、插原值到线性插值!

信号插值在数字信号处理中经常被使用,但“插值”背后究竟发生了什么,却常被忽略。插0、插原值、线性插值看似只是不同的实现方式,实则对应着完全不同的频域效应与滤波特性。本文将结合公式与MATLAB仿真,深入剖析插0、插原值与线性插值三种典型策略的本质区别。

m0_66360845的博客 918

Struts1 - 学习笔记 - Action

下面是Struts中的一些常用Action的总结,如: DispatchAction LookupDispatchAction MappingDispatchAction ForwardAction IncludeAction   1 .DispatchAction extends BaseAction 一般的Action如,在这里UserActio

永生天地 3227

【异常】Cursor IDE 扩展主机超时错误处理文档The agent execution provider did not respond within 4 seconds.

该错误通常是 Cursor IDE 的临时性问题,不影响项目代码。大多数情况下,重新加载窗口或重启 IDE 即可解决。如果问题持续,可按上述进阶方案排查。重新加载窗口(最快)重启 IDE检查系统资源清理缓存检查扩展更多关于 AI+教育领域的干货,可以关注我的微信公众号第一时间获取哦~

奶爸的编程之路,也就一周冷个三天 2699

SAP 消息号T-CODE

SAP消息号修改汇总 确实有很多消息是可以修改的 FI: oBA5|oFMG|oFPM MM: oMRM|oKZZ|oMT4|oMCQ|o04C| SD: oVAH(V4)|oVM1(VL) CO:  oPR4_ACT|oPR4_CK|oPR4_CKML|oPR4_CKPF|oPR4_KKA|oPR4_KKP|oPR4_KKS| oPR4_KKS1|oPR4_P

heng0757的专栏 1万+

Struts中不同的Action和ActionForm组合 选择自 sean_gao 的 Blog

 Struts中不同的Action和ActionForm组合 选择自 sean_gao 的 Blog document.title="Struts中不同的Action和ActionForm组合 选择自 sean_gao 的 Blog - "+document.title 在TSS.com上看到一篇好文,有关Struts使用中各种不同的Action和ActionForm组合的利

GOBY 栏目 787

【数据集2】CPC Global Unified Temperature/Precipitation数据简介及处理

简介CPC 温度及降雨 数据

WW、forever的博客 3105

[整理文章]Struts中不同的Action和ActionForm组合 选择自 sean_gao 的 Blog

点击88DOC.COM查找更多文档在TSS.com上看到一篇好文,有关Struts使用中各种不同的Action和ActionForm组合的利弊。我先消化一下,整理好,供大家参考。原文标题:Struts action mappings: Divide Et Impera,作者:Michael Juravlev。在TSS上的URL:http://www.theserverside.com/ar

云飘 869

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Struts中不同的Action和ActionForm组合(在技术中心看到的文章,觉得有用,所以自己收藏一下)引自http://blog.youkuaiyun.com/sean_gao/

[1] 完整的action     type="somePackage.someActionClass">    name="someForm"    input="someJSP.jsp"        首先,Struts的ActionServlet接收到一个请求,然后根据struts-config.xml的配置定位到相应的mapping(映射);接下来如果form的范围是request

123xxx的专栏 1257

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Struts2框架之Action详解

在struts 2中,action是其核心功能,使用struts 2框架,主要的开发都是围绕action进行的,我们编写的action通常需要实现com.opensymphony.xwork2.Action接口,需要实现的方法是execute方法,但是在实际的开发中,编写的action也可以不必实现action接口,而是直接创建一个普通Java类,并添加execute方法就可以public Stri

a3060858469的博客 2471

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Struts功能详解——ActionForm

一:什么是ActionForm ActionForm可以从下面四点理解它 1 . ActionForm表示Http窗体的数据,也就是咱们页面表单数据收集器,可以看作是模型和视图的中介,他负责保存表单中的数据供模型或者视图使用,只能通过ActionForm验证的数据才能发送到Action处理。 2 . ActionForm是一个或者多个ActionConfig关联的JavaBean,在相应的Acti...

web开发自学 299

Struts2的简单使用(三)action跳转

在这里我要说一下action跳转的方式~ 一共有4种方式:内部跳转,外部跳转,全局跳转,默认的跳转页面 内部跳转 1.dispatcher(action-jsp)  从一个action里面服务器内部跳转到一个页面中.这个是type属性的默认值. 写个例子~从JumpAction跳到register.jsp JumpAction类: public class JumpAction

重心开始,重新开始 3882

一口一口吃掉Struts(六)——动态ActionForm

使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便。 但是,ActionForm也存在一些明显的不足: 1、如果ActionForm对应的HTML表单添加或删除一些属性,ActionForm类就可能需要修改并重新编译;所以如果HTML表单是动态的,那么ActionForm就无能为力了; 2、ActionForm增加了项目中类...

星.云计算 394

Struts 学习笔记之ActionForm

版权所有:(xiaodaoxiaodao)蓝小刀    xiaodaoxiaodao@gmail.com http://www.blogjava.net/xiaodaoxiaodao/archive/2007/05/31/121264.html        转载请注明来源/作者   Struts 学习笔记之ActionForm   Struts 中定义了一些JavaBea

小樓東風的专栏 929

Struts的<action>和<result>标签、属性以及代表含义

1.ssh中&lt;action&gt;有name,class,method三类属性,而&lt;resule&gt;有name和type属性,具体如下 &lt;action name="请求字符串" class="控制类完整类名"method="控制类函数名"&gt;            &lt;result name="控制类函数返回值"                

Slovenia_groot的博客 1836

Struts2框架之Action配置

Struts2框架之Action配置

qq_42640067的博客 2188

Struts的Action配置解析(简单&详细过程)

文章目录了解Struts21.配置Struts环境2.在struts中配置package和action3.新建一个类4.在WebConent下添加一个jsp页面启动Tomcat运行项目 了解Struts2 Struts2是Apache发行的MVC开源框架。注意:它只是表现层web(MVC)框架 如图所示: Action其实就相当于servlet,我们用struts框架就相当于把之前的mvc三层整...

Dan的博客 2335

struts 中Action理解

struts 中Action理解 配置完 web.xml . 创建视图页面 login.jsp 创建业务控制器LoginAction类 配置LoginAction 类, 当Action 处理完客户端请求返回一个字符串, 首先要理解java 中的Servlet, Servlet 是运行在java服务器中的java 代码, 这个 Action 的本质是 Servlet , 他作为java web 的控制层, 他完成浏览器的请求之后,返回一个页面给客户端浏览器 其次, action 的处理流程是有struts 的

weixin_44197039的博客 1062

struts.xml中Action的配置详解

上一篇博文我已经基本上讲解了struts.xml的基本配置,但是实际上配置过程最为主要的是action的动态配置。 一、Action的创建方法    1)实现Action接口    2)继承ActionSupport类,覆写其中的方法    3)不继承任何类都可以实现,关键是在struts.xml中进行配置 二、Action动态方法的调用   在实际的项目中,一个act

zzjmay的专栏 7271

struts action Path 问题

struts action 的path  的匹配是这样的:  将请求的url 去除 servletContext 目录以及其前面的内容(http://localhost:8080),剩下的内容为:(例子)/user/login.do,   然后去除其后缀(.do),再用剩下的字符串和action 中的path 进行相等匹配,大小写区分的  所以如果要找到一个action 那么必须有一个act

didashao的专栏 1494
上一篇: Jakarta Commons:巧用类和组件
下一篇: Java开发源缓存系统的介绍
sswt
博客等级 码龄24年 1粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值