⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system_76.txt

📁 一套三层结构的文件管理OA系统源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
</canvas>
 


通过使用这些技术,可以创建令人印象深刻的动画。您永远不必担心帧速率和其他计算,因为所有这些细节都已经为您抽象好了。此外,由于约束可能涉及多个组件,一个组件的动画可能改变其他组件的状态。 

定制绘画

OpenLaszlo 的一个巨大的优势就是可以很容易地绘制定制的图形。这些图形可以是静态的,也可以是动态的,这样您便可以对用户交互作出响应,甚至可以创建图形应用程序。您可以在 <drawview> 组件上执行定制绘画,用该组件充当画布。即使绘画是说明性 的,但是它仍然具有过程的性质。一旦掌握了绘画,很容易知道如何将它应用到动态或静态场景中。 

<drawview> 元素实际上只有 4 个定制属性。这些属性是全局的,可以控制被画到画布上的片段的默认属性,包括:fillStyle、 globalAlpha、lineWidth 和 strokeStyle。您可以通过 10 个专用于 <drawview> 的定制过程来修改所有这些属性。 

绘画过程

绘画接口定义了 10 个过程。这些过程可以移动画笔(pen),最终创建路径(path),而路径可以被描边,可以用渐变方式和颜色进行填充(如果是封闭的)。 

画笔的初始位置为点 0,0。通过使用 moveTo(x, y) 方法,可以将画笔移动到一个新的位置。一条路径实际上就是一系列的点,路径可以被描边,也可以被填充。还可以使用 lineTo(x, y) 方法添加一个子路径到当前路径,并将画笔定位在一个指定的位置。还有一个类似的 quadraticCurveTo(cpx, cpy, x, y) 方法,该方法以一个坐标和一个曲线控制点坐标为参数,但是其行为类似于 lineTo()。 

建立好一条路径后,为了使之可见,必须对它进行描边或填充。通过调用 stroke() 方法,可以使用 strokeStyle (十六进制格式的颜色,例如 0x000000)和 lineWidth 的当前属性值来决定如何对该路径描边。fill() 方法使所有子路径封闭起来,然后逐个填充每个子路径,期间使用 fillStyle (一种颜色,或一个渐变对象)来决定如何绘制填充。清单 6 演示了一个简单的例子,这个例子用各种方式描边和填充一些正方形。 



清单 6. 简单的绘画例子

<canvas width="115" height="95">
   <drawview width="200" height="200" x="5" y="5">
      <method event="oninit">
         // Draw a black square
         this.strokeStyle = 0x000000;
         this.moveTo(0, 0);
         this.lineTo(25, 0);
         this.lineTo(25, 25);
         this.lineTo(0, 25);
         this.closePath();
         this.stroke();
         // Reset the path and draw a square with red fill 
         // and a black outline
         this.beginPath();
         this.fillStyle = 0xff0000;
         this.moveTo(40, 0);
         this.lineTo(65, 0);
         this.lineTo(65, 25);
         this.lineTo(40, 25);
         this.closePath();
         this.fill();
         // Draw a square with a square filled with a gradient 
         // from white to gray
         this.beginPath();
         // Create the gradient, adding color 'stops' (where 
         // the color shifts)
         var gradient = this.createLinearGradient(80, 0, 105, 25);
         gradient.addColorStop(0, 0xffffff);
         gradient.addColorStop(1, 0x000000);
         this.fillStyle = gradient;
         this.moveTo(80, 0);
         this.lineTo(105, 0);
         this.lineTo(105, 25);
         this.lineTo(80, 25);
         this.closePath();
         this.fill();
         this.stroke();
   </method>
   </drawview>
</canvas>
 


图 3 给出了 清单 6 在浏览器窗口中的输出:



图 3. 清单 6 的输出 
 

