struts2学习笔记-Action的配置及基础应用和原理

利用了一个晚上的业余时间看了一下struts2官方文档中的Action Configuration章节,可对该章节的翻译(呵呵,还谈不上翻译,只是个大概意思)却消耗了我近一个星期的业余时间,由于英文水平太差,翻译起来感觉其累,呵呵,希望通过这样坚持下去也将自己的英文阅读提高一些。当然,看英文文档从中的收获也是不少的!

在这篇笔记中,有几个地方实在是不知道如何将其准确的翻译和表达出来,因此,就直接将原文贴出来了(红色字体部分),如果有哪位高人看到可以帮忙翻译一下,先谢下!

好了,又是一堆废话,希望下边的内容能对大家有用。。。

 

Action 的配置是 Struts2 框架的一个基础工作单元,每一个 Action 的配置都有对应的处理类,当一个请求和 Action 的 name 相匹配时,框架将根据所配置的 Action 映射来决定对请求的处理。

1、          Action 映射配置

在 Action 映射中可以指定 result types 、异常处理器( exception handlers )及拦截器,但是,只有 Action 的 name 属性是必需指定的,其他属性也可以在 package 范围内进行定义,供该 package 下配置的所有 Action 引用。如:

A Logon Action
<action name="Logon" class="tutorial.Logon">
  <result type="redirect-action">Menu</result>
  <result name="input">/tutorial/Logon.jsp</result>
</action>

 

2、          Action 名称及命名

在 web 应用中, action 的 name 属性用于匹配通过浏览器发送的请求地址或链接的一部分。框架将取主机地址、应用名称和扩展名之间的部分和 name 属性进行匹配,如:一个请求 http://www.planetstruts.org/struts2-mailreader/Welcome.do将映射到 name属性为 Welcome的 Action 处理类。

在一个应用里边,通常通过在标签中指定 action 的 name 来链接到相应的 action ,,然后由框架自动追加 action 的扩展名和其它需要的内容。如:

A Hello Form
<s:form action="Hello">
    <s:textfield label="Please enter your name" name="name"/>
    <s:submit/>
</s:form>

 

注意:如果在你的 action 的 name 中包含有斜线(如: <action name="admin/home" class="tutorial.Admin"/> ),你需要在 struts.xml 中进行如下配置: <constant name="struts.enable.SlashesInActionNames" value="true"/> ,但是,启用该配置也会产生一些副作用,具体详情可参考 https://issues.apache.org/struts/browse/WW-1383 上的讨论。

警告:谨慎使用在 action 名称中包含点 (eg:create.user) 、斜线 (create/user) 和横线 (create-user) 的情况,虽然 action 的名称定义非常灵活,但是,当在 action 的 name 中使用点、斜线或横线时,应该谨慎。有时候,当点符号没有明显的副作用时,横线符号将会导致为某一个标签或主题( themes )生成 javascript 时的问题。因此,尽量使用软件工程中规范的或者带下划线的命名,如: createUser 或者 my_action 。

 

严重提示:Struts2以命名空间的方式来管理Action,同一个命名空间不能有同名的Action。

3、          Action 方法

缺省的处理类入口方法是在 Action 接口中进行定义的, Action 接口代码如下:

Action interface

public interface Action {

        public abstract String execute() throws Exception;

 

        public static final String SUCCESS = "success";

        public static final String NONE = "none";

        public static final String ERROR = "error";

        public static final String INPUT = "input";

        public static final String LOGIN = "login";

} 

 

该接口的实现是可选的,如果编写的 action 没有实现该接口,框架将自动从 action 中通过反射去查找 execute 方法。

通常,开发人员习惯在一个 action 中创建多个入口方法,例如,在一个具有数据访问功能的 action 中,开发人员想分别实现添加、查询、更新和删除四个入口方法,入口方法可以通过 action 配置中的 method 属性来进行指定,如:

<action name= "delete" class= "example.CrudAction" method= "delete" >

如果在一个 action 中没有 execute 方法,也没有其它方法在配置文件中进行配置,框架将抛出异常。

4、          通配符方法

