javafx之HTTP协议交互

时间:2023-03-08 20:29:00
javafx之HTTP协议交互

javafx端要获取获取如下信息:

javafx之HTTP协议交互

服务器端获取的数据:

javafx之HTTP协议交互

javafx客户端发送的数据以及获取的数据:

javafx之HTTP协议交互

javafx之HTTP协议交互

工程目录:

javafx之HTTP协议交互

package Httputil;

import IPsite.IPaddress;
import Streamutil.StreamTool;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map; /**
*
* @author Legend-novo
*/
public class HttpMethod { /**
* GET方式获取字符串
* @return 返回字符串
* @throws Exception
*/
public static String getGETString() throws Exception{
URL url = new URL(IPaddress.IP_get_SITE);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.setDoOutput(true);
conn.setDoInput(true);
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
byte[] data = StreamTool.read(inputStream);
return new String(data);
}
return null;
}
/**
* 以GET方式发送字符串
* @param params 要发送的数组
* @param encoding 发送的编码
* @return true返回成功,false返回失败
* @throws Exception
*/
public static boolean sendGETString(HashMap<String,String> params,String encoding) throws Exception{
StringBuilder url = new StringBuilder(IPaddress.IP_send_SITE);
url.append("?");
for (Map.Entry<String,String> entry: params.entrySet()) {
url.append(entry.getKey()).append("=");
url.append(URLEncoder.encode(entry.getValue(), encoding));
url.append("&");
}
url.deleteCharAt(url.length()-1);
HttpURLConnection conn = (HttpURLConnection) new URL(url.toString()).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == 200) {
return true;
}
return false;
} /**
* POST方式获取字符串
* @return 返回字符串
* @throws Exception
*/
public static String getPOSTString() throws Exception{
URL url = new URL(IPaddress.IP_get_SITE);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");
conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
conn.setDoOutput(true);
conn.setDoInput(true);
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
byte[] data = StreamTool.read(inputStream);
return new String(data);
}
return null;
}
/**
* 以POST方式发送字符串
* @param params 要发送的数组
* @param encoding 发送的编码
* @return true返回成功,false返回失败
* @throws Exception
*/
public static boolean sendPOSTString(HashMap<String,String> params,String encoding) throws Exception{
StringBuilder data = new StringBuilder();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String,String> entry: params.entrySet()) {
data.append(entry.getKey()).append("=");
data.append(URLEncoder.encode(entry.getValue(), encoding));
data.append("&");
}
data.deleteCharAt(data.length()-1);
}
byte[] entity = data.toString().getBytes();//得到实体数据
HttpURLConnection conn = (HttpURLConnection) new URL(IPaddress.IP_send_SITE).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");
conn.setDoOutput(true);//允许对外输出数据
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
OutputStream oStream = conn.getOutputStream();
oStream.write(entity);
if(conn.getResponseCode() == 200){//用于获得返回数据才能发送数据,不然数据一直在缓存数据中
return true;
}
return false;
}
}
package IPsite;

/**
*
* @author Legend-novo
*/
public class IPaddress {
public static final String IP_get_SITE = "http://192.168.1.100:8080/JavaFXtest/JavaFXServlet"; //接受信息的IP地址
public static final String IP_send_SITE = "http://192.168.1.100:8080/JavaFXtest/JavaFxgetServlet"; //发送信息的IP地址
}
package JsonMethod;

import Person.personbean;
import java.util.List; /**
*
* @author Legend-novo
*/
public class JsonStr {
public static String getJson(List<personbean> person){
if(person.isEmpty()){
System.out.println("传入对象为空!");
}else{
StringBuilder json = new StringBuilder();
if (person.size()==1) {
json.append("{\"name\":\"");
json.append(person.get(0).getName());
json.append("\",\"age\":\"");
json.append(person.get(0).getAge());
json.append("\"}");
}else {
json.append("[");
for (int i = 0; i < person.size(); i++) {
json.append("{\"name\":\"");
json.append(person.get(i).getName());
json.append("\",\"age\":\"");
json.append(person.get(i).getAge());
if (i <(person.size()-1)) {
json.append("\"},");
}else {
json.append("\"}");
}
}
json.append("]");
}
return json.toString();
}
return null;
}
}
package Person;

