目前JavaFX相关的资料都是基本语法,以及界面相关。而JavaFX面向的是RIA,RIA就肯定需要和后台交互,个人研究了一下,遇到了不少问题,共享给大家
首先先看看JavaFX的api,一眼就能看到javafx.io.http包,包里面有三个类,HttpHeaders,HttpRequest,HttpStatus三个类。具体用法,呵呵,看API吧。主要使用的就是HttpRequest类了。API里也有比较详细的例子。
这里有修改此例来实现Http的get和post提交,分别和后台交互。
先写个servlet
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 name = request.getParameter("name");
PrintWriter writer = response.getWriter();
writer.write("Hello "+ name);
writer.flush();
writer.close();
}
}
配置文件自己配吧。
接着编写JavaFX文件。首先以get方式提交,这个很简单。只需要一个onInput方法就够了。
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;
def label:SwingTextField = SwingTextField {
columns: 10
text: "Ivan"
editable: true
}
function sendHttp(){
HttpRequest {
location:bind "http://localhost:8080/JavaScriptWeb/moo?name={label.text}";
onInput: function(is: java.io.InputStream) {
try {
def data:DataInputStream = new DataInputStream(is);
label.text = data.readLine();
} finally {
is.close();
}
}
}.enqueue();
}
Stage {
title : "Http"
scene: Scene {
width: 200
height: 200
content: [HBox{
content:[label,
SwingButton {
text: "Click"
action: function() {
sendHttp();
}
}
]
}
]
}
}
很像AJAX操作吧
运行界面如下:
这里有两个需要注意的地方。
1.location那里使用了bind关键字,如果不使用此关键字,那么name值始终是TextField的初始值,不信试试。
2.我把实例化HttpRequest以及发送包装为一个方法,因为每次发送请求都必须要重新实例化一个HttpRequest,否则报错,不信也可以试试。
其他关于onInput回调方法,自行查看API.
下面是Post提交,这个比较郁闷,如果照API上的例子,你找半天都可能不知道怎么提交,网上也没有例子。我摸索了半天才搞定。代码如下。
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;
def label:SwingTextField = SwingTextField {
columns: 10
text: "Ivan"
editable: true
}
var t:String= bind "name={label.text}";
function sendHttp(){
HttpRequest {
method:HttpRequest.POST;
location:"http://localhost:8080/JavaScriptWeb/moo";
onOutput: function(os: java.io.OutputStream) {
try {
os.write(t.getBytes());
os.flush();
} finally {
os.close();
}
}
onInput: function(is: java.io.InputStream) {
try {
def data:DataInputStream = new DataInputStream(is);
label.text = data.readLine();
} finally {
is.close();
}
}
}.enqueue();
}
Stage {
title : "Http"
scene: Scene {
width: 200
height: 200
content: [HBox{
content:[label,
SwingButton {
text: "Click"
action: function() {
sendHttp();
}
}
]
}
]
}
}
看似简单。真摸索我还是摸索了半天,原因是,在API里面的例子是继承了HttpRequest,里面设置了两个header,就其中一个header害死人。如果你要post提交,将setHeader("Content-Type", "somecontent/type");这句删除,或者将其修改为setHeader("Content-Type", "application/x-www-form-urlencoded");否则后台getParameter无法取到值。
与上面相比,有三处改变。
1.location直接写地址,无须跟参数。(get和post之间的区别)
2.method:HttpRequest.POST;提交方法改为Post。
3.添加了一个onOutput方法,在其内写入参数。此处的流一定要关闭。如果不关闭,后续方法将不会执行。且此方法必须要覆盖,如果不覆盖同样的程序没有响应。
OK。现在看来JavaFX和后台交互还是很简单的吧!同时也看到了不足。类似AJAX的请求和响应,那么响应流就需要自己的组装,这个就比较麻烦了。查了些资料,JavaFX有对xml和json的支持,那么具体操作待续
- 大小: 5.3 KB
分享到:
相关推荐
javaFX语法后台交互文档(3M)javaFX语法后台交互文档(3M)
这是使用javafx实现的一个完整的电子白板交互系统项目,里面实现了图形的绘制、画笔的绘制、图片的绘制等等,支持各种类型的资源展示。是一个不错的电子白板系统交互项目。
javaFX canvas用法交互的小例子程序 挤压后idea可以打开并运行
javafx
显示多窗口管理文章http://blog.csdn.net/miniduhua/article/details/71190747
JavaFX API文档。Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich ...
自制基于javaFX与JBox2D的音乐游戏
javaFX实现的图书馆后台管理系统,有数据库增删改查,基于sqlserver数据库.zip
javaFX Demo 模板案例
JavaFX教程;JavaFX教程;JavaFX教程JavaFX教程;
JavaFx做界面VLC做视频处理,请看源码
GMapsFX, Java API用于在JavaFX应用程序中使用 谷歌地图 GMapsFX修正的注意:在macosx的GMapsFX... 纯 JavaFX API允许你在不需要与底层 谷歌地图 JavaScript API交互的情况下向你的JavaFX应用程序添加 谷歌地图 。GMaps
Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich Internet ...
JavaFX api文档 chm格式
详情请看
javafx2.0,java,javafx,例子,代码 Sun公司(已于20092008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语 言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微...
Java11以后的版本不再集成Javafx,需要单独下载
linux系统下,可用如下两命令运 行 javafx 的 jar包 export JAVAFX=/home/这里是linux的用户名文件夹/javafx-sdk-18/lib java --module-path $JAVAFX --add-modules javafx.fxml,javafx.controls -jar demo.jar 或都...
javaFX高级教程JavaFX2.0的FXML语言 中文文档,想免费上传,CSDN不同意,选了一个最小资源分2
图标是开发桌面应用程序中非常必要的部分, JavaFX按钮、选择框、复选框等控件提供了graphic子节点来显示图标, 快捷工具栏、状态栏也都有图标的使用, 其它注入显示信息时节点的前面也会使用不同的图标来标明节点...