大多数情况下,一组 action 映射拥有通用的模式,如:所有的 edit actions 可能都是以 edit 开头,并且在 action 类中的入口方法也被命名为 edit 。 delete actions 也将可能具有相同的模式,且在 action 类中的入口方法名被命名为 delete 。

这里,并非需要为每一个存在这种模式(或共性)的 action 类进行单独的映射配置,而是可直接通过通配符映射只需配置一次即可。代码如下:

<action name= "*Crud" class= "example.Crud" method= "{1}" >

在这里,当在应用中将 action 指定为“ editCrud ”时,将调用 editCrud Action 处理类实例中的 edit 方法。同样,“ deleteCrud ”将调用 deleteCrud Action 处理类实例中的 delete 方法。

另外一种方法是通过 action 的后缀来匹配方法名,并且通过感叹号、下划线或者其它特殊字符将其进行分开。

  • "action=Crud_input"
  • "action=Crud_delete"

下面的代码片断演示了在 action 名称的最后使用星号通配符的示例:

<action name= "Crud_*" class= "example.Crud" method= "{1}" >

从框架的角度看,通配符方式使用与常规的、静态映射同样的属性,创建了一个新的虚拟的映射配置。结果,你能够通过替换通配符来作为校验、类型转换及 message resource 文件,正象他作为 action 的 name 。

  • Crud_input-validation.xml
  • Crud_delete-conversion.xml

If Wildcard Method mapping uses a "Unable to render embedded object: File (" in the action name, the Wildcard Method will overlap with another flexible approach to mapping, Dynamic Method Invocation . To use action names that include the ") not found. " character, set struts.enable.DynamicMethodInvocation to FALSE in the application configuration.

 

5、          动态方法调用

在 WebWork2 中,可以使用感叹号(!)来指定要执行(或调用)非 execute 方法,但是还没有一个真正的术语该种方式的定义。在 s2 的讨论中,我们定义了“动态方法调用”这个术语来描述 webwork/s2 对感叹号的使用。

动态方法调用( DMI )通过在 action 名称和要调用的 Action 方法之间添加一个感叹号进行分割,以表示调用 action 中指定的方法(非 exeucte 方法)。如:“ Category ! create.action ”,表示调用 Category Action 中定义的 create 方法。

在 Struts2 中,让动态方法调用可配置,有两个原因: 1 )如果使用的是 POJO action ,动态方法调用可能会引起安全问题; 2 )动态方法调用和从 Struts 1 中引用过来的通配符方法有重叠;如果你的应用涉及到安全,或者习惯在 action 配置中使用感叹号作为通配符的话,需要在 struts 应用的 struts.properties 配置文件中将 struts.enable.DynamicMethodInvocation 设置为 false 。

The framework does support DMI, just like WebWork 2, but there are problems with way DMI is implemented. Essentially, the code scans the action name for a "!" character, and finding one, tricks the framework into invoking the other method instead of execute. The other method is invoked, but it uses the same configuration as the execute method, including validations. The framework "believes" it is invoking the Category action with the execute method.

The Wildcard Method feature is implemented differently. When a Wildcard Method action is invoked, the framework acts as if the matching action had been hardcoded in the configuration. The framework "believes" it's executing the action Category!create and "knows" it is executing the create method of the corresponding Action class. Accordingly, we can add for a Wildcard Method action mapping its own validations, message resources, and type converters, just like a conventional action mapping. For this reason, the Wildcard Method is preferred.

 

6、          ActionSupport 的缺省使用和配置

当在 Action 的配置中没有指定 class 属性时, Struts2 将默认使用 com.opensymphony.xwork.ActionSupport 类。

<action name="Hello">
   // ...
</action> 

Ø       ActionSupport 类中有 execute 和 input 方法,其中 execute 方法直接返回“ success ”

Ø       可通过在 package 内配置 default-action-ref ,将其 name 属性指定到缺省的 action 处理类,这时,当找不到对应的 action 处理类时,将默认去调用 default-action-ref 标签的 name 属性对应的 action 类。如下面的配置片断:

<package name="Hello" extends="action-default">

<default-action-ref name="UnderConstruction">

<action name="UnderConstruction">
  <result>/UnderConstruction.jsp</result>
</action>
</package>

 

 

