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标签下。

Result-LMLPHP

意思就是说这个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才需要传递)
05-07 15:30