迎接 RIA 时代的来临(下)

RIA方案—基于Flash的Flex

Flex简介
        Macromedia公司被公认为新兴的RIA市场的领导者。今天98%的浏览器上都使用Macromedia Flash客户端软件,因此几乎每个人都可以使用基于Flash的RIA。Macromedia Flex是Macromedia的新服务器产品,它使企业应用程序开发人员能够全面访问RIA的功能。Flex具有基于标准的架构,与当前企业开发人员的工具、方法和设计模式互补。

        Flex应用程序与传统的HTML应用程序的主要区别在于Flex应用程序处理最适合在客户端运行,如字段校验、数据格式、分类、过滤、工具提示、合成视频、行为及效果等。Flex 可使开发人员更好地交付应用程序,这种应用程序使用户可以迅速反应、在不同状态与显示间流畅过渡,并提供毫无中断的连续的工作流。

                 

                                                 Flex 应用程序框架

如上图所示,Flex应用程序框架由MXML、ActionScript 2.0及Flex类库构成。开发人员利用 MXML及ActionScript 2.0编写Flex应用程序。利用MXML定义应用程序用户界面元素,利用ActionScript 2.0定义客户逻辑与程序控制。Flex类库中包括Flex组件、管理器及行为等。利用基于Flex 组件的开发模型,开发人员可在程序中加入预建的组件、创建新组件或是将预建的组件加入复合组件中。

        这里重点介绍一下MXML。与HTML一样,都是标记语言,它描述了反映内容与功能的用户界面。与HTML不同的是,MXML 可对表示层逻辑与用户界面和服务器端数据绑定提供声明抽象。MXML可将表示与业务逻辑的问题彻底分开,以实现最大程度地提高开发人员的生产率及应用程序的重复使用率。

        Flex的不足
        目前Macromedia最新推出了Flex 1.0 Updater,但它代号为“Brady”的IDE还没有正式推出,目前还在进行Beta 3测试。抛开IDE不说,笔者认为Flex目前还很不成熟,还不利于在实际项目中使用。

        例如,Flex自带的ZipCodeValidator,里面只提供了美国和加拿大的邮编规则,没有其他选择,也无法个性化它。看来只有自己来定义Validator了,但这样一来,和在JS中写正则表达式有什么区别(代码量和JS差不多)?用户需要的是国际化的ZipCodeValidator,这样才能提高工作效率。

        一句话概括
        现在的Flex才是1.0版本,很多地方都不完善,只好自定义才能完成特定的要求。期待着Brady以及Flex后续版本的推出!

RIA方案—基于JS的Bindows

Bindows简介
    “Bindows把JavaScript发挥到了第九层!”——网友这样评价Bindows。

                

                             运行中的Bindows

    的确如此,Erik等编写这个框架已经将JavaScript的OOP和基于IE6的DHTML发挥到极点!Bindows 0.93发布的时候已经将IE内置的功能开发得淋漓尽致了,包括Filter、XMLHTTP、Web Service、VML。JavaScript用于客户端界面的显示和处理,XMLHTTP用于客户端与服务器的信息传输。JavaScript在客户端的表现力不容置疑,看看www.bindows.net所表示出来的能力,利用JavaScript几乎可以实现Windows应用程序所能干的大部分事情,XMLHTTP一直以来常被用于实现“无刷新”的Web页面,它和JavaScript配合,可以完成数据从服务器和客户端的传输。
   
    Bindows的不足
    Erik喜欢那种一次全部载入的方式来实现脚本库,使用过Bindows会发现,在窗口的加载期,需要一个漫长的等待过程,甚至浏览器的进程会产生无响应的情况。按照V0.93,脚本文件的大小是600多K,在一个普通的Web应用中,我们更多时候不会用到Bindows的全部功能,这点Bindows根本没有遵循“用多少去多少”的准则。另外,过多的JS会使CPU占用率陡然增加,产生潜在问题。

    内部大量利用了IE6的技术,没有考虑到非微软平台的浏览器,限制了Bindows的流行。在图表方面,大量采用了VML技术,在IE5,IE5.5这两个版本,VML引擎不是那么的成熟,很多地方的显示不够流畅,会受到带宽和硬件的限制,过分绚丽的图形最终会给用户带来崩溃。“图形方面我是采用VML的,当初太偏执,如果使用SVG来实现可能好许多的,也就是那段日子,我花了非常多的时间去折腾web方面开发。”——有网友这样说。

    一句话概括
    在技术的角度上,从Bindows是可以学到不少东西的,但好像它的学术价值大于它的商业价值。

