struts2动态调用方法总结记录

Struts2动态方法调用 Struts2动态方法调用 包括 1.js方法调用 2.普通的表单提交调用 3.通配符 立即下载

struts2动态方法调用
在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。

第一种方式:指定method属性
这种方式我们前面已经用到过,类似下面的配置就可以实现
<action name="chainAction" class="chapter2.action.Chapter2Action" method="chainAction">
<result name="chainAction" type="chain">redirect</result>
</action>
<action name="plainText" class="chapter2.action.Chapter2Action" method="plainText">
<result name="plainText" type="plainText">/WEB-INF/JspPage/chapter2/plaintext.jsp</result>
</action>

第二种方式:感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用.
用这种方式需要先开启一个开关
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> 将此常量设置为true,这种方式才能使用,使用见示例
Action:
package chapter3.action;

public class Chapter3Action {
public String result1(){
return "result1";
}

public String result2(){
return "result2";
}
}

Jsp中访问方式
<body>
<a href="${basePath}/chapter3/chapter3Action!result1">result1</a><br>
<a href="${basePath}/chapter3/chapter3Action!result2">result2</a><br>
</body>
如果配置了后缀,必须这样写:
/chapter4/chapter4Action!create.action
XML中配置方式
<package name="chapter3" namespace="/chapter3" extends="struts-default">
<action name="chapter3Action" class="chapter3.action.Chapter3Action">
<result name="result1">/WEB-INF/JspPage/chapter3/result1.jsp</result>
<result name="result2">/WEB-INF/JspPage/chapter3/result2.jsp</result>
</action>
</package>

第三种方式:通配符方式(官网推荐使用)
首先得关闭开关
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
这一种方式是由第一种转变过来的,我们可以看到,第一种方式有很多重复的代码,那么我们可以进行变形,看下面的代码
<action name="chapter3_*" class="chapter3.action.Chapter3Action" method="{1}">
<result name="test">/…/test.jsp</result>
</action>
chapter3_*这里的*就是你呆会要匹配的字符串,即你在后面的请求中得这样写
http://...../ chapter3_create 或 http://...../ chapter3_update
注意,这时你action中必须有create和update方法与之匹配,甚至还可以这样匹配
<action name="chapter3_*" class="chapter3.action.Chapter3Action" method="{1}">
<result name="test">/…/{1}.jsp</result>
</action>
但是这时一定要有对应的JSP页面存在,并且相应的路径不能错,这就对我们的命名进行了强制性的规定,一定要规范.

课堂示例:
Action
public class Chapter4Action extends ActionSupport {
public String list(){
return "list";
}

public String create(){
return "create";
}

public String index(){
return "index";
}
}
XML:
<action name="chapter4_*" class="chapter4.action.Chapter4Action" method="{1}">
<result name="{1}">/WEB-INF/JspPage/chapter4/chapter4_{1}.jsp</result>
</action>


访问Servlet API
有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式.
间接访问1
//向Session中放
ActionContext.getContext().getSession().put("wdpc", "Session中的WDPC");

//向request中放
ActionContext.getContext().put("wdpc","request中的WDPC");

//向application中放
ActionContext.getContext().getApplication().put("wdpc", "Application中的WDPC");

取值方式:
ActionContext.getContext().getSession().get("wdpc");


间接访问2


Struts2中提供了一个静态类,他里面的方法可以获取到我们的HttpServletResponse, HttpServletRequest, 然后呢就可以还原到我们以前的使用方式了.

直接访问
虽然Struts2提供了ActionContext来访问Servlet API,但是这种方式毕竟不能直接获取Servelt API实例,为了在Action中直接访问Servlet API,Struts2还提供了一系列接口
ServletContextAware 实现此接口后,可以取得ServletContext
ServletRequestAware 实现此接口后,可以取得HttpServletRequest
ServletResponseAware 实现此接口后,可以取得HttpServletResponse
SessionAware 实现此接口后,可以取得HttpSession,注意,这里有点特殊,取得的是一个Map<String,Object> session,拦截器负责将session中存储的键值进行解析,并一一对应.

所以我们通常的做法是:
public class BaseAction implements ServletResponseAware, ServletRequestAware,
SessionAware {

protected HttpServletResponse response;
protected HttpServletRequest request;
protected Map<String, Object> session;

public void setServletResponse(HttpServletResponse response) {
this.response = response;
}

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public void setSession(Map<String, Object> session) {
this.session = session;
}

public HttpServletResponse getResponse() {
return response;
}

public void setResponse(HttpServletResponse response) {
this.response = response;
}

public HttpServletRequest getRequest() {
return request;
}

public void setRequest(HttpServletRequest request) {
this.request = request;
}

public Map<String, Object> getSession() {
return session;
}
}

为了让BaseAction能有验证的功能,并且不能被实例化,开发中我们会这样做:
public abstract class BaseAction extends ActionSupport implements
ServletResponseAware, ServletRequestAware, SessionAware
然后让我们每个模块的Action来继承这个BaseAction类,然后我们就可以在Action中直接使用Servelt的API了.

