之前写了关于
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框架来说肯定差不少,但是目前而言还是个不错的解决方案。
分享到:
相关推荐
这一章节关注JavaFX应用程序如何与Web服务进行交互。 **关键知识点**: - **网络通信**:介绍了JavaFX中用于网络通信的API,包括URL连接和HTTP请求等。 - **JSON和XML解析**:讨论了如何解析从Web服务返回的JSON...
- 客户端使用Netty建立TCP连接,通过定义自定义的协议(如JSON或protobuf)进行数据序列化和反序列化,实现聊天消息的发送和接收。 4. **多线程**: - Netty的EventLoopGroup用于执行事件处理任务,每个EventLoop...
由于这涉及到IO操作,应使用JavaFX的Task或者Service组件来执行这些任务,确保它们在后台线程中运行,不会阻塞UI。数据更新后,使用Platform.runLater()方法确保在FX应用线程中更新UI,避免线程安全问题。 6. **...
本文将深入探讨如何使用Java技术来设计和实现用户界面,并确保其与后端通信的有效交互。 首先,我们需要理解客户端UI的基础:Java Swing和JavaFX。Swing是Java标准库的一部分,提供了丰富的组件库,如JFrame、...
这需要设计一个友好的用户界面,让用户可以方便地输入信息,并将这些数据存储在后台数据库或文件中。在Java中,我们可以使用Swing或JavaFX库创建图形用户界面,使用ArrayList或其他集合类来存储联系人对象。 2. **...
在JSP中,可以利用JavaScript或jQuery库创建对话框,并通过JSP动作标签与后台Servlet通信。 - Servlet负责处理HTTP请求,可以根据请求参数执行业务逻辑,然后返回JSON或HTML片段作为对话框的内容。 5. **前端框架*...
- **Swing或JavaFX**:Java提供了Swing和JavaFX两个图形用户界面库,用于创建交互式的汇率查询界面。 - **事件监听**:添加按钮点击事件,触发汇率查询操作。 - **数据显示**:将查询到的汇率结果显示在文本框或...
- **后台任务**:为了不阻塞用户界面,天气更新应该在后台线程(如SwingWorker或JavaFX的Task)中执行。 6. **日期和时间处理**: - **java.time**包:处理日期和时间,如计算和显示未来七天的日期。 7. **异常...
这可以通过文件系统(如XML或JSON)、数据库(如SQLite)或者云服务(如Google Calendar API)来实现。 7. **设计模式**: - 在实现这样的程序时,设计模式如MVC(模型-视图-控制器)可以帮助组织代码结构。模型...
7. **事件驱动编程**: JavaFX基于事件驱动模型,用户与界面的交互(如点击按钮)会触发相应的事件,需要编写事件处理器来响应这些事件。例如,查询按钮的点击事件会触发查询操作,更新界面显示。 8. **异常处理**: ...
它可以用于创建更美观、更交互式的界面,但JavaFX在某些环境中可能不如Swing普及。 2. **事件处理**: - 在Java文本编辑器中,事件处理是至关重要的。例如,当用户点击“打开”按钮时,需要监听这个事件并触发相应...
4. **WebSocket API**:现代Web应用中,JavaScript可以通过WebSocket协议与服务器进行双向通信,这同样适用于与Java服务器的实时交互。 5. **Node.js与Java集成**:Node.js是一个基于Chrome V8引擎的JavaScript运行...
这样,用户可以继续与应用交互,而不会感知到后台操作。 5. **使用JSON或XML进行数据交换** 为了方便数据的序列化和反序列化,Swing和Servlet之间常使用JSON或XML作为数据交换格式。例如,使用Jackson库在Swing中...
6. **异常处理**:在与服务端交互过程中,可能遇到网络中断、数据解析错误等问题,NewsClient需要包含适当的异常处理机制,确保程序的健壮性。 7. **设计模式**:良好的软件设计通常会运用设计模式,如单例模式用于...
- **View(视图)**:展示给用户的图形界面,如表格、按钮等,与模型交互,展示或接收用户输入。 - **Controller(控制器)**:处理用户操作,协调模型和视图的交互。 3. **数据库操作** - **JDBC**:Java ...
Java编写天气预报插件是一个常见的编程任务,尤其对于开发者来说,它可以作为一个学习项目,帮助他们提升技能并了解如何与API交互。在这个项目中,我们将会探讨如何使用Java语言来实现一个能够获取并显示天气信息的...
- **类与对象**:通过定义类来创建对象,如Event类代表事件,User类代表用户,Reminder类则用于设置提醒。 - **封装、继承和多态**:这些面向对象的基本特性在项目中得到广泛应用,封装保护数据,继承实现代码复用...
在IT领域,构建基于服务器-客户机(Server-Client)架构的聊天程序是一种常见的实践,它允许多个客户端通过网络与服务器交互,实现信息的实时传递。这种架构模式的基础是TCP/IP协议,它确保了数据在网络中的可靠传输...
- 通过实现ActionListener或其他监听器接口,程序可以响应用户的键盘、鼠标输入,实现游戏交互。 4. **多线程**: - 游戏通常需要同时处理多个任务,如渲染、更新游戏状态、处理用户输入等,这可能涉及到Thread或...
同时,系统的接口设计应遵循RESTful原则,以JSON格式交换数据,便于前后端分离和与其他系统集成。 在开发过程中,持续集成和测试也非常重要。工具如Jenkins可以自动化构建和部署,JUnit和Mockito用于单元测试,...