Action 和 result 配置详解 | 学习笔记

简介: 快速学习 Action 和 result 配置详解,介绍了 Action 和 result 配置详解系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门Action 和 result 配置详解】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7295


Action 和 result 配置详解

 

内容详细:

一、action 的配置

二、result 的配置

 

一、 action 的配置

1、 一个 package 中可以配置多个 action

例子:

<packagename="user"namespace="/user" extends="struts-default">

<actionname="login" class="cn.sxt.action.LoginAction">

<result>/success.jsp</result>

<result name="failed">/login.jsp</result></action>

<action name="add" class="cn.sxt.action.Adaaction">

<result>/index.jsp</result>

</action>

</package>

添加 addaction 进入操作:

Package cn.sxt.action;

Public class AddAction {

Public String execute(){

System.out.println(“add”);

Return “success”;

}

}

登录请求,发生跳转:

信息:Starting ProtocolHandler [“ajp-apr-8099”]

2015-8-11 11:31:03 org.apache.catalina.startup.Catalina start

信息:Server startup in 4508 ms

Siggy---1111

add

表示一个 package 中可以配置多个 action

2、 action 的详细介绍

(1) 规则解释

name 是 url 请求名,不需要加后缀(.action)

class 是处理 url 请求对应的 java 类,class 要求包名+类名,并且该类是由公共的无参构造方法的。

method 配置处理请求类的处理的方法,默认为 execute;方法要满足是公共的,返回值类型是 String,

无参

method 和 name 无关

示例:

<action name="login" class="cn.sxt.action.loginAction">

<result>/success.jsp</result>

<result name="failed">/login.jsp</result>  </action>

<action name= "logout" class="cn.sxt.action. loginaction" method="Logout">

<result>/index.jsp</result>

<result name="failed">/login.jsp</result>  </action>

其中 logout 对应配置处理请求的方法,处理类为"cn.sxt.action. loginaction“

以上说明,需要在 loginaction 中加上 logout

}

