开发者学堂课程【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。
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:以字符串形式出现