这个示例使用了 oninit() 方法,对于所有对象都可以使用该方法。它引入了用于路径管理的 beginPath() 和 closePath() 这两个方法。它还引入了渐变,渐变在 Laszlo 中有两种形式: linear 和 radial。每个渐变都被映射到一个矩形或圆形的坐标空间。为了设置颜色,可以使用 addColorStop() 方法,使颜色范围定在 0 到 1 之间。颜色 0 将成为渐变的起始颜色,而颜色 1 将成为渐变中最大的颜色值。在设置起止颜色之前,还可以通过修改 globalAlpha 属性来产生部分不透明的渐变颜色。 

组合绘画和动画

前面介绍了 OpenLaszlo 提供的所有基本的绘画功能。您可能想知道如何使用 “动画和绘画” 小节中提到的动画功能和过程式的绘画 API。一种方法是添加定制属性到一个 <drawview>。例如,如果您想有一个动态绘制的圆形,并且半径的大小是以动画效果变化的,那么可以创建一个属性 radius,然后为这个属性产生动画效果(按照常用的方法),接着为半径的变化事件定义一个事件处理器(<method event="onradius">),在这个事件处理器中重画该元素。通过这种策略,几乎所有事情都可以实现。 

部署:proxied 与 SOLO 应用程序

有些读者可能已经迫不及待地跳到了 参考资料 小节去看有哪些类型的 OpenLaszlo 应用程序。如果您没有这么做,而是坚持读到这里的话,我想您也很想知道如何将 Laszlo 文件转换成可以部署到 Web 上的格式。本节将谈到这个话题,并且还会点明哪种部署模型最适合您,是 proxied 还是 SOLO。 

SOLO 部署

SOLO(standalone OpenLaszlo output 的简称)部署方式只受那些可以为 Flash 文件服务的 Web 服务器的支持。为了将 Laszlo 应用程序转换成一个 Flash 文件,可以调用编译器(例如 lzc file.lzx —— .lzx 是 Laszlo 文件的扩展名)来产生一个输出文件,只要带有必需的最小版本以上的 Flash,就可以播放该文件。这样就非常简单了:将生成的文件放在 Web 服务器上,然后将它包括在一个 HTML 文档的主体中就可以了。OpenLaszlo 编译器会负责所有底层的工作(资源组合,代码生成,等等)。但是,SOLO 部署方式有一个限制,有些非常强大的特性(例如 Web 服务调用、RPC 和某些类型的媒体流)SOLO 部署方式不能提供。 

proxied 部署:所有特性

使用 proxied 部署方式,可以得到 OpenLaszlo 系统所能提供的所有特性。这是这种部署方式的一个优点,但是:为了使用这种部署模型,必须在服务器上安装一个 OpenLaszlo Server 环境。这种服务器环境是位于 J2EE 应用程序或 servlet 容器之上的一个 Web 应用程序,负责为 .lzx 文件处理所有请求。OpenLaszlo Server 的一个很棒的特性是,您只需将 Laszlo 文件和 OpenLaszlo Server 组件放在一个服务器上,便可以浏览页面并看到结果,因为它是由服务器动态编译和缓存的。OpenLaszlo Server 另外一个主要的优点是它位于所部署的应用程序与应用程序需要访问的其他资源之间,执行各种所需的转换。因此 Laszlo 支持(在被代理的情况下) XML-RPC 之类的特性。 

对于很多用户来说,安装 OpenLaszlo Server 是很快的,并且它还捆绑了 Tomcat,安装起来很方便。对于那些使用 IBM WebSphere? 或其他 J2EE 应用服务器的用户来说,可以使用 参考资料 中提供的一个 Web 应用程序档案文件和关于如何设置环境的说明。系统管理方面超出了本文的范围,不过可以在 参考资料 小节中找到很多相关的参考资料。 

何时使用 proxied 部署

由于在 SOLO 部署方式下媒体请求不是代理的,因此 SOLO 应用程序只支持 Flash、JPG 和 MP3 媒体类型。而且,由于不存在数据的代理,SOLO 部署中也不支持 RPC、SOAP 和持久连接之类的项。 

