struts2学习笔记之八(result)

strust2的开发步骤

  • 编写一个发送请求的页面,表单或超链接
  • 编写一个action类

    1. 推荐实现action接口或继承actionsupport

    2. 为所有请求参数,包括需要传到下一个页面显示的数据提供filed

    并提供相应的setter和getter

    3. 要有无参的构造器

    4. 处理请求的方法,该方法不能有形参声明

    5. 处理请求的返回值是String

  • 在struts.xml文件配置action

struts.xml配制方法

  1. 常量配置
  2. 包配置和命名空间配置

    这种设计是为了企业应用的模块化开发,把多个配置文件以include的方式包含进来

  3. 处理结果的控制
                  --------------------
                    |
                    -------根据逻辑视图跳转物理视图2
                    |
                    |
                    -------根据逻辑视图跳转物理视图1
                    ^
                    |  逻辑视图<--------------------
                    |                             |
                    |                             |
 发送请求----->struts分发器---->创建action实例,调用execute
  • action只是负责struts2控制器的部分,所以它不能直接生成浏览者的响应
  • action只会负责处理请求,负责生成响应的视图组件,通常是JSP页面,而action会为JSP页面提供显示的数据
  • 当action处理用户请求后,控制器根据<result.../>元素决定具体使用哪个资源生成响应
  • 配置逻辑视图和物理视图之间的映射关系是通过result子元素来定义的。每个result定义逻辑视图和物理视图之间的一次映射

result使用方法

  • <result .../>支持的属性

    • name:逻辑视图名。name属性的默认是success
    • type:指定物理视图资源的类型。默认值是dispatch,

      与dispatch对应的是redirect—-重定向

  • 目前的视图资源类型可能有(不一定是JSP)
    • Velocity
    • FreeMarker
    • JFreeChart
    • 报表(JasperReports)
    • XSLT
  • result的标准格式
                <result name="" type>
                    <param></param>
                    <param></param>
                    ....
                </result>       

如果有如下的配置

        <result name="逻辑视图" type="视图配型">
            <param name="location">物理视图位置<param>
            <param name="parse">true<param>----是否解析OGNL表达式的值
        </result>

就可以简化为

    <result name="逻辑视图" type="视图配型">物理视图位置</result>
  • 属性

    • name:指定逻辑视图名。

      默认是success(题外话:不会偷懒的人不是好的程序员,一个人勤劳并不定是优秀的,重要的是勤奋的由价值,偷懒有时候也是勤奋)

    • type:指定所使用的物理视图类型

      在struts-default.xml中的struts-default抽象包中:

        <result-types>
            <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>

            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>

            <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>

            <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>

            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>

            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>

            <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>

            <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>

            <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>

            <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult"/>

            <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult"/>

        </result-types>

从以上可知,type的默认值是dispatch。

  • 重要的类型

    • chain :Action处理完请求之后,转发到下一个Action继续处理,形成一个链式处理
    • dispatch
    • redirect

      /********

      forward : 依然使用一次请求,地址栏url没有变化,请求参数和请求属性都不会丢失

      redirect:重新发送一次新的请求,就像在地址栏中重新输入一个url并回车的效果一样,地址栏的url变化,请求参数和请求属性都会丢失

      dispatch和redirect的区别也是上面的区别

      *********/

    • redirectAction:重定向到action
    • stream:做文件下载
    • plainText:显示页面源码
  • 常用type示例

1、chain

假设在regist的action里注册成功之后跳转到一个浏览所有用户的action

                            <action name="regist" class="registAction">
                                <result type="chain">userList</result>
                            </action>
                            <action name="userList" class="userListAction">
                                <result ...> .... </result>
                            </action>

2、redirect

直接“重定向”到新的URL,生成一次新的请求,原有的请求参数请求属性都会丢失。

与默认的dispatch(“转发”)相应

3、 dispatch

4、plainText

直接显示视图页面的源代码

                            <action name="login" class="loginAction">
                                <!--当处理方法返回success,系统跳转到welcome.jsp-->
                                <result type="plainText">
                                    <param name="locaiont">/WEB-INF/content/welcome.jsp</param>
                                    <!-- 指定物理视图资源的编码字符集-->
                                    <param name="charSet">utf-8</param>
                                </result>
                            </action>

一般没有太大的用处,主要用于显示源代码,教学类型的,为了让学生看到源代码学习

5、stream —直接生成“二进制”文件流

  • result的两种形式

1、局部

<result .../>作为<action>的子元素,只对action有效

2、全局

<result .../>用于全局

        <global-results>
                <result type="">
                </result>
        </global-results>

1、当全局result配置与局部result配置冲突时,局部result会覆盖全局result

尽量少用全局result,只有在多个action都具有某个通用性质的result,才考虑全局result

2、不同的result类型,可使用的参数不同

/*********

struts的配置文件,包括:

struts-default.xml: 核心包使用该配置文件

struts-plugin.xml: 插件包使用该配置文件

struts.xml : struts2应用使用该配置文件

struts-abc.xml : 其他的配置文件,必须被include加载

**********/