每个 package 内可以配置自己的缺省 action ,但是在每个命名空间下只能配置一个缺省的 action ,如果在多个具有相同命名空间的 package 内配置有多个缺省 action 时,框架就没法保证哪个 action 将被作为缺省的 action 。

7、          Wildcard Default

Using wildcards is another approach to default actions. A wildcard action at the end of the configuration can be used to catch unmatched references.

<action name="*" >
  <result>/{1}.jsp</result>
</action>

 

When a new action is needed, just add a stub page.

 

Struts2框架中Action参数获取的三种实现方式 模型-视图-控制器(MVC)是软件开发中的一种架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。模型代表数据和业务逻辑,视图是用户界面,控制器处理输入,将命令传递给模型和视图。MVC模式的主要目的是实现一种分层架构,以降低模块间的耦合度,提高系统的可维护性和可扩展性。Struts2是一个基于MVC模式的Java Web框架,由Apache软件基金会开发。它的设计目标是简化企业级Web应用程序的开发。 阅读详情

相关推荐

Eclipse下Struts2框架的配置与应用

Struts2是Apache软件基金会的一个开源项目,提供了一个强大的Web应用框架。Struts2框架在设计上吸取了Struts1和WebWork的优点,并对它们进行了改进和整合。它的架构设计采用了MVC模式,MVC(Model-View-Controller)模式通过分离数据模型、界面和控制逻辑,使得开发更加模块化,便于维护和扩展。Struts2框架的主要特点包括:插件式架构:Struts2支持插件化开发,使得开发者可以根据需要添加各种插件来扩展框架功能。支持多种视图技术。

weixin_31869917的博客 784

Struts2 Action配置方法大全--转载

来源:[url]http://pengfeng.iteye.com/blog/211597[/url] 非常全面的配置方法,所以转过来。 利用了一个晚上的业余时间看了一下struts2官方文档中的Action Configuration章节,可对该章节的翻译(呵呵,还谈不上翻译,只是个大概意思)却消耗了我近一个星期的业余时间,由于英文水平太差,翻译起来感觉其累,呵呵,希望通过这样坚持下...

zhm0601_0的博客 263

Struts2框架原理及官方示例深度解析

本文还有配套的精品资源,点击获取 简介:Struts2是一个功能强大的Java Web应用程序框架,它遵循MVC架构设计,提供了丰富的特性,包括动作调度、国际化、异常处理和插件扩展。本文将通过官方实例深入分析Struts2的核心概念和配置细节,包括 struts.xml 配置文件、Action类、JSP页面、结果类型和拦截器等组件的实现。掌握这些知识对于开发高...

weixin_28793831的博客 1940

常见的HTTPS攻击方法

0x00 背景 研究常见的https攻击方法 Beast crime breach,并针对https的特性提出一些安全部署https的建议。 针对于HTTPS的攻击,多存在于中间人攻击的环境中,主要是针对于HTTPS所使用的压缩算法和CBC加密模式,进行side-channel-attack。这几类攻击的前置条件都比较苛刻,且都需要受害主机提交很多次请求来收集破译关键数据的足够信息。 ...

weixin_33896726的博客 959

从代码学习深度强化学习 - 目标导向的强化学习-HER算法 PyTorch版

经典的深度强化学习算法,如 PPO、SAC 等,在各自擅长的任务中都取得了非常好的效果。但它们通常都局限在解决单个任务上,换句话说,训练好的算法,在运行时也只能完成一个特定的任务。想象一个场景:我们想让一个机械臂能把桌子上的任何一个物体重置到任意一个指定位置。对于传统强化学习而言,如果目标物体的初始位置和目标位置每次都变化,那么这就是一个全新的任务。即便任务的“格式”——抓取并移动——是一样的,但策略本身可能需要重新训练。这显然效率极低。为了解决这类问题,

weixin_43887510的博客 1498

科研绘图神器Origin中文版安装后还是英文?手把手教你三步搞定界面汉化

本文详细介绍了Origin软件安装后界面仍显示英文的解决方案,包括基础语言切换、注册表修改和序列号破解三种方法。通过逐步指导,帮助用户快速实现界面汉化,提升科研绘图效率。特别针对教育版用户提供了有效的语言锁定解除方案。