虽然本文只对 proxied 和 SOLO 部署方式作了简要的概述,但是足以令您见识到 OpenLaszlo Server 的威力。在最后一节中,我将展示 Laszlo 支持的数据绑定和 RPC 特性,有些特性在 proxied 模式下具有不同的行为,或者依赖于 proxied 模式。 



 


 回页首 
 



数据绑定特性和 RPC

谈到在 Laszlo 中显示大量数据的时候,这种语言的数据绑定特性可以说是非常方便的。通过数据绑定可以将特定的组件值映射为一个已有的数据结构,而不必进行额外的编程。数据绑定主要用于创建基于表单的布局,在这种情况下您需要将大量项插入到一个可视化的模板中。您可以将 UI 的文本域和其他内容绑定到外部数据存储,并且可以使用那些数据来填充像下拉框和复选框之类的控件。

数据源通常是一个 XML 文档,该文档或者被静态地编译成 OpenLaszlo 应用程序,或者被动态地获取。您也可以使用 XMLHttpRequest 之类的 API 开发更具手动特点的解决方案,但是使用数据绑定将减少开发时间。在 OpenLaszlo 中,可以在 XML 文档中指定元素,通过在 datapath 属性中添加 XPath 来绑定这些元素。清单 7 展示了一个简单的例子,这个例子将一些联系信息绑定到某些文本区域。 



清单 7. 简单的联系信息的数据绑定
	
<canvas>
   <dataset name="contactInfo">
      <contacts>
         <contact>
            <name>John Doe</name>
            <phone>555-2000</phone>
            <DOB>16-01-1973</DOB>
            <role>Developer</role>
         </contact>
         <contact>
            <name>Jane Doe</name>
            <phone>555-3000</phone>
            <DOB>27-02-1974</DOB>
            <role>Manager</role>
         </contact>
      </contacts>
   </dataset>
   <view datapath="contactInfo:/contacts/">
      <simplelayout axis="y" />
      <view datapath="contact/">
         <simplelayout axis="x" />
         <text datapath="name/text()" />
         <text datapath="phone/text()" />
         <text datapath="DOB/text()" />
         <text datapath="role/text()" />
      </view>
   </view>
</canvas>
 


上面的例子引入了数据绑定中的另一个重要概念:XPath 继承。您可以看到,外部的视图与 XML 文档的根节点(<contacts>)是绑定的,而嵌套在里面的视图则绑定到一个 <contact> 节点。另一个值得注意的地方是两个 实体都显示出来了,如图 4 所示。



图 4. 清单 7 的输出 
 

这是默认的行为,不过您可以指定一个特定的 contact 节点(例如 datapath="contact[1]")。如果使用这种默认行为,LzReplicationManager 将复制相应的 <view> 项。 

数据绑定还可以做更多的事情,因为 <dataset> 对象可以定义成远程对象。此外,它们可以动态更新,利用数据绑定层处理所有底层的事情。当然,和 Laszlo 中的大多数特性一样,您可以以多种方式使用数据绑定。例如可以覆盖声明了 datapath 属性的项上的 applyData() 方法,以定制数据的格式化。类似地,<dataset> 的 ondata 事件可用于处理其他定制的更新。除了这些简单的覆盖外,Laszlo 还包括很多更复杂的接口和对象(包括 <datapointer> 元素),更高级的 Laszlo 开发人员可能会感兴趣。 

RPC 选项

虽然完整地描述 RPC 的工作原理超出了本文的范围,不过我还是觉得有必要提到 OpenLaszlo 对 RPC 提供支持的方式。在 proxied 部署方式中,OpenLaszlo 支持三种类型的 RPC:JavaRPC、SOAP 和 XML-RPC。所有这些方法都有相关的特定组件,但是它们都继承 OpenLaszlo RPC 组件 <rpc>。同样,RPC 也需要 OpenLaszlo Server。后者负责处理数据的编排和将请求代理给远程服务器。 

