`
Ivan_Pig
  • 浏览: 388406 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JavaFX与后台交互----通过JSON

    博客分类:
  • AJAX
阅读更多
    之前写了关于JavaFX与后台通信的blog,里面只提交了一个Field的值,如果要提交两个甚至更多的Field的值就很麻烦了(通过组装字符串,后台解析。)所以就想到了json,之前看网上的资料说javafx自带了json的包,但是在javafx1.1里面没有找到,就找了个第三方的包org.json。

    废话不多说,直接改原来的程序就可以了,使用post提交。


import javafx.io.http.*;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingButton;
import java.io.DataInputStream;
import javafx.scene.layout.HBox;
import javafx.ext.swing.SwingTextField;
import org.json.JSONObject;


def field:SwingTextField = SwingTextField {
    columns: 10
    text: "Ivan"
    editable: true
}

def field2:SwingTextField = SwingTextField {
    columns: 10
    text: "dd"
    editable: true
}

var t:String= bind field.text;
var p:String = bind field2.text;

function sendHttp(){
    HttpRequest {

        method:HttpRequest.POST;
        location:"http://localhost:8080/JavaScriptWeb/moo";

       onOutput: function(os: java.io.OutputStream) {
            try {
                var json:JSONObject = JSONObject{};
                json.put("name1",t);
                json.put("name2",p);
                var temp:String = "obj={json.toString()}";
                os.write(temp.getBytes());
                os.flush();
            } finally {
                os.close();
            }
        }

        onInput: function(is: java.io.InputStream) {
            try {
                def data:DataInputStream = new DataInputStream(is);
                field.text = data.readLine();
            } finally {
                is.close();
            }
        }
    }.enqueue();
}



Stage {
    title : "Http"
    scene: Scene {
        width: 200
        height: 200
        content: [HBox{
            content:[
            field,field2
            SwingButton {
            text: "Click"
            action: function() {
                sendHttp();
            }
        }
        ]
        }
         ]
    }
}



代码添加了一个Field,核心代码在onOutput里面,就是调用了JSONObject类的一些方法而已。实际作用就是组装了一个如下的字符串。"obj=\{\"name1\":\"{t}\",\"name2\":\"{p}\"\}"将这个字符串提交到后台。
package test;

import org.json.JSONObject;
import org.json.JSONException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.PrintWriter;
import java.util.Enumeration;

/**
 * Created by IntelliJ IDEA.
 * User: Ivan
 * Date: 2009-4-3
 * Time: 19:55:13
 */
public class MooServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        String obj = request.getParameter("obj");

        JSONObject jsonObj = null;
        try {
            jsonObj = new JSONObject(obj);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        PrintWriter writer = response.getWriter();
        try {
            writer.write("Hello "+ jsonObj.getString("name1") + jsonObj.getString("name2"));
        } catch (JSONException e) {
            e.printStackTrace();
        }
        writer.flush();
        writer.close();
    }
}



   依然是调用了JSONObject类的方法,解析出了字符串。然后返回即可。当然了,这里你还可以组装一个字符串返回,供前台去解析,不啰嗦了。
   此方法相对于想在成熟的java的Ajax框架来说肯定差不少,但是目前而言还是个不错的解决方案。
4
0
分享到:
评论
3 楼 guanchong0452 2011-04-07  
学习了,楼主辛苦,对我有很大的帮助。
2 楼 Ivan_Pig 2009-05-22  
liujunsong 写道

根本没必要这么复杂.
定义一个自己的字符串存储格式.
把多个信息组合成一个字符串传回去就好了.收到的再自己解析一下.
代码不会超过200行的.


我并没有说自己组装字符串解析不可以。
既然有现成的json,我干嘛要自己去解析?
是你自己解析麻烦,还是直接用已有的东西麻烦呢?
1 楼 liujunsong 2009-05-22  
根本没必要这么复杂.
定义一个自己的字符串存储格式.
把多个信息组合成一个字符串传回去就好了.收到的再自己解析一下.
代码不会超过200行的.

相关推荐

    pro javaFX 2

    这一章节关注JavaFX应用程序如何与Web服务进行交互。 **关键知识点**: - **网络通信**:介绍了JavaFX中用于网络通信的API,包括URL连接和HTTP请求等。 - **JSON和XML解析**:讨论了如何解析从Web服务返回的JSON...

    《Netty+JavaFx实战:仿桌面版微信聊天》| 本项目是作-chat.itstack.github.io.zip

    - 客户端使用Netty建立TCP连接,通过定义自定义的协议(如JSON或protobuf)进行数据序列化和反序列化,实现聊天消息的发送和接收。 4. **多线程**: - Netty的EventLoopGroup用于执行事件处理任务,每个EventLoop...

    javafx用股票接口实现股票实时查询

    由于这涉及到IO操作,应使用JavaFX的Task或者Service组件来执行这些任务,确保它们在后台线程中运行,不会阻塞UI。数据更新后,使用Platform.runLater()方法确保在FX应用线程中更新UI,避免线程安全问题。 6. **...

    Java通信项目之客户端UI实现以及交互

    本文将深入探讨如何使用Java技术来设计和实现用户界面,并确保其与后端通信的有效交互。 首先,我们需要理解客户端UI的基础:Java Swing和JavaFX。Swing是Java标准库的一部分,提供了丰富的组件库,如JFrame、...

    通讯录的设计与实现-java-version2.0

    这需要设计一个友好的用户界面,让用户可以方便地输入信息,并将这些数据存储在后台数据库或文件中。在Java中,我们可以使用Swing或JavaFX库创建图形用户界面,使用ArrayList或其他集合类来存储联系人对象。 2. **...

    java dialog弹出层实例

    在JSP中,可以利用JavaScript或jQuery库创建对话框,并通过JSP动作标签与后台Servlet通信。 - Servlet负责处理HTTP请求,可以根据请求参数执行业务逻辑,然后返回JSON或HTML片段作为对话框的内容。 5. **前端框架*...

    基于java开发的货币汇率查询小程序

    - **Swing或JavaFX**:Java提供了Swing和JavaFX两个图形用户界面库,用于创建交互式的汇率查询界面。 - **事件监听**:添加按钮点击事件,触发汇率查询操作。 - **数据显示**:将查询到的汇率结果显示在文本框或...

    简易版天气预报java实现

    - **后台任务**:为了不阻塞用户界面,天气更新应该在后台线程(如SwingWorker或JavaFX的Task)中执行。 6. **日期和时间处理**: - **java.time**包:处理日期和时间,如计算和显示未来七天的日期。 7. **异常...

    java日历

    这可以通过文件系统(如XML或JSON)、数据库(如SQLite)或者云服务(如Google Calendar API)来实现。 7. **设计模式**: - 在实现这样的程序时,设计模式如MVC(模型-视图-控制器)可以帮助组织代码结构。模型...

    Java实现12306查票

    7. **事件驱动编程**: JavaFX基于事件驱动模型,用户与界面的交互(如点击按钮)会触发相应的事件,需要编写事件处理器来响应这些事件。例如,查询按钮的点击事件会触发查询操作,更新界面显示。 8. **异常处理**: ...

    java文本编辑器

    它可以用于创建更美观、更交互式的界面,但JavaFX在某些环境中可能不如Swing普及。 2. **事件处理**: - 在Java文本编辑器中,事件处理是至关重要的。例如,当用户点击“打开”按钮时,需要监听这个事件并触发相应...

    jsjava2.0bin资源包

    4. **WebSocket API**:现代Web应用中,JavaScript可以通过WebSocket协议与服务器进行双向通信,这同样适用于与Java服务器的实时交互。 5. **Node.js与Java集成**:Node.js是一个基于Chrome V8引擎的JavaScript运行...

    swing与servlet通信

    这样,用户可以继续与应用交互,而不会感知到后台操作。 5. **使用JSON或XML进行数据交换** 为了方便数据的序列化和反序列化,Swing和Servlet之间常使用JSON或XML作为数据交换格式。例如,使用Jackson库在Swing中...

    NewsClient:校园新闻客户端,用于接收-seivice-服务端发送的json数据并展现到客户端

    6. **异常处理**:在与服务端交互过程中,可能遇到网络中断、数据解析错误等问题,NewsClient需要包含适当的异常处理机制,确保程序的健壮性。 7. **设计模式**:良好的软件设计通常会运用设计模式,如单例模式用于...

    图书管理系统(Java实现 附完整代码

    - **View(视图)**:展示给用户的图形界面,如表格、按钮等,与模型交互,展示或接收用户输入。 - **Controller(控制器)**:处理用户操作,协调模型和视图的交互。 3. **数据库操作** - **JDBC**:Java ...

    java编写天气预报插件

    Java编写天气预报插件是一个常见的编程任务,尤其对于开发者来说,它可以作为一个学习项目,帮助他们提升技能并了解如何与API交互。在这个项目中,我们将会探讨如何使用Java语言来实现一个能够获取并显示天气信息的...

    基于java的日程提醒簿.zip

    - **类与对象**:通过定义类来创建对象,如Event类代表事件,User类代表用户,Reminder类则用于设置提醒。 - **封装、继承和多态**:这些面向对象的基本特性在项目中得到广泛应用,封装保护数据,继承实现代码复用...

    基于服务器客户机的聊天程序

    在IT领域,构建基于服务器-客户机(Server-Client)架构的聊天程序是一种常见的实践,它允许多个客户端通过网络与服务器交互,实现信息的实时传递。这种架构模式的基础是TCP/IP协议,它确保了数据在网络中的可靠传输...

    《设计模式与游戏完美开发》java demo.zip

    - 通过实现ActionListener或其他监听器接口,程序可以响应用户的键盘、鼠标输入,实现游戏交互。 4. **多线程**: - 游戏通常需要同时处理多个任务,如渲染、更新游戏状态、处理用户输入等,这可能涉及到Thread或...

    移动警务查询系统前台和后台部分,JAVA

    同时,系统的接口设计应遵循RESTful原则,以JSON格式交换数据,便于前后端分离和与其他系统集成。 在开发过程中,持续集成和测试也非常重要。工具如Jenkins可以自动化构建和部署,JUnit和Mockito用于单元测试,...

Global site tag (gtag.js) - Google Analytics