一、result配置:                                    

result - name 就是前面返回的值,success,error等。
type:
dispatcher. 默认是这个,底层是jsp的forward;
redirect:重定向;
chain:比如在aAction里面请求的东西,返回的时候到另一个Action里面继续执行,并且数据可以共享;相当于内部转发到了一个新的Action
redirectAction:重定向到一个Action;例子中从hello action中的数据,重定向到hello2,这里面的数据是带不过去的(name的值带不过去);
freemarker:一种模板技术;
velocity:也是一种模板;
 
 

1.result中的type类型:                        

com.cy.action.HelloAction.java:

package com.cy.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{

    /**
*
*/
private static final long serialVersionUID = 1L; private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String execute() throws Exception {
return SUCCESS;
} //redirect
public String r() throws Exception {
return "r";
} //chain
public String c() throws Exception {
return "c";
} //redirectAction
public String ra() throws Exception {
return "ra";
} }

com.cy.action.HelloAction2.java:

package com.cy.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction2 extends ActionSupport{

    /**
*
*/
private static final long serialVersionUID = 1L; private String name2; public String getName2() {
return name2;
} public void setName2(String name2) {
this.name2 = name2;
} @Override
public String execute() throws Exception {
this.name2 = "你好啊";
return SUCCESS;
} }

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="manage" namespace="/" extends="struts-default">
<action name="hello" class="com.cy.action.HelloAction">
<result name="success" type="dispatcher">success.jsp</result>
<result name="r" type="redirect">success.jsp</result>
<result name="c" type="chain">hello2</result>
<result name="ra" type="redirectAction">hello2</result>
</action> <action name="hello2" class="com.cy.action.HelloAction2">
<result name="success" type="dispatcher">success.jsp</result>
</action>
</package>
</struts>

index.jsp:

<body>
<a href="hello?name=struts2" target="_blank">默认转发_dispatcher</a><br>
<a href="hello!r?name=struts2" target="_blank">重定向_redirect</a><br>
<a href="hello!c?name=struts2" target="_blank">链条_chain</a><br>
<a href="hello!ra?name=struts2" target="_blank">重定向到Action_redirectAction</a><br>
</body>

success.jsp:

<body>
name: ${name}<br>
name2:${name2 }
</body>

测试结果:

1)默认转发-dispatcher:

name的值取到了;url中地址不变;

2)重定向-redirect:

name的值取不到;不是同一个request了,所以数据没法共享;

url地址栏变了;

3)链条-chain:

name的数据能取,内部转发到了一个新的Action,这个数据可以共享;

name2的数据能取,是hello2Action自己设进去的,肯定能取;

url地址:不变;

4)重定向到action - redirectAction:

name的值取不到:从一个action中重定向到另一个action继续执行,这里面数据带不过去,不是一个request;客户端重新请求hello2.action:那么:

name2的值是hello2Action自己设进去的,肯定能取;

url:已经变成了hello2.action;说明客户端重新请求了hello2.action;

2.result全局配置:                                                    

比如result为error,几乎是所有的action都要共用到的;这时我们就可以把它配置为全局的;
 
执行过程:
首先在hello的action配置中找result name为error的;
如果没有找到,就去global-result中找;
如果hello action中已经有了,就不会到其他地方去找了;
 
