`
rainlife
  • 浏览: 229996 次
  • 性别: Icon_minigender_1
  • 来自: 我也来自火星?
社区版块
存档分类
最新评论

Openlaszlo调用JavaRPC和JAVA类通信

    博客分类:
  • JAVA
阅读更多
JavaRPC允许Laszlo客户端远程调用服务端的JAVA类和方法。在laszlo中使用<javarpc>标签来声明一个JavaRPC对象:
<javarpc classname="..."
     attributename="..."
     scope="[session|webapp|none]"
     loadoption="[loadcreate|loadonly|create]"
     createargs="..."
     objectreturntype="[pojo|javabean]"
     autoload="[true|false]"
     secure="[true|false]"
     secureport="...">

classname(String):    必需。指定需要访问的JAVA类名
attributename(String):使用服务端对象时的关键词。当scope为session或webapp时使用。
Scope(String):        必需。在session,webapp和none三个中选一个。
Loadoption(String):   loadcreate,loadonly和create三个中任选一个。Loadcreate:如果服务器上存在该对象时加载,如果不存在,则在加载前自动创建该对象。Loadonly:只负责加载对象,如果该对象不存在,则返回一个错误。Create:在加载对象时总是在服务器端创建该对象。默认为loadcreate。
Createargs(Array):    只有当loadoption为loadcreate或create时才有效。Createargs
数组包含一些变量,这些变量用来在服务端创建对象时使用。默认为null。
Objectreturntype(String):  pojo和javabean中任选一个。如果从服务端返回一个对象,使用pojo只返回该对象中所有声明为public的成员变量。使用javabean将返回含有getXXX()方法的成员变量。
Autoload(Boolean):    true或false。True:在初始化时自动加载指定的对象。False:需要在使用对象前调用load()方法。默认为true。
Secure(Boolean):   true或false。如果选择true的话,会在服务端和客户端之间建立一个安全的连接。
Secureport(Number):: 只有才secure为true时才有效。
如:
<javarpc name=”returnsun” scope=”none” class=”RetuenSum”>通过returnsun来建立javarpc和java之间的桥梁。其中name就是指定一个rpc的属性(attributename)。再通过remotecall调用java类的方法:
<remotecall name=”getSun” funcname="getSun">
    <param id=”a” name=”a” value=”’’”/>
    <param id=”b” name=”b” value=”’’”/>
    <method event="ondata" args="sum"/>
</remotecall>

说明:在使用javarpc前,首先要将JAVA类定义为安全的,如下:
<security>
    <allow>
        <pattern>^com.sum.ReturnSum</pattern>
    </allow>
</security>

funcname对应java类的方法名称。

如果调用的方法带有参数,remotecall需用<param>来传递参数,这个参数对应JAVA方法中的形参。在传递时,remotecall会根据param的位置和JAVA方法形参的位置匹配。
<method event="ondata" args="sum"/>,使用args来接收JAVA方法的返回值,无需定义数据类型。
下面通过一个小DEMO来演示一下使用JavaRPC和JAVA进行通信:
TypesExample类:
package examples;
import java.util.Vector;
import java.util.Hashtable;

public class TypesExample {

    public static String passInteger(int i) {
        return "got integer parameter: " + i;
    } 

    public static String passDouble(double d) {
        return "got double parameter: " + d;
    } 

    public static String passBoolean(boolean b) {
        return "got boolean parameter: " + b;
    } 

    public static String passClientArray(Vector v) {
        return "got vector parameter: " + v;
    } 

    public static String passClientObject(Hashtable t) {
        return "got hashtable parameter: " + t;
    }
}

LZX文件 demo.lzx
<canvas debug="true" height="300" width="800">
    <debug x="250" y="10" width="500" height="275" />
    <security>
        <allow>
            <pattern>^examples.TypesExample</pattern>
        </allow>
    </security>
    <!-- See WEB-INF/classes/TypesExample.java for java source. -->
    <javarpc name="types_example_rpc" scope="none"
        classname="examples.TypesExample">
        <method event="onload">
            <!-- Set buttons visible only after JavaRPC object loads -->
            canvas.buttons.setAttribute('visible', true);
        </method>
        <method event="ondata" args="res">
            Debug.write('(types ondata) response is:', res);
        </method>
        <method event="onerror" args="errmsg">
            Debug.write('(types onerror) error:', errmsg);
        </method>
        <!-- Declaratively pass an integer. -->
        <remotecall funcname="passInteger">
            <param value="42" />
        </remotecall>
        <!-- Declaratively pass a double. Note that we name this function pd1
            because we have multiple remotecall declarations that call
            passDouble but with different parameters. -->
        <remotecall name="pd1" funcname="passDouble">
            <param value="42.1" />
        </remotecall>
        <!-- Declaratively pass a double with 0 decimal. The 0 decimal will
            truncate and the number will become an integer type when it reaches
            the server. This call will fail. -->
        <remotecall name="pd2" funcname="passDouble">
            <param value="42.0" />
        </remotecall>
        <!-- Declaratively pass a double with 0 decimal. Wrapping the double in
            DoubleWrapper will ensure the value will remain a double when
            reaching the server. -->
        <remotecall name="pd3" funcname="passDouble">
            <param>
                <method name="getValue">
                    return new LzRPC.DoubleWrapper(42.0);
                </method>
            </param>
        </remotecall>
    </javarpc>
    <view name="buttons" visible="false" layout="spacing: 10">
        <button text="pass integer"
            onclick="types_example_rpc.passInteger.invoke()" />
        <button text="pass double"
            onclick="types_example_rpc.pd1.invoke()" />
        <button text="pass double (will fail)"
            onclick="types_example_rpc.pd2.invoke()" />
        <button text="pass double w/LzRPC.DoubleWrapper"
            onclick="types_example_rpc.pd3.invoke()" />
        <button text="pass boolean"
            onclick="this.passBoolean.invoke()">
            <!-- This is a way to declare a remotecall closer to where it's being
                used. The remotecontext must be set. -->
            <remotecall funcname="passBoolean"
                remotecontext="$once{ types_example_rpc }">
                <param value="true" />
            </remotecall>
        </button>
        <button text="pass array" onclick="this.passArray.invoke()">
            <remotecall name="passArray" funcname="passClientArray"
                remotecontext="$once{ types_example_rpc }">
                <param value="[1, 'a string', 4.5, false]" />
            </remotecall>
        </button>
        <button text="pass hash" onclick="this.passObject.invoke()">
            <remotecall name="passObject" funcname="passClientObject"
                remotecontext="$once{ types_example_rpc }">
                <param
                    value="{ a: 1, b: 3.14159, c: 'a string value', d: true}">
                </param>
            </remotecall>
        </button>
    </view>
分享到:
评论
1 楼 lliiqiang 2014-03-31  
资料太少了,伪造客户端和事先标准以外数据为攻击,其它的是bug.

相关推荐

    OpenLaszlo —— 一个快速构建和部署富 Internet 应用程序的平台

    OpenLaszlo —— 一个快速构建和部署富 Internet 应用程序的平台 -- Linux,C,C++,Java,Ajax,XML,perl,php,python,ruby,MySQL,Gnome,KDE,Qt,Gtk,bash,shell,嵌入式,网络,信息安全,操作系统,数据结构,编译原理

    Applet & Openlaszlo

    Applet与Openlaszlo的通信。 采用此方式可以做相关的软件在线安装,上传,下载的FLASH效果。

    OpenLaszlo-SAMSIG-05.ppt

    OpenLaszlo is the leading open source platform for the development and delivery of rich Internet applications on the World Wide Web.

    openlaszlo本地帮助文档

    英文版的openlaszlo的使用手册,html格式的。 哪位如果能做成chm或者pdf的就更好了。 openlaszlo是RIA的一种实现,个人感觉比Flex要灵活的多。

    openlaszlo-4.9.0-windows-dev-install.part2.rar

    openlaszlo应用程序开发使用的是基于XML的LZX语言,它可以被编译成DHMTL,SWF等格式。 openlaszlo可作为openmeetings客户端的编译。 因安装程序90+MB,所以切分为两个压缩包。 openlaszlo-4.9.0-windows-dev-install....

    openlaszlo-4.9.0-windows-dev-install.part1.rar

    openlaszlo应用程序开发使用的是基于XML的LZX语言,它可以被编译成DHMTL,SWF等格式。 openlaszlo可作为openmeetings客户端的编译。 因安装程序90+MB,所以切分为两个压缩包。 openlaszlo-4.9.0-windows-dev-install....

    openlaszlo-4.7.3-windows-dev-install (1).exe

    openlaszlo应用程序开发使用的是基于XML的LZX语言,它可以被编译成DHMTL,SWF等格式。 是openmeetings视频会议系统的默认开发编译工具。

    openlaszlo计算器

    这是用Openlaszlo开发的计算器程序,可以实现基本的计算操作。 我是刚学openlaszlo,欢迎朋友们提出宝贵意见!

    论文研究-使用OpenLaszlo构建J2EE中的RIA程序 .pdf

    使用OpenLaszlo构建J2EE中的RIA程序,高春阳,龚群侃,当前,Web 应用程序就要进入了一个新的时期,富互联网客户端(RIA ,Rich Internet Application) 以其极大地用户交互性、优秀的外观设计、良好��

    geoar:WMSWFS OpenLaszlo 客户端

    Geoar - WMS/WFS OpenLaszlo 客户端GeoAr 是 WMS 和 WFS 服务的富客户端实现。 它是在 LZX (OpenLaszlo) 上开发的,因此它向用户的浏览器提供 dhtml 或 flash,从而提供在它们之间进行选择的机会,但只有一个服务器...

    OpenLaszlo-开源

    OpenLaszlo是一个开放源代码平台,用于创建单页应用程序,这些应用程序可以编译为Flash或HTML5进行Web部署。 该项目的站点位于http://openlaszlo.org。

    Laszlo技术手册续

    这是Laszlo与web的PPT! 希望对希望让laszlo与web结合的朋友有所帮助!

    FlashBuilder_4_LS10.part01.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。

    FlashBuilder_4_LS10.part02.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。

    FlashBuilder_4_LS10.part03.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。

    FlashBuilder_4_LS10.part04.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。

    FlashBuilder_4_LS10.part09.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。因为大分了9份上传。

    FlashBuilder_4_LS10.part05.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。因为大分了10份上传。

    FlashBuilder_4_LS10.part06.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。因为大分了9份上传。

    FlashBuilder_4_LS10.part07.rar

    FlashBuilder开发工具,是开发java网页及OpenLaszlo,Laszlo富客户端必备工具。本人安装在电脑运行正常。因为大分了9份上传。

Global site tag (gtag.js) - Google Analytics