一、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. C#学习历程(六)[ref 关键字的使用]

    ref 关键字的使用 ref 关键字通过引用(而非值)传递参数. 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中. 例如,如果调用方传递本地变量表达式或数组元素访问表达式, ...

  2. yum的搭建

    搭建本地yum仓库的步骤 . 创建光盘目录,挂载光盘 . 进入/etc/yum/repos.d目录下,备份所有配置文件 . 利用一个含有大写M的配置文件作为配置文件的模板 . 在模板里将enabled ...

  3. Python模块化

    在Python中,一个.py文件就称之为一个模块(Module). 模块化的好处: 1.大大提高了代码的可维护性. 2.编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的 ...

  4. js 预处理 与 执行 的顺序

    链接 浏览器渲染 js先编译, 后执行, 而且先在第一块代码段编译执行, 再到第二个代码段, 代码段之间是可以共享变量的 DOMContentLoaded

  5. apache+php 字符编码问题解决

    如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312.对于新手而且是只用GB2312编码的开发人来说, ...

  6. jq的.off解绑事件

    .off( events [, selector ] [, handler ] ) 描述:移除一个事件处理函数 events 类型: String 一个或多个空格分隔的事件类型和可选的命名空间,或仅仅 ...

  7. JMter参数化

    参数化是干嘛的呢,咱们在调用接口的时候,有入参,那参数里面的值如果经常变化的话,就得每次去改了,很麻烦,这时候咱们就把需要经常变的值,改成可以变化的或者是咱们提前设置好的一些值,这样的话,调用的时候就 ...

  8. 用户空间与内核驱动的交互过程 — ioctl

    在Linux内核模块的开发过程中,经常涉及到运行在用户空间上的应用程序与内核模块进行交互,ioctl系统调用是常用的一种方式.本文并不涉及vlan的具体原理,仅通过vconfig与vlan内核模块进行 ...

  9. Cannot setup mail box on Android

    Error: “You don’t have permission to sync with this server”  Solution: “You have 10 phone partnershi ...

  10. [译]HIPAA要求的SSL/TLS等级

    原文链接:https://luxsci.com/blog/level-ssl-tls-required-hipaa.html 原文发表时间:2015.1.13 本博文仅仅是上述原文的翻译,仅供研究参考 ...