zoukankan      html  css  js  c++  java
  • 在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,那你就不能用转发,就指定用重定向,这个上面第一点就说了。
    
    本文章就讲到到这里,如果哪里有不足,或者可以修改的更好,欢迎留言指出。
    
     
    

      

    我今天终于有了自己的qian,欢迎lady gentlemen为我的捧场! 虽然我不认识的所有GGMM,不过我相信我的空间一定是独一无二的! 我喜欢交朋友,如果你想和我多聊一些,给我留言,发小纸条或者直接加我好友吧! 另外,如果你在其他博客上有日记或者照片,可以用(http://n.qzone.qq.com/move/move_login.htm)把它们分享生活新体验!:)
  • 相关阅读:
    新创建django项目,但网页打不开127.0.0.1:8000
    列表计算整数出现次数,并以次数大小重新排序
    Appium+python自动化
    笔试考试系统--学生管理加载和添加
    笔试考试系统--MVC实现登录
    笔试考试系统--配置EF;运行单元测试
    笔试考试系统--项目搭建及用Log4Net记录日志
    笔试考试系统--第一天需求分析及数据库设计
    笔试考试系统--引言
    不用加减乘除做加法,求2个数的平均数
  • 原文地址:https://www.cnblogs.com/paper-file/p/6698178.html
Copyright © 2011-2022 走看看