public string logout(){

System.out.println(“退出”);

return”success”;

(2)总结

在一个 action 中,可以存在多个处理类,同时处理多个不同的请求。

 

二、 result 的配置

1、 规则解释

result-指结果集是匹配 action 结果后的跳转。在流程图中,action 执行完后跳转到 result。

image.png

name:匹配请求处理方法的返回值,默认是 success

type:结果处理类型请求或转发,默认是 dispather 转发

type有哪些:在配置中已经配置完成

主要包括以下几种:

Chain ,dispathcher,freemarker,httpheader,redirect,

redirectAction,stream,velocity,xslt,plainText

<result-type name=”chain”class=”com.opensymphony.xwork2.ActionChainResult”/>

<result-type name=”dispatcher”class=”org.apache.strut2.dispatcher.ServletDispatcherResult”defaResult”/>

<result-type name=”freemarker”class=”org.apache.struts2.views.freemarker.FreemarkerResult”/>

<result-type name=”httpheader”class=”org.apache.struts2.dispatcher.HttpHeaderResult”/>

<result-type name=”redirect”class=”org.apache.struts2.dispatcher.ServletRedirectResult”/>

<result-type name=”redirectAction”class=”org.apache.struts2.dispatcher.ServletActionRedirectResult”/>

<result-type name=”stream”class=”org.apache.struts2.dispatcher.StreamResult”/>

<result-type name=”velocity”class=”org.apache.struts2.dispatcher.VelocityResult”/>

<result-type name=”xslt”class=”org.apache.struts2.views.xslt.XSLTResult”/>

<result-type name=”plainText”class=”org.apache.struts2.dispatcher.PlainTextResult”/>

2、 type中的重点解释

(1)chain:指 action 链,链接下一个 action;执行 actionA 以后直接执行 ActionB 后直接执行 ActionC,用得较少

如:

<action name=”login”class=”cn.sxt.action.LoginAction”> 里有一个 login ,login 进入以后可以指定为 chain,其中 chain 指的是链,链接 logout。

<result type=”chain”>logout</result>

执行后显示:This is my JSP page.传输 siggy---1111   退出 信息。地址栏不变,地址栏是执行的第一个 action

2*dispatcher:转发如果有数据要携带到前面渲染时,只能用转发;特点和 servlet 一致。如果 request 中有数据要到视图显示,那么使用 dispatcher

3*redirect:重定向如果有数据,不会携带

<result type=”redirect”>logout</result>,执行后显示:This is my JSP page.传输 siggy---1111  退出 信息,表示能够重定向。

注意:extension 可以是以下三个形式:

<struts>

<!--配置 structs 属性-->

<!--乱码解决-->

<constant name=”struts.i18n.encoding”value=”UTF-8”/>

<!--设置开发模式

<sonstant name=”struts.devMode”value=”true”/>

-->

<constant name=”struts.configuration.xml.reload”value=”true”/>

<include file=”config/sxt/struts/user.xml”/>

</struts>

假如 struts.action.extension=action,siggy 没有空格,提交后显示错误。因此要注意加上后缀。

如果是重定向到 jsp 页面,可以直接重定向,如果重定向到另一个 action,需注意是否配置了 action 的后缀名。如果要求有后缀名,那么重定向的 action 一定要加上后缀名是否有后缀名,要关注 web 配置。

例子:<url-pattern>*.action</url-pattern> 配置 *.action 无后缀名无法进入

<url-pattern>/*</url-pattern>  /*形式即可进入

(4)*redirectAction:重定向到另一个 action;不用加action 的后缀名,会将前一个 action 的后缀名自动加上(注意:跳转到一个 action 里用 redirectaction 而不是用redirect)

例子:

<result type=”redirectAction”>logout.action</result> 加上了redirectAction的后缀名,运行时无法找到页面。

去掉后缀:action

<result type=”redirectAction”>logout</result> 运行时会自动加上 siggy 后缀。

<body>

<form action =”user/login.siggy”method=”post>

用户名:<input type=”text”name=”name”/><br>

密码:<inout type=”password”name=”pwd”/><br>

<input type=”submit”value=”登录”/>

</form>

</body>

</html>

中,将 siggy 改为action,后缀名也将自动改为action。

5*stream:以流的形式显示---文件下载

(6)velocity:以字符串形式出现

相关文章
|
关系型数据库 MySQL 索引
【mysql】 limit 关键字
【mysql】 limit 关键字
453 0
|
传感器 XML 消息中间件
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
|
10月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
294 15
|
机器学习/深度学习 算法 数据可视化
【python kaggle机器学习】泰坦尼克号 - 灾难中的机器学习详解
【python kaggle机器学习】泰坦尼克号 - 灾难中的机器学习详解
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
3953 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
11月前
|
存储 关系型数据库 MySQL
MySQL MVCC深度解析:掌握并发控制的艺术
【10月更文挑战第23天】 在数据库领域,MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种重要的并发控制机制,它允许多个事务并发执行而不产生冲突。MySQL作为广泛使用的数据库系统,其InnoDB存储引擎就采用了MVCC来处理事务。本文将深入探讨MySQL中的MVCC机制,帮助你在面试中自信应对相关问题。
388 3
|
11月前
|
数据采集 监控 数据可视化
Kettle的特点是什么?如何使用?
【10月更文挑战第24天】Kettle的特点是什么?如何使用?
491 2
|
存储 Kubernetes 持续交付
深入浅出 Kubernetes:掌握容器编排的艺术
Kubernetes作为容器编排领域的领头羊,提供了运行分布式系统的强大框架,支持自动化部署、扩展和管理容器化应用。本文深入浅出地介绍了Kubernetes的核心概念与关键组件,包括服务发现、存储编排及自动部署等特性。通过Minikube、kubeadm及云服务商等多种方式部署集群,并使用`kubectl`、YAML配置文件和Helm进行资源管理。掌握Kubernetes将成为软件开发者的宝贵技能。
|
人工智能 算法 自动驾驶
智能时代的伦理困境:AI技术的道德边界
【7月更文挑战第26天】在AI技术的飞速发展中,我们不仅见证了科技的奇迹,也面临着前所未有的伦理问题。本文探讨了人工智能带来的道德挑战,包括隐私侵犯、自动化失业、算法偏见以及决策责任归属等问题。通过分析这些伦理困境,文章旨在引发对AI技术应用中道德边界的深入思考和讨论。
|
消息中间件 监控 应用服务中间件
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的
在使用消息队列MQ时,可能会遇到各种报错情况。以下是一些常见的错误场景、可能的原因以及解决建议的汇总:1.连接错误、2.消息发送失败、3.消息消费报错、4.消息重试与死信处理、5.资源与权限问题、6.配置错误、7.系统资源限制、8.版本兼容性问题。
350 1
消息队列 MQ操作报错合集之重启Broker后,积压数出现为负数是什么导致的