通过使用 JavaRPC (或其他 RPC 方法),不必修改服务器端已有的逻辑便可以与 OpenLaszlo 兼容。这相对于基于 Ajax 的解决方案来说是一个优点,它提供了定制的或第三方的软件来将 Ajax 型请求映射到 JavaRPC 模型中。此外,由于 OpenLaszlo 会创建代理存根(使用 Laszlo Delegates),大大减轻了开发人员的负担。由于 OpenLaszlo 中提供的 RPC 方法非常类似于更传统的相应的 RPC 方法,因此那些熟悉 RPC 的用户可以直接上手。那些不熟悉 RPC 的用户也可以放心,OpenLaszlo 中的 RPC 支持允许以一种直观的方式与服务器端逻辑紧密耦合。 

结束语

正如您看到的那样,OpenLaszlo 有很多好的特性。它为将来的很多问题提供了优雅的、完整的解决方案。希望本文对其中一些独特的特性作了简要的概述,并为提供了足够的基础信息,以帮助您将 OpenLaszlo 用于开发项目。我鼓励您深入研究本文 参考资料 小节中列出的文档和示例。一旦找到窍门,相信您会发现 OpenLaszlo 开发是非常快捷的,同时也会获得丰厚的回报。 


Java程序员的存储过程 
   http://www.souzz.net 2006-03-21 文章出处: 
   



原文:http://www.onjava.com/pub/a/onjava/2003/08/13/stored_procedures.html 
by Nic Ferrier 

本文阐述了怎么使用DBMS存储过程。我阐述了使用存储过程的基本的和高级特性,比如返回ResultSet。本文假设你对DBMS和JDBC已经非常熟悉,也假设你能够毫无障碍地阅读其它语言写成的代码(即不是Java的语言),但是,并不要求你有任何存储过程的编程经历。 
存储过程是指保存在数据库并在数据库端执行的程序。你可以使用特殊的语法在Java类中调用存储过程。在调用时,存储过程的名称及指定的参数通过JDBC连接发送给DBMS,执行存储过程并通过连接(如果有)返回结果。 
使用存储过程拥有和使用基于EJB或CORBA这样的应用服务器一样的好处。区别是存储过程可以从很多流行的DBMS中免费使用,而应用服务器大都非常昂贵。这并不只是许可证费用的问题。使用应用服务器所需要花费的管理、编写代码的费用,以及客户程序所增加的复杂性,都可以通过DBMS中的存储过程所整个地替代。 
你可以使用Java,Python,Perl或C编写存储过程,但是通常使用你的DBMS所指定的特定语言。Oracle使用PL/SQL,PostgreSQL使用pl/pgsql,DB2使用Procedural SQL。这些语言都非常相似。在它们之间移植存储过程并不比在Sun的EJB规范不同实现版本之间移植Session Bean困难。并且,存储过程是为嵌入SQL所设计,这使得它们比Java或C等语言更加友好地方式表达数据库的机制。 
因为存储过程运行在DBMS自身,这可以帮助减少应用程序中的等待时间。不是在Java代码中执行4个或5个SQL语句,而只需要在服务器端执行1个存储过程。网络上的数据往返次数的减少可以戏剧性地优化性能。 

使用存储过程 

简单的老的JDBC通过CallableStatement类支持存储过程的调用。该类实际上是PreparedStatement的一个子类。假设我们有一个poets数据库。数据库中有一个设置诗人逝世年龄的存储过程。下面是对老酒鬼Dylan Thomas(old soak Dylan Thomas,不指定是否有关典故、文化,请批评指正。译注)进行调用的详细代码: 

try
{
    int age = 39;
    String poetName = "dylan thomas";
    CallableStatement proc =
        connection.prepareCall("{ call set_death_age(?, ?) }");
    proc.setString(1, poetName);
    proc.setInt(2, age);
    cs.execute();
}
catch (SQLException e)
{
    // ....
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -