result结果集

上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集

在Struts.xml中的result元素指的是:指定动作类的动作方法执行完后的结果视图.

(1)局部结果和全局结果

他有两个属性:

  name:字符串,与动作方法返回的值一致。默认是success

  type:指定处理结果的结果类型的别名。默认值是dispatcher

首先处理结果分为两种,一种是局部结果一种是全局结果。

局部结果:

 <action name="login" class="com.study.struts.action2.LoginAction" method="login">
<!--在action内配置的是针对某个Action起作用的局部的配置 -->
<result name="success" >/demo2/result.jsp</result>
</action>

全局结果:

 <!--全局结果视图:包中所有的action都能使用同一个视图 -->
<global-results>
<!-- <result name="success">/index.jsp</result> -->
<!-- a.默认的结果集类型 -->
<result name="error" type="dispatcher">/error.jsp</result>
<!-- b.转发到另外一个Action -->
<!-- <result name="success" type="chain">hello</result> -->
<!-- c.重定向到jsp页面 -->
<!-- <result name="success" type="redirect">/index.jsp</result> -->
<!-- d.重定向到action -->
<!-- <result name="success" type="redirectAction">hello</result> -->
</global-results>

这里同时要思考一个问题,如果你返回的是success,但在全局和局部都配置了,那么会执行哪个呢?

按照规则,先看局部变量是否配置,配置了就执行局部变量的,而且一般成功的结果集不会配置成全局的,只有在错误(error)的时候可能配置全局

(2)结果类型

在struts-default.xml 配置常用结果类型有10种:

当然在我们实际开发中运用的比较多的也就4.5种,这里我就写4种

举例:

        <action name="main">
<result type="dispatcher">/main.jsp</result>
</action> <action name="main2">
<result type="redirect">/main2.jsp</result>
</action> <action name="main3">
<result type="chain">main3</result>
</action> <action name="main4">
<result type="redirectAction">main4</result>
</action>

a)  dispatcher(默认)    forward到一个JSP或者HTML或者其他结果页面,不能是Action

请求转发,底层调用RequestDispatcher的forward() 方法,dispatcher是result的type属性默认值,通常用于转向一个JSP。

b)  redirect                    重定向到结果视图   重定向到一个URL

重定向,新页面无法显示Action中的数据,因为底层调用  response.sendRedirect("")方法,无法共享请求范围内的数据。

c)   chain                      服务器forward(转发)到一个另一个Action

将action的带着原来的状态请求转发到新的action,两个action共享一个ActionContext,actionName指定转向的新的Action的名字,method指定转向哪个方法,

namespace指定新的Action的名称空间,不写表示与原Action在相同的名称空间;

d) redirectAction          重定向到另外一个Action

重定向到另一个Action,参数与chain用法相同,允许将原Action中的属性指定新名称带入新Action中,可以在Result标签中添加 <param name=”b”>${a} </param>,

这表示原Action中的变量a的值被转给b,下一个Action可以在值栈中使用b来操作

(3)重定向和转发的区别?

1 请求转发只能将请求转发给同一个WEB应用中的组件,而重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL。

2 重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。

3 请求响应调用者和被调用者之间共享相同的request对象和response对象,重定向调用者和被调用者属于两个独立访问请求和响应过程。

4 重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码就不会在执行了。

 (4)结果类型中redirect和redirectAction
  首先要知道:
  只要是重定向,那么之前凡是保存在request里面的东西就全都消失了
  因为重定向实际是发送第二个请求,故请求中的东西也就不会出现在第二个请求里面了
  也就是说重定向是不共享request的东西,重定向后的页面中无法接收request里的东西
  区别:

  redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源
  redirectAction也是重定向,但它重定向到的是另外一个Action

 (5)思考,在我们实际开发中是么时候使用重定向什么时候转发?

我个人观点:就是你在request作用域进行相关操作后,需要从数据库返回进行回显的话,比如说你在点击修改的时候就需要把信息回显,这就建议转发,因为用重定向是无法得到回显数据

