1.常用四种类型:
a) dispatcher(默认)
服务器跳转(普通转发),就是forward到一个JSP或者HTML或者其他结果页面,不能是Action
视图请求地址是 http://localhost:8080/myweb/r1/r1.jsp
浏览器最后显示的地址是 http://localhost:8080/myweb/r1/r1.jsp
b) redirect
重定向到结果视图
视图请求地址是 http://localhost:8080/myweb/r2/r2.jsp
浏览器最后显示的地址是 http://localhost:8080/myweb/r2.jsp
c) chain
服务器forward(转发)到一个另一个Action
视图请求地址是 http://localhost:8080/myweb/r3/r1.jsp
浏览器最后显示的地址是 http://localhost:8080/myweb/r1/r1.jsp
d) redirectAction
重定向到另外一个Action
视图请求地址是 http://localhost:8080/myweb/r4/r2.jsp
浏览器最后显示的地址是 http://localhost:8080/myweb/r2.jsp
重点是上面两种
<struts> <constant name="struts.devMode" value="true" /> <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="r1"> <result type="dispatcher">/r1.jsp</result> </action> <action name="r2"> <result type="redirect">/r2.jsp</result> </action> <action name="r3"> <result type="chain">r1</result> </action> <action name="r4"> <result type="redirectAction">r2</result> </action> </package>
如果chain是不同的命名空间:
<result type="chain"> <param name="actionName">dashboard</param> <param name="namespace">/secure</param> </result>
2.全局结果集
Global_Results
<struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <global-results> <result name="mainpage">/main.jsp</result> </global-results> <action name="index"> <result>/index.jsp</result> </action> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>/user_success.jsp</result> <result name="error">/user_error.jsp</result> </action> </package> <package name="admin" namespace="/admin" extends="user"> <action name="admin" class="com.bjsxt.struts2.user.action.AdminAction"> <result>/admin.jsp</result> </action> </package> </struts>
Global_Results是在package标签下。
意思就是说这个namespace下所有的action共享,当某一个action找不到对应的result时,就找到了它。
extends
同时这个extends 是表示namespace继承的意思,可以得到它继承namespace的所有配置
默认的都是继承于
extends="struts-default"
它的源码在struts-core-2.1.6.jar包里面
里面配置了很多的拦截器等。
但是在实际开发中,这种继承关系如果多了就会很复杂
所以实际上一般用在
比如说有好几个模块,用户管理,学生管理,老师管理,权限管理等
它们有公用页面
比如返回首页,错误信息返回等,
可以使用到继承
$这种写法
用在可以在配置文件里往值栈里面取值
一个UserAction.java里面的内容都会存放在值栈里面
可以去读value Stack 里的内容
可以在类中用一个属性用来保存一个结果
这个属性的值可以动态确定
在struct里面可以用$符号把结果取出来
3.动态结果
在action中保存一个属性,存储具体的结果位置location
index.jsp:
<body> 动态结果 一定不要忘了为动态结果的保存值设置set get方法 <ol> <li><a href="user/user?type=1">返回success</a></li> <li><a href="user/user?type=2">返回error</a></li> </ol> </body>
struct.xml :
通过$符号取出值栈里面的内容
<struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>${r}</result> </action> </package> </struts>
UserAction.java
为这个属性动态指定location
@Override public String execute() throws Exception { if(type == 1) r="/user_success.jsp"; else if (type == 2) r="/user_error.jsp"; return "success"; }
/user_success.jsp
<?xml version="1.0" encoding="GB18030" ?> <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> <title>UserSuccess</title> </head> <body> User Success! <s:property value="r"/> <s:debug></s:debug> </body> </html>
4.传递参数
struct中间带参数
重定向才需要传递
使用${}
<package name="user" namespace="/user" extends="struts-default"> <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result type="redirect">/user_success.jsp?t=${type}</result> </action> </package>
redirect如何能把数据从一个视图传递到另一个视图?
链接 用action向其他视图传递参数(redirect才需要传递)