下面是例子:
HelloAction.java:
package com.cy.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{

    /**
*
*/
private static final long serialVersionUID = 1L; private String name;
private String error; public String getError() {
return error;
} public void setError(String error) {
this.error = error;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String execute() throws Exception {
if(name==null || name.length()==0){
error = "name是空的";
return ERROR;
}
return SUCCESS;
} //redirect
public String r() throws Exception {
return "r";
} //chain
public String c() throws Exception {
return "c";
} //redirectAction
public String ra() throws Exception {
return "ra";
} }

struts.xml配置:

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="manage" namespace="/" extends="struts-default">
<global-results>
<result name="error">error.jsp</result>
</global-results> <action name="hello" class="com.cy.action.HelloAction">
<result name="success" type="dispatcher">success.jsp</result>
<result name="r" type="redirect">success.jsp</result>
<result name="c" type="chain">hello2</result>
<result name="ra" type="redirectAction">hello2</result>
</action> <action name="hello2" class="com.cy.action.HelloAction2">
<result name="success" type="dispatcher">success.jsp</result>
</action>
</package>
</struts>

error.jsp:

<body>
错误信息:${error }
</body>

index.jsp:

<body>
<a href="hello" target="_blank">全局result配置</a><br>
</body>

测试:

-------------

struts2学习(4)struts2核心知识III的更多相关文章

  1. Struts2学习笔记——Struts2与Spring整合

      Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的 ...

  2. Struts2学习一----------Struts2的工作原理及HelloWorld简单实现

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2工作原理 一个请求在Struts2框架中的处理步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2.这个请求 ...

  3. struts2学习(2)struts2核心知识

    一.Struts2 get/set 自动获取/设置数据 根据上一章.中的源码继续. HelloWorldAction.java中private String name,自动获取/设置name: pac ...

  4. struts2学习(3)struts2核心知识II

    一.struts.xml配置: 1.分模块配置方法: 比如某个系统多个模块,我们把资产管理模块和车辆管理模块,分开,在总的struts.xml配置文件中include他们: 工程结构: struts. ...

  5. struts2学习(1)struts2 helloWorld

    一.struts2简介: 二.helloWorld: 1)工程结构: HelloWorldAction.java: package com.cy.action; import com.opensymp ...

  6. Struts2学习笔记——Struts2搭建和第一个小程序

    1.新建web项目 2.配置Struts2核心过滤器 (1)打开web.xml文件,做以下配置: <?xml version="1.0" encoding="UTF ...

  7. Struts2学习笔记--Struts2的体系结构

    1. Struts2体系结构 Struts是以前端控制器框架为主体的框架,用户的请求会通过控制器选择不同的Action类来执行具体的操作,在Action类中所有的Servlet对象(request.r ...

  8. struts2学习(15)struts2防重复提交

    一.重复提交的例子: 模拟一种情况,存在延时啊,系统比较繁忙啊啥的. 模拟延迟5s钟,用户点了一次提交,又点了一次提交,例子中模拟这种情况: 这样会造成重复提交:   com.cy.action.St ...

  9. struts2学习(14)struts2文件上传和下载(4)多个文件上传和下载

    四.多个文件上传: 五.struts2文件下载: 多个文件上传action com.cy.action.FilesUploadAction.java: package com.cy.action; i ...

随机推荐

  1. ftp的本地用户搭建

    前期的准备跟虚拟用户一样,就是配置文件不一样 修改配置文件 就是共享的都是自己的账号的家目录,然后启动服务就可以了 本地登陆的都是自己的账号密码 ftp本地的黑名单,

  2. javax.servlet-api.jar

    servlet.jar 是servlet 3.0 版本之前的地址 javax.servlet-api.jar 是servlet 3.0 版本之后的地址

  3. LeetCode OJ:Implement Stack using Queues(队列实现栈)

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  4. Python中的数据结构 --- 集合(set)

    1.集合(set)里面的元素是不可以重复的    s={1,2,3,3,4,3,4}      ## 输出之后,没有重复的 2.定义一个空集合 s = set([]) print s,type(s)3 ...

  5. ansible资料

    ansible系列教程-强烈推荐看完 ansible官方编写的例子 ansible_ui Jenkins配置ansible galaxy 官方文档 中文教程1 中文教程2 playbook进阶 YAM ...

  6. 开源一款资源分享与下载工具 —— 电驴(eMule)

    这里分享一款资源分享与下载工具--电驴,其实严格来说,应该叫电骡,这是我维护的版本,eMuleVeryCD版本,VeryCD是一个不错的资源分享网站:http://www.verycd.com/.大概 ...

  7. JMter请求参数中文显示乱码

    如上图所示,上传的参数为中文的时候,显示不出来,解决方法如下: 1.进入Jmter安装文件bin文件夹,找到文件jmeter.properties 2.在该文件找到jsyntaxtextarea.fo ...

  8. Python2、3学习及迁移

    一.Python2.7 Python 2.7教程 - 廖雪峰的官方网站 Python 基础教程 | 菜鸟教程 二.Python3 Python教程 - 廖雪峰的官方网站 Python3 教程 | 菜鸟 ...

  9. python常用模块之configparser模块

    python常用模块之configparser 作用:解析配置文件 假设在当前目录下有这样一个conf.ini文件 [DEFAULT] ServerAliveInterval = 45 Compres ...

  10. MPLS基础一(上)

    在上图中,关于PC-A和PC-B之间互相访问的过程中 1.所有三层网络设备形成源和目的的路由条目 2.PC-A发出报文,source-IP为A,destination-IP为B 3.R1收到报文后,根 ...