一、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. 【LeetCode 228_数组】Summary Ranges

    vector<string> summaryRanges(vector<int>& nums) { int nums_len = nums.size(); vector ...

  2. Mysql数据库的增删改查

    在运行程序之前需要在mysql数据库中创建test数据库,如下图所示: 下面是具体是实现程序: package News; import java.sql.Connection; import jav ...

  3. java事务(二)

    本地事务 事务类型 事务可以分为本地事务和分布式事务两种类型.这两种事务类型是根据访问并更新的数据资源的多少来进行区分的.本地事务是在单个数据源上进行数据的访问和更新,而分布式事务是跨越多个数据源来进 ...

  4. React之事件处理

    在react中,事件处理的写法和处理方式可能会和vue以及传统html有些不同. 一.事件名和默认行为阻止 事件名采用驼峰写法,并且方法名用大括号引入,而不是双引号: <button onCli ...

  5. d3.js入门学习

    个人感觉前端数据可视化是个趋势,并且现在所在公司也是有做这块的项目,虽然我目前还没有接触到公司数据可视化的项目,但是,今后总是要接触的嘛. 今天看了一下公司目前所用的两种数据可视化工具---D3和EC ...

  6. ajax跨域问题解决方案

    今天来记录一下关于ajax跨域的一些问题.以备不时之需. 跨域 同源策略限制 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面 ...

  7. Android版本的"Wannacry"文件加密病毒样本分析(附带锁机)

    一.前言 之前一个Wannacry病毒样本在PC端肆意了很久,就是RSA加密文件,勒索钱财.不给钱就删除.但是现在移动设备如此之多,就有一些不法分子想把这个病毒扩散到移动设备了,这几天一个哥们给了一个 ...

  8. [Python] 项目打包发布

    一.setuptools - 官方文档: Building and Distributing Packages with Setuptools- 中文文档: Python包管理工具setuptools ...

  9. Linux系统中的一些重要的目录

    Linux系统中的一些重要的目录 1)bin目录 :基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, mkdir等.这个目录中的文件都是可执行的,一般的用户都可以使用2)sb ...

  10. c语言符号常量与常变量的区别?

    <blockquote>定义符号常量:#define PI 3.1415926               //注意后面没有分号 定义常变量  :const float PI=3.1415 ...