weixin_42524708的博客 1125

action的实现和配置

action的实现和配置 action的实现有三种方式 1. 不继承任何类的action 这种方式的好处是,我们写的Action类完全不和 struts2 框架发生耦合,代码不依赖 struts2 的类库。 当然,弊端也比较明显不能使用 struts2 中的某些功能。 2.实现Action接口 Struts2的Action接口中只定义了execute方法和几个预定义的常...

wscnlxx的博客 2115

Hermes-Agent-完整指南

Hermes Agent 是由 **Nous Research** 开发的一款**自我改进型 AI Agent**,具有内置的学习闭环系统。它的核心理念是"一个与你共同成长的 Agent"。- 能够从经验中创建技能(Skill-Learning Automated),在使用过程中自我改进, 跨会话持久记忆, 深度用户建模

liu_zhiyi的博客 3024

Action——Action的配置和作用

  Action——Action的配置和作用   大家在接触Struts2时或许听说过Action这个词,这里您将了解什么是Action,Action都有哪些作用,和一点关于Action的配置。   什么是Action        在Struts2中我们通常说的Action通常有这么3个含义。Action指Action类,比如咱们上个章节说到的HelloWorldAction就算是一...

wang28344的博客 1256

3D深度饼图的QT实现

首先,我们需要创建一个QT项目并创建一个窗口,用于显示我们的饼图。在QT Creator中,选择创建一个新的QT Widgets应用程序项目,并创建一个新的窗口类。在本文中,我将介绍如何使用QT实现一个3D深度饼图(Pie 3D)的可视化效果。在构造函数中,我们将创建一个饼图(QChartView)并设置饼图的数据。这是一个简单的示例,您可以根据需要自定义和扩展代码来创建更复杂的饼图。现在,我们已经完成了3D深度饼图的QT实现。您将看到一个具有相应数据的3D深度饼图显示在窗口中。3D深度饼图的QT实现。

CodeJolt的博客 277

pymol 动画简单制作,gif、mp4导出

参考: https://www.youtube.com/watch?v=G77K9Lro8js1、直接Movie下Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec;如果要动画过渡自然,可以在这4sec后面再Append 1sec;如果需要两个视角,既可以再把窗口蛋白定位到比如配体,不用管中间过程怎么定位过去配体,再Program下,Camera Loop下Nutate下选择,这里选择30degover4 sec添加;最后如果要整体形成个循环播放,可以在这4s

weixin_42357472的博客 8434

Go程序设计语言练习题-第4章(4.10-4.13)

