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

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种

举例:

复制代码
 1        <action name="main">
 2             <result type="dispatcher">/main.jsp</result>
 3         </action>
 4
 5         <action name="main2">
 6             <result type="redirect">/main2.jsp</result>
 7         </action>
 8
 9         <action name="main3">
10             <result type="chain">main3</result>
11         </action>
12
13         <action name="main4">
14             <result type="redirectAction">main4</result>
15         </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,那你就不能用转发,就指定用重定向,这个上面第一点就说了。

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

  

时间: 2024-08-05 11:30:44

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

struts2在struts.xml中为返回的页面配参数时出现Invalid result location value/parameter

在学ognl表达式时,在struts.xml中为返回的页面配参数时,出现Invalid result location value/parameter,但参数可以传过去,原因是:MyEclipse肯定在普通验证xml方法之外加了Struts的特殊检验规则,解决办法: 去掉build较检,保留手动较检,这样当实在是需要MyEclipse提供的Struts2较检的时候手动较检一下.

struts.xml中可以使用el表达式和ognl表达式

转自:http://blog.csdn.net/hzc543806053/article/details/7538723 文件上传链接: 1)Servlet 文件上传 ----  点击打开链接 2)Struts2 文件上传 ---- 点击打开链接 文件下载是一个很常见的功能,用struts2实现文件下载的步骤: 一)定义一个Action类,FileDownload.java [java] view plaincopy package com.struts2.filedownload; impor

struts.xml中出现extends undefined package struts-default解决的方法

在struts.xml中出现extends undefined package struts-default,经过查阅资料原来是由于没有联网的缘故. 这样解决:在myeclipse中关联本地的dtd文件 写在myeclipse中->windows->preferences->搜索框输入xml->XML Catalog ->User Specified Entries里面自己配置个dtd的本地url校验

struts.xml中出现extends undefined package struts-default解决办法

在struts.xml中出现extends undefined package struts-default,经过查阅资料原来是因为没有联网的缘故.这样解决:在myeclipse中关联本地的dtd文件 写在myeclipse中->windows->preferences->搜索框输入xml->XML Catalog ->User Specified Entries里面自己配置个dtd的本地url校验

jquery为指定的元素添加或者删除指定样式类

jquery为指定的元素添加或者删除指定样式类:在实际应用中,可能需要为指定的元素动态的添加或者删除指定css样式类,下面就通过简短的代码做一下介绍.一.添加css样式类: $("#antzone").addClass("class"); 上面的代码为指定的元素添加指定的样式类.更多相关内容可以参阅jQuery的addClass()方法一章节.二.删除css样式类: $("#antzone").removeClass("class&qu

struts2 开发中,一些功能需要在struts.xml中的配置

1.普通package <!-- package元素: * name:为当前包起名 作用,用于继承 * namespace:命名空间,相当于一个房间号:我们需要对号入座 * extends:当使用action的时候,必须继承struts-default,如果不继承,struts2定义的所有方法将失效--> <package name="primer" namespace="/primer" extends="struts-default&

idea+maven+Struts2 之struts.xml中标签介绍

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!--修改st

struts.xml中的结果类型与视图

实际上在Struts2框架中,一个完整的结果视图配置文件应该是: ? 1 2 3 4 5 <action name="Action名称" class="Action类路径" method="方法名">     <result name="逻辑视图名称" type="结果类型">         <param name="参数名称">参数值</pa

解决 IDEA 下 struts.xml 中 extends=&quot;struts-default&quot; 报红的问题

现象 在IDEA中配置struts.xml时 extends="struts-default" 报红,配置拦截器时属性无预选项提示,也爆红. struts.xml本身的配置并没有错误. 解决办法 Ctrl+Shift+Alt+S调出Project Structure 原因 创建项目时,我们选择的是之后导入struts的jar包,IDEA找不到jar包中的struts-default.xml文件. 我们导入struts的jar包后,IDEA不会扫描其中有没有struts-default.