还有你要跳转到外部网站,比如www.baidu.com,那你就不能用转发,就指定用重定向,这个上面第一点就说了。

本文章就讲到到这里,如果哪里有不足,或者可以修改的更好,欢迎留言指出。

Struts2框架(5)---result结果集的更多相关文章

  1. Struts2框架05 result标签的类型

    1 result标签是干什么的 就是结果,服务器处理完返回给浏览器的结果:是一个输出结果数据的组件 2 什么时候需要指定result标签的类型 把要输出的结果数据按照我们指定的数据类型进行处理 3 常 ...

  2. Struts2框架05 result标签的类型、拦截器

    1 result标签是干什么的 就是结果,服务器处理完返回给浏览器的结果:是一个输出结果数据的组件 2 什么时候需要指定result标签的类型 把要输出的结果数据按照我们指定的数据类型进行处理 3 常 ...

  3. JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  4. JavaWeb_(Struts2框架)struts.xml核心配置、动态方法调用、结果集的处理

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  5. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  6. Struts2框架具体解释

    在Struts2的Model-View-Controller模式实现下面五个核心组件: 动作-Actions 拦截器-Interceptors 值栈/OGNL 结果/结果类型 视图技术 Struts ...

  7. struts2框架学习(二)

    ---恢复内容开始--- 一.搭建步奏 1.新建web项目,进行必备Jar包的拷贝,放到lib目录以便项目的引用. 2.拷贝框架的核心配置文件Struts.xml,放到src目录下,保留一个基本配置即 ...

  8. struts2框架 转载 精华帖

    一.Struts2简介 参考<JavaEE 轻量级框架应用与开发—S2SH> Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Strut ...

  9. 从零打造在线网盘系统之Struts2框架配置全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

随机推荐

  1. 利用Navicat实现MySQL数据库结构对比和同步

    在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create.modify.drop等进 ...

  2. 建立、配置和使用Activity——Activity

    Activity是Android应用中最重要.最常见的应用组件(此处的组件是粗粒度的系统组成部分,并非指界面控件:widget).Android应用的一个重要组成部分就是开发Activity,下 面将 ...

  3. 如何让sql自动定时执行某个存储过程

    /*--创建作业--邹建 2003.10--*//*--调用示例--每月执行的作业exec p_createjob @jobname='mm',@sql='select * from syscolum ...

  4. jQuery html text val方法使用

    jQuery html text val方法使用 <%@ page language="java" import="java.util.*" pageEn ...

  5. React快速入门教程

    简介 Facebook官网介绍:React 是一个用来构建用户界面的 JavaScript 库.相当于 MVC 架构的 V 层. React 的核心思想是:封装组件,各个组件维护自己的状态和UI,当状 ...

  6. 如何做到Zero Downtime重启Go服务?

    graceful的实践 使用endless库来实现,比如接入gin: r := gin.Default() r.GET("/", index) endless.ListenAndS ...

  7. yum安装CDH5.5 Hadoop集群

    1.环境说明 系统环境: 系统环境:centos6.7 Hadoop版本:CDH5.5 JDK运行版本:1.7.0_67 集群各节点组件分配: 2.准备工作 安装 Hadoop 集群前先做好下面的准备 ...

  8. 设计社区Dribbble VS. Bēhance,你选谁?

    Behance和Dribbble都是主流的设计作品分享平台,为广大设计师同胞们带来了莫大的便利,所以很多设计师通常两个社区都会关注.很多设计师在展示个人信息的时候,通常也会把这两个平台的链接放到个人资 ...

  9. node之路由介绍

    路由介绍 ----路由是指向客户端提供它所发出的请求内容的机制:----对基于 Web 的客户端 / 服务器端程序而言,客户端在 URL 中指明它想要的内容,具体来说就是路径和查询字符串 下面我看看一 ...

  10. 如何用CSS进行网页布局---学习总结

    页面布局:对页面的文字.图形或表格进行格式设置.包括字体.字号.颜色纸张大小和方向以及页边距等 页面布局分为4种: 一栏布局 两栏布局 三栏布局 混合布局 灵活利用float.position对页面进 ...