后 记

    兴奋归兴奋,冷静下来仔细想想,运用RIA改造现有B/S模式还为时尚早。制约我们的首先是网络环境和硬件环境的不完善性,我想没有哪个用户愿意花大量的时间来等待想要看见的“花哨”页面,更不愿意等来的东西使自己的机器不堪重负,而换来的只是一些良好体验吧?市场决定一切,而不是任何的新技术!其次,目前RIA的解决方案也不成熟,笔者看好Flex,可惜还需要长时间的等待才有结果。当然,还有很多RIA的方案,感觉MS的Smart Client + Web Service来头不小。

    本文叫“迎接RIA时代的来临”,笔者充满了对RIA的美好憧憬,期待着有一天能够在RIA的环境中进行虚拟现实的交互式体验!

 

鸣 谢:RIA中国 没有他们,我想今天也不会对RIA有如此的认识!!!

参考文献
Flex 白皮书
IDC--RIA白皮书
回归C/S?解释Bindows
迎接Client/Server模式的回归
Flex: RIA 的先驱,无坚不摧的银弹?
Return of Rich Client
  

(请注意!引用、转贴本文应注明原作者:Rosen Jiang 以及出处:http://blog.csdn.net/rosen

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这是一个比较复杂的问题,需要分步骤进行回答。 首先,需要在Java中连接到MySQL数据库,并创建对应的表。可以使用JDBC(Java Database Connectivity)来连接数据库。 其次,需要使用JavaFX来构建图形化界面。JavaFX是Java平台的一部分,用于创建富互联网应用程序(RIA)。 接下来,需要编写Java代码来实现插入记录的功能。在插入记录前,需要进行数据的合法性验证。可以使用正则表达式来验证学号和姓名,使用条件语句来验证成绩是否在0-100之间。 最后,进行基本的测试,包括插入记录的功能测试和数据验证的测试。 以下是大致的代码框架: ```java import java.sql.*; import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class InsertRecord extends Application { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/xsgl"; // Database credentials static final String USER = "root"; static final String PASS = ""; @Override public void start(Stage primaryStage) { // Create a GridPane for the UI layout GridPane gridPane = new GridPane(); gridPane.setAlignment(Pos.CENTER); gridPane.setHgap(10); gridPane.setVgap(10); gridPane.setPadding(new Insets(25, 25, 25, 25)); // Add UI controls to the GridPane Label lblStudentId = new Label("学号:"); gridPane.add(lblStudentId, 0, 0); TextField txtStudentId = new TextField(); gridPane.add(txtStudentId, 1, 0); Label lblStudentName = new Label("姓名:"); gridPane.add(lblStudentName, 0, 1); TextField txtStudentName = new TextField(); gridPane.add(txtStudentName, 1, 1); Label lblScore = new Label("成绩:"); gridPane.add(lblScore, 0, 2); TextField txtScore = new TextField(); gridPane.add(txtScore, 1, 2); Button btnInsert = new Button("插入记录"); gridPane.add(btnInsert, 1, 3); // Add event handler for the Insert button btnInsert.setOnAction(event -> { // Get the input values from the UI controls String studentId = txtStudentId.getText(); String studentName = txtStudentName.getText(); String scoreStr = txtScore.getText(); // Validate the input values if (studentId.isEmpty() || studentName.isEmpty() || scoreStr.isEmpty()) { // Show an error message if any of the input fields is empty showError("学号、姓名和成绩不能为空!"); } else { // Validate the score value int score = Integer.parseInt(scoreStr); if (score < 0 || score > 100) { // Show an error message if the score is invalid showError("成绩必须在0-100之间!"); } else { // Insert the record into the database try { // Register JDBC driver Class.forName(JDBC_DRIVER); // Open a connection to the database Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); // Create a statement object Statement stmt = conn.createStatement(); // Construct an SQL statement to insert the record String sql = "INSERT INTO student (student_id, student_name, score) " + "VALUES ('" + studentId + "', '" + studentName + "', " + score + ")"; // Execute the SQL statement stmt.executeUpdate(sql); // Close the statement and connection objects stmt.close(); conn.close(); // Show a success message showSuccess("记录插入成功!"); // Clear the input fields txtStudentId.setText(""); txtStudentName.setText(""); txtScore.setText(""); } catch (Exception e) { // Show an error message if an exception occurs showError("记录插入失败:" + e.getMessage()); } } } }); // Create a Scene and add the GridPane to it Scene scene = new Scene(gridPane, 400, 300); // Set the stage title and scene, then show the stage primaryStage.setTitle("插入记录"); primaryStage.setScene(scene); primaryStage.show(); } private void showError(String message) { // Display an error message in a dialog box } private void showSuccess(String message) { // Display a success message in a dialog box } public static void main(String[] args) { launch(args); } } ``` 请注意,上述代码仅为示例,需要根据具体情况进行修改和完善。同时,需要注意安全问题,如SQL注入攻击等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值