ex4.10 package main import ( "flag" "fmt" "log" "os" "time" "gopl.io/ch4/github" ) var m = flag.Int("m", 0, "positive: query issues created during recently ...

weixin_34244102的博客 312

GEE案例教程:融合Sentinel-1 SAR数据、Sentinel-2光学影像和WorldPop人口数据,构建完整的洪水监测与影响评估工作流

本文介绍了一个专为巴基斯坦哈扎拉分区设计的洪水监测系统,该系统整合了Sentinel-1 SAR数据、Sentinel-2光学影像和WorldPop人口数据等多源遥感数据。系统通过VV极化SAR数据的水体提取算法(阈值-13dB)实现洪水范围监测,结合10米分辨率的光学影像进行可视化验证,并利用100米分辨率人口数据评估受灾人口。系统提供完整的技术实现,包括研究区加载、遥感数据处理、日期选择界面和洪水变化检测等功能模块,为灾害应急响应提供科学依据。

此星光明博客 191

Struts2 Action原理

Struts2 Action原理 一、6大核心组件原理 6大核心组件作用 1、FC 前端控制器,负责统一的分发请求。 2、Action 业务控制器,负责处理某一类业务。 3、ValueStack Action与JSP数据交互的媒介。 4、Interceptor 拦截器,负责扩展Action,处理Action的共通事务。 5、Result 负责输出的组件。 6、Tags

小圣_fighting的博客 2788

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 361

SAP BTP ABAP environment 集成本地系统实践:Cloud Connector、Connectivity service 与隧道通信全解析

摘要: 随着ABAP开发者向云端扩展业务逻辑,如何安全访问企业内网SAP系统成为关键问题。本文基于SAP官方文档,解析通过Cloud Connector和Connectivity service实现云端ABAP环境与本地系统集成的方案。 架构上分为四个角色:ABAP环境、Connectivity服务、Cloud Connector和内网系统。Cloud Connector作为内网出口,通过TLS隧道主动连接云端,避免防火墙开放入站端口。Connectivity服务则作为子账户级“总机”,自动路由请求。 实施

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 307

深入详解Struts2——struts.xml配置之Action配置详解

配置Action action映射是框架中基本的工作单元,action映射就是将一个请求URI映射到一个action类,当一个请求匹配某个action名字时,框架就使用这个映射来确定如何处理请求。struts.xml文件中的每一个action元素就是一个action映射。 例如:<action name="login" class="org.fyw.struts.action.LoginActi

路漫漫,水迢迢 3080

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

浅析Struts1和Struts2的Action线程安全问题

【问题描述】最近公司安排我面试Java的FreshMan,面试者一般是工作1年多点的新人(这里我就装老一下,其实我也才工作3年不到),在被问及Struts1和Struts2的Action的线程安全问题的时候,大多是支支吾吾,答不出所以然。所以在这里我整理一下我个人的理解。   【问题答案】 这是由于Servlet的工作原理产生的。我们先来简单回顾一下Servlet的生命周期“初始化->ini

virgoboy2004的专栏 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

struts.xml中Action的配置详解

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

zzjmay的专栏 7271

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

struts2中,一个Form表单配置多个action实现原理及案例

一、原理说明 以登录注册为例 login.jsp:Form表单中包含登录、注册两个按钮。登录按钮配置LoginAction.java,注册按钮配置RegistAction.java &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt; &lt;%@t...

amateur_RD的博客 8033

Struts2基础

1、Struts2概述 1.1 理解MVC原理 MVC(Model-View-Controller 模型-视图-控制器),是一种程序设计理念。目前,在Java Web应用方面MVC框架有很多,常用的流行框架有Struts、JSF、Tapestry、Spring MVC等,在这些框架之中,Struts和Spring MVC框架的应用最为广泛。 到目前为止,Struts框架拥有两个主要的版本,分...

pan_junbiao的博客 1151

Struts2学习笔记

struts2 域对象 Servlet 中常使用到的 request、session、application 对象,在 struts2 中被重新封装过,变成 Map 类型的。但是在 jsp 页面中的 el 表达式仍旧是访问原始的 request、session、application 对象。 当然在 struts2 中的 Action 组件中也还是可以获取到原始的 request、session、application 对象的。 Action 组件如何使用 request/session/applicati

liaowenxiong的博客 1487

struts2中package基于namespace对action管理的详解及原理

创建struts2的应用,首先应如前面所示要搭建好环境。jar包的导入和web.xml配置这里不在写出来。现在就来看第一个应用的struts.xml这个配置文件:                                                             /WEB-INF/page/index.jsp

LiSped的专栏 628

Struts2中的Action对象

Action对象 Action介绍 Action充当MVC模式的控制器,响应用户操作,执行业务逻辑(或者调用其他类来执行),然后返回一个结果,告诉struts所要呈现的页面。         Struts2 Action类通常扩展ActionSupport类,它由Struts2框架提供。类ActionSupport为常...

qq_40514172的博客 560

Struts2的原理及应用

原理:      Struts2框架本身大致可以分为三个部分:核心控制器FilterDispatcher、业务控制器Action、用户自定义的企业业务逻辑组件。      (1)核心控制器FilterDispatcher            FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件需要用户自己定义,用户

u013255736的专栏 557

struts2 jsp跳转action 404_Struts2 学习笔记(一)

1. Struts的概述1.1 什么是Struts2Struts2是一个基于MVC设计模式的Web应用框架,它的本质就相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是在Struts和WebWork的技术的基础上进行合并的全新的框架。Struts2以WebWork为核心,采用拦截器的机制来处理的请求。这样的设计...

weixin_39964978的博客 294
上一篇: Struts2学习笔记-OGNL
下一篇: struts2学习笔记-action的method属性
javaRwx
博客等级 码龄20年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值