/**
*
* @author Legend-nov
*/
public class personbean {
private String name;
private Integer age;
/**
* @return the name
*/
public String getName() {
return name;
} /**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
} /**
* @return the age
*/
public Integer getAge() {
return age;
} /**
* @param age the age to set
*/
public void setAge(Integer age) {
this.age = age;
}
public personbean(){}
public personbean(String name,Integer age){
this.name = name;
this.age = age;
}
}
package Streamutil;

import java.io.ByteArrayOutputStream;
import java.io.InputStream; /**
*
* @author Legend-novo
*/
public class StreamTool {
/**
* 读取流中的数据
* @param stream 传入的流
* @return
* @throws Exception
*/
public static byte[] read(InputStream stream) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len=stream.read(buffer)) != -1){
outputStream.write(buffer, 0, len);
}
return outputStream.toByteArray();
}
}
package httptest;

import Httputil.HttpMethod;
import JsonMethod.JsonStr;
import Person.personbean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage; /**
*
* @author Legend-novo
*/
public class HttpTest extends Application {
private String message = null;
/**
* 将对象转换成JSON对象数据
* @return 返回JSON对象数据
*/
public String setJson(){
personbean person1 = new personbean("zhangsan",21);
personbean person2 = new personbean("lisi",25);
personbean person3 = new personbean("tom",31);
final List<personbean> list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
return JsonStr.getJson(list);
}
/**
* 以GET的方式进行数据交互
* @param primaryStage
*/
public void GETHttp(Stage primaryStage){ final HashMap<String,String> map = new HashMap<>();
map.put("data",setJson());
System.out.println(setJson()); final Label labelget = new Label();
final Label labelsend = new Label();
Button btnget = new Button();
btnget.setText("获取信息");
Button btnsend = new Button();
btnsend.setText("发送信息");
btnget.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("点击了btnget!");
try {
message = HttpMethod.getGETString();
labelget.setText(message);
} catch (Exception ex) {
Logger.getLogger(HttpTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}); btnsend.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("点击了btnsend!");
try {
if(HttpMethod.sendGETString(map, "UTF-8")){
labelsend.setText("sending successed");
}else{
labelsend.setText("sending failed");
}
} catch (Exception ex) {
Logger.getLogger(HttpTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
VBox vb = new VBox(10);
vb.getChildren().addAll(btnget,labelget,btnsend,labelsend);
StackPane root = new StackPane();
root.getChildren().add(vb); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("GET方式数据交互");
primaryStage.setScene(scene);
} public void POSTHttp(Stage primaryStage){ final HashMap<String,String> map = new HashMap<>();
map.put("data",setJson());
System.out.println(setJson()); final Label labelget = new Label();
final Label labelsend = new Label();
Button btnget = new Button();
btnget.setText("获取信息");
Button btnsend = new Button();
btnsend.setText("发送信息");
btnget.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("点击了btnget!");
try {
message = HttpMethod.getPOSTString();
labelget.setText(message);
} catch (Exception ex) {
Logger.getLogger(HttpTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}); btnsend.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("点击了btnsend!");
try {
if(HttpMethod.sendGETString(map, "UTF-8")){
labelsend.setText("sending successed");
}else{
labelsend.setText("sending failed");
}
} catch (Exception ex) {
Logger.getLogger(HttpTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
VBox vb = new VBox(10);
vb.getChildren().addAll(btnget,labelget,btnsend,labelsend);
StackPane root = new StackPane();
root.getChildren().add(vb); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("POST方式数据交互");
primaryStage.setScene(scene);
}
@Override
public void start(Stage primaryStage) {
// POSTHttp(primaryStage);
GETHttp(primaryStage);
primaryStage.show();
} public static void main(String[] args) {
launch(args);
}
}