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:以字符串形式出现

相关文章
|
6月前
default过滤器
default过滤器。
29 1
|
5月前
|
Java 数据库
SpringBoot整合es7.x启动报错:Rejecting mapping update to [AAA] as the final mapping would have more than 1
SpringBoot整合es7.x启动报错:Rejecting mapping update to [AAA] as the final mapping would have more than 1
|
6月前
|
Java Linux 数据库
改default client等小技巧
改default client等小技巧
47 0
|
6月前
|
Java Spring
解决SpringBoot中@RequestBody不能和Multipart同时传递的问题
请根据你的实际需求选择上述方法之一来解决Spring Boot中 `@RequestBody`不能和 `Multipart`同时使用的问题。
926 1
|
6月前
default_if_none过滤器
default_if_none过滤器。
48 1
|
人工智能 Java 应用服务中间件
SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request
SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request
278 0
|
前端开发
springboot05、封装返回结果集{state:““msg:““result:null}
springboot05、封装返回结果集{state:““msg:““result:null}
151 0
springboot05、封装返回结果集{state:““msg:““result:null}
Caused by: 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,globa
在Struts-2.3的配置文件struts.xml中,Caused by: 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)"。
1308 0
|
Web App开发 Java 应用服务中间件