如dispatch的参数有location和parse

需要使用的时候,查阅文档,

  • 动态结果

使用{1},{2}….

例:

        通用的action
        <action name="*">
            <result>
                /WEB-INF/content/{1}.jsp
            </result>
        </action>
        {1}匹配*所匹配的第一个匹配值
        <action name="*Action">
            <result>
                /WEB-INF/content/{1}_{2}.jsp
            </result>
        </action>

Action属性值决定视图资源

不仅可以使用{1}…,还可以使用${属性}

            <action name="myPro" class="">
                <!--在定义物理视图资源时,可以直接使用OGNL表达式,所以这个物理视图可以动态的改变。通过OGNL来计算${res}表达式的值
                -->
                <result>
                    /WEB-INF/content/{res}.jsp
                </result>
  • 动态方法调用(DMI Dynamic Method Invocation)

    用法不是特别大,大致了解

    功能:可以在提交请求的时候,直接提交给action的指定方法。

    • 未使用DMI:

      <form action="myPro" method="post"></form>

    上述代码只能看出提交给哪个action,而无法看到提交给哪个方法,

    具体调用的需要查看struts.xml

    • 使用DMI:

      可以直接在action后增加”!method”的形式,来DMI

      <form action="myPro!login" method="post"></form>

      所谓的DMI其实就是在页面上指定请求地址为:actionName!methodName

    缺点:

    1、安全性不高

    2、没有必要,完全可以在action元素中指定method来代替动态方法调用

第一次用markdown的语法写,总体感觉还是可以,就是有序列表不是很好,或许是自己没用好,以后多多体会

时间: 2024-10-08 10:29:08

struts2学习笔记之八(result)的相关文章

struts2学习笔记之七:Result类型

一:关于Struts2的type类型,也就是Result类型,他们都实现了共同的接口Result,都实现了execute方法 他们体现了策略模式,具体Result类型参见:struts-default.xml文件: <result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name=&

struts2学习笔记之八:Action中方法的动态调用

方法一:action名称+!+方法名称+后缀 Action类中增加addUser()和delUser()方法, package com.djoker.struts2; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; public class UserAction { private String username; private String password; pri

Struts2学习笔记(四)——result结果类型

当Action类的方法处理请求后,会返回一个字符串(逻辑视图名),框架根据这个结果码选择对应的result,向用户输出,所以需要在struts.xml提供<result>元素定义结果页面,这个结果页面可以是局部结果页面或者全局结果页面. 1. 局部结果页面和全局结果页面 1)局部结果页面 1 <action name="result" class="cn.sunny.action.ResultAction"> 2 <!-- 局部结果当前

struts2学习笔记(5)----------配置result

Action只负责处理请求,负责生成响应的视图组件,一般是JSP页面,而Action为JSP页面提供显示的数据.Action处理请求结束后,控制器根据<result>元素配置的逻辑视图跟物理视图之间的关系来响应. 浏览器,控制器和视图资源的顺序图如下: 如图所示,Action处理完一个请求后,并未直接把请求转发给任何具体的视图资源,而是返回给一个逻辑视图,struts2框架收到这个逻辑视图后,把请求转发到对应的物理视图资源,试图资源将结果呈现给用户. 1)result基本配置 struts2提

struts2学习笔记(二)—— 获取登录信息及计算在线人数

实现目的: 1.点击"Login"的超链接,进入登录页面 2.填写登录信息,提交表单,将用户信息保存进Session 3.显示用户名,并计算在线人数 4.点击"Logout"的超链接,在线人数减一,并使Session失效 Struts2实现: 1.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:/

struts2学习笔记(8)-------struts2的ajax支持

struts2支持一种stream类型的Result,这种类型的Result可以直接向客户端浏览器响应二进制,文本等, 我们可以再action里面生成文本响应,然后在客户端页面动态加载该响应即可. 直接看例子: public class LoginAction { private String user; private String pass; private InputStream inputStream; public InputStream getInput(){ return inpu

Struts2 学习笔记(概述)

Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并实现应用的功能.通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息.用户信息等:而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等. 封装应用状态:某些应用数据封装起来,使得视图只能通过接口获取对应的数据 响应状态查询:对应用的状态改变进行处理 暴露应用功能:暴露接口 通

struts2学习笔记(7)------------ognl表达式

OGNL表达式(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一种可以方便地操作对象属性的开源表达式语言. Struts2自行维护一个特定范围的"银行",Action将数据放入其中,而JSP页面可从中取数据,表面上似乎看起来像是jsp可以直接访问Action数据.. 当Action属性不再是简单的值,而是某个对象,数组,集合时,就需要使用ognl表达式来访问这些对象,数组,集合内的数据了. 1)ognl的stack Conte

Struts2学习笔记1

一.下载struts2.0.1 http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包括了开发struts2所需的struts2-core.jar核心包以及其他struts2所依赖的JAR文件,另外另一些struts2的演示样例程序以及一些HTML的API文档. 二.试用struts2.0.1 1. 新建一个WEBproject,将struts-2.0.1-all.zip压缩包中的lib文件夹下的全部jar文件