<script type="text/javascript"></script>


Struts2 动态方法调用(十三) NULL 博文链接:https://takeme.iteye.com/blog/1631525 立即下载

相关推荐

避坑指南:在Linux服务器上用Conda安装antiSMASH 5.2.0(解决Jinja2报错和Matplotlib权限问题)

本文详细介绍了在Linux服务器上使用Conda安装antiSMASH 5.2.0的避坑指南,重点解决了Jinja2报错和Matplotlib权限问题。通过创建专用conda环境、安装指定版本依赖包和配置缓存目录,帮助用户顺利完成antiSMASH的本地部署,适用于批量处理基因组分析任务。

weixin_26911099的博客 314

struts2--动态方法调用的三种方式

一般情况下,我们是通过实现action中execute方法来实现请求处理,这样子一个action中就只能写一个方法,当我需要实现很多方法的时候写多个action显然是很不合理的,因此就需要使用动态调用来实现。方式一:指定method属性 也就是说通过在struts.xml文件中通过配置action标签的method属性来设置即可。 但是这个方法有一个缺陷,当一个action中有很多方法的时候就需

暖心~的博客 1万+

英伟达笔试1

本文摘要: 使用NAND2门设计4位奇偶校验发生器,通过15个NAND2门实现4输入异或功能,分三级结构完成奇校验计算。 时序分析公式总结: 建立时间约束:T_cq + T_comb(max) + T_setup + T_skew ≤ T_clk 保持时间约束:T_cq + T_comb(min) + T_skew ≥ T_hold 提供了两段路径的具体时序检查公式和建立违规修复方法 分析32位粘滞累积寄存器Verilog代码: 功能:记录输入数据中出现过的所有1位 每个bit独立实现,复位清零,有效输入时

soulermax的博客 165

Struts2中动态方法的三种调用方式

动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过,类似下面的配置就可以实现 method="chainAction"> redirect    method="plainText"> /WEB-INF/JspPage/ch

崔向阳@李晓的博客 689

仿人型机械臂逆运动学避坑指南:当末端三关节平行时如何处理奇异点

本文深入探讨了6R仿人型机械臂在末三轴平行结构下的逆运动学求解策略,重点分析了运动学逆解中的奇异点问题及其处理方法。通过MATLAB实现展示了D-H参数建模、几何解析法求解流程以及奇异点规避策略,为工业机器人开发提供了实用的数值算法方案和工程优化技巧。

sss66的博客 882

告别U盘!在Ubuntu 22.04上从零搭建PXE网络装机服务器(支持UEFI/Legacy双启动)

本文详细介绍了在Ubuntu 22.04上搭建PXE网络装机服务器的完整流程,支持UEFI/Legacy双启动模式。通过配置DHCP、TFTP和HTTP服务,实现无需U盘的高效批量系统部署,解决传统安装方式的介质依赖、版本控制和时间成本问题,显著提升机房维护和设备部署效率。

weixin_42569329的博客 248

Struts2中的动态方法调用

Struts2中的动态方法调用 一、动态方法调用介绍 ​ 在Struts2开发中,默认执行的是execute方法,有时候我们会在一个Action中写多个方法,这时候我们需要在请求中调用我们想调用的方法,而不是采用多写Action的方式。 ​ 使用动态方法可以避免Action太多。 二、动态方法调用常见方法 本示例中的Action类代码如下所示: package blog...

songziqi98的博客 269

STM32驱动AD2S1210实现旋变解码与角度读取

旋转变压器作为一种耐高温、抗振动的角度传感器,在工业伺服、机器人关节和电动汽车电驱等场景中占据重要地位。其输出信号需要经过专用转换芯片处理才能被MCU高效使用。AD2S1210是一款典型的旋变数字转换器(RDC),内部采用Type II型跟踪环,将模拟SIN/COS信号实时解算为数字角度与速度,降低了处理器负担并提升抗干扰能力。本文基于STM32平台,详细介绍了AD2S1210的硬件接线、SPI通信配置、寄存器初始化流程,以及读取位置数据时的SAMPLE脉冲时序等关键实现。同时总结了常见故障如全FF、角度跳

weixin_34194829的博客 190

Struts2的动态调用的三种方式

在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多.      第一种方式:通配符方式(官网推荐使用)首先得关闭开关,注:多个方法使用逗号分隔:

老杜的博客 547

数据中心GPU芯片性能参数速查表(Nvidia+国产算力卡)

本文提供了一份数据中心GPU芯片性能参数速查表,涵盖Nvidia与国产算力卡两大阵营。文章详细解读了算力、显存、互连技术及功耗等关键性能指标,并对比了A100、H100、昇腾910B等主流型号,旨在帮助用户根据AI训练、推理等实际场景,做出高效的硬件选型与成本评估决策。

a0b1c2d3的专栏 834

超越图灵机——论人工智能实现的可能性(一)

超越图灵机——论人工智能实现的可能性(一)我认为人工智能是可以实现到逻辑思维这一步的,因为逻辑思维可以完全用字符串来表示,图灵机可以把任意单元置成任意值,在这一点上是完备的,这就足以描述逻辑思维了,所以用图灵机完全可以实现到逻辑思维。当然图灵机会受到哥德尔不完备性的制约,但是逻辑系统也会受到同样的制约,所以我认为完全可以用图灵机实现逻辑思维。那么逻辑思维的本质机理与图灵机是什么关系?逻辑思

太极语言 1万+

struts2动态调用方法总结记录(转的)

                                         struts2动态方法调用    在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。   第一种方式:指定method属性这种方式我们前面已经用到过,类似下面的配置就可以实现&lt;action name="chainAction" c...

尘世生活 146

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

struts2——DMI动态调用失败解决方案

从头再学习struts2,按照视频,学到DMI动态调用的时候,也就是使用!感叹号调用action里面的方法时候,每次都报错。

褚福舜 2257

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

struts动态调用

从头再学习struts2,按照视频,学到DMI动态调用的时候,也就是使用!感叹号调用action里面的方法时候,每次都报错。如图: 我的配置: jdk1.7;struts-2.3里的lib struts.xml [java] view plain copy  print? "font-family:Microsoft 

sjyttkl的专栏 1238

Struts2-动态方法调用-Could not find action or result-Method update for action user is not allowed

动态方法调用时,异常 2016-12-16 09:42:43,166 ERROR [http-nio-8080-exec-6] dispatcher.Dispatcher (Dispatcher.java:599) - Could not find action or result: /web/user!update.action com.opensymphony.xwork2.config.

lzhat的博客 3160

又中了 DMI 动态方法调用的招。

又花了我半天的时间……回忆起来……刚开始学Struts2时也在DMI上中过招。 而这次仔细的检查了每个细节……,没错啊 对比网上的代码……对比书的代码…… 随便一个链接DMI 在struts.xml中 /index.jsp 这样就能行,而改成 DMI 在struts.xml中 /index.jsp ...

zytxy777的专栏 206

Struts2.1.7升级到2.3

以下是我将一个比较老旧的项目从Struts2.1.7升级到2.3的过程。 一、更新jar包 将下列jar包进行更新,原来项目上有的就替换成新版的,没有的就添加上去。 二、更改struts.xml 将2.1.7换成2.3 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2...

ouxiejian的博客 383

Struts2 2.5.2的套路

最近接触了Struts2这个JavaWeb框架,结果被套路了,而且套路的很惨。要学Struts2 就必然要下载Struts2的jar包,在官网上下载了最新的,没错就是这个:这个东西真是把我快搞疯了。然后有了这个东西就开始我的配置Struts2之旅,我没有用MyEclipse,我用的是Eclipse,我根据书上把关键的几个包放在了WEB-INF下的lib文件夹下,然后满还期待的写了一个action和...

龚道松 211

Struts2 2.5问题解决

最近接触了Struts2这个JavaWeb框架,结果被套路了,而且套路的很惨。 要学Struts2 就必然要下载Struts2的jar包,在官网上下载了最新的,没错就是这个: 这个东西真是把我快搞疯了。 然后有了这个东西就开始我的配置Struts2之旅,我没有用MyEclipse,我用的是Eclipse,我根据书上把关键的几个包放在了WEB-INF下的lib文件夹下,

无双孟堂的博客 834

struts2.5 DMI方式调用问题

闲来无事,研究一下ssh的框架整合。 花了半天时间下载好了SSH的jar包(spring4.3.5),(hibernate5.2.1),(struts2.5.8),一路下来,都没问题,但是唯独在struts的动态调用。 配置文件如下: 死都出不来,瓜皮报错如下!! 说是在这个person的命名空间下找不到映射地址,找了两天,一个个翻文档,struts2的官方文档也没找到了(

Feonix 436

Struts2拦截器

1.Struts2拦截器 1.1 基于类范围的连接器的自定义和使用 Struts2连接器的体系结构 Struts2内建连接器 自定义基于类范围的连接器 案例:通过自定义连接器实现日志记录 1.2 任务实现思路 如何自定义和使用拦截器? 编写拦截器组件类,该类可以实现Intereptor接口,或者继承AbstractInterceptor,MethodFilterInteceptor 声明自定义的拦截器组件类 <interceptors> <interceptor name

qq_52269841的博客 164

struts2做了个简单的登录注册,jdbc链接数据库

[size=small][color=red]这个登录注册做了能有3天吧,遇到了几个问题,耽误了些时间。现在把问题记下来,防止以后忘掉。也希望对大家有所帮助吧。代码如下:[/color][/size] [color=brown][size=large]struts.xml[/size][/color] [code="java"] ...

kimi_sunmh的博客 842
上一篇: Hibernate多对一及一对多关联关系理解及区别
下一篇: ActionContext(Action上下文)
Java18
博客等级 码龄16年 27粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值