数据怎样在java 和javascript之间传输? 比如java如何得到javascript的变量对象值

数据怎样在java 和javascript之间传输? 比如java如何得到javascript的变量对象值,第1张

理论上java获得所有请求都是通过servlet,但是现在很多框架进行了封装,建议使用框架,可以轻松的实现,比如DWR就可以用js在页面调用java代码,还能传递参数,获得返回值,原理就是它对ajax异步请求做了相应的封装。
js获得java的代码可以直接通过<%=%>这种方式获取。
DWR原理介绍:
dwr框架是服务器端的ajax框架,那么最基础的还是XML>这是我写的,看看对你有没帮助:
服务器端:
package comtesttcp;
import javaioBufferedReader;
import javaioBufferedWriter;
import javaioIOException;
import javaioInputStreamReader;
import javaioOutputStreamWriter;
import javaioPrintWriter;
import javanetServerSocket;
import javanetSocket;
import javautilMap;
import orgnutzjsonJson;
import comtestcardCardInterface;
import comtestcardTaideImplement;
public class ServerCode {
/
@param args服务器端接收请求代码
/
/
设置一个与客户端通讯的公共端口
/
public static int portNo=8888;
private String jsonString="";//用于给本地的客户端传递执行结果信息,以便将此信息返回给vclient服务器端
public static void main(String[] args)throws IOException {

ServerSocket s=new ServerSocket(portNo);
Systemoutprintln("启动公共端口对应的服务通讯:++++++——————sfdgdf : "+s);//在服务器本地控制台打印信息
/
阻塞,直到有客户端连接
/
Socket socket=saccept();
Systemoutprintln("接收到客户请求+++++++++++++=== "+socket);//在服务器本地控制台打印信息
/
设置IO句柄
/
BufferedReader in=new BufferedReader(new InputStreamReader(socketgetInputStream()));//得到客户端发送来的信息流

PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketgetOutputStream())),true);//服务器端发送给客户端的信息流
outwrite("收到信息");
outflush();//刷新清除缓存
Systemoutprintln("关闭流");
socketclose();
sclose();

}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
thisjsonString = jsonString;
}
}
客户端:
package comtesttcp;
import javaioBufferedReader;
import javaioBufferedWriter;
import javaioIOException;
import javaioInputStreamReader;
import javaioOutputStreamWriter;
import javaioPrintWriter;
import javanetInetAddress;
import javanetSocket;
public class ClientCode {
/
@param args 客户端发送请求的代码
/

/
定义 需要传送给服务器端的信息
/
static String clientName="Charlie";
/
设置一个与服务器端通讯的公共端口号
/
public static int portNo=8888;

public static void main(String[] args) throws IOException{
/
设置连接地址类,连接本地
/
InetAddress address=(InetAddress) InetAddressgetByName("localhost");//此处的address为对应服务器端的ip地址
/
要对应服务器端的8888端口号
/
Socket socket=new Socket(address,portNo);
ServerCode serverCode=new ServerCode();
clientName=serverCodegetJsonString();//得到card刷卡服务器端扣款实现返回的信息,并(此客户端针对)将返回的信息传回给vclient的服务器端
try {
Systemoutprintln("++++—————— ::: "+socket);
/
设置IO句柄
/
BufferedReader in=new BufferedReader(new InputStreamReader(socketgetInputStream()));
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketgetOutputStream())),true);
outwrite(clientName);
outflush();
outprintln("1111111111111111111111—— "+clientName);//outprintln() ---是将信息写到流中,然后在服务器端打印出来
String string=inreadLine();//就收客户端返回的信息流
Systemoutprintln(string);
outprintln("88");//outprintln() ---是将信息写到流中,然后在服务器端打印出来
} catch (Exception e) {
eprintStackTrace();
}
finally{
Systemoutprintln("--++++++++------");//在本地客户端控制台上输出信息
socketclose();
}
}
}

在java中用socket传输对象的时候,底层是把java对象序列化,然后以二进制数据进行传输的。socket的服务端和客户端都需要有这个对象的声明,比如客户端发送的是comclientMsgPackage对象,那么这个对象的class文件必须在服务端的classpath中。否则就会是接收方接收了tcp的数据包,但是无法还原成对象。
底层要能把对象序列化,这个对象要实现一个可序列化的接口:javaioSerializable。
类通过实现 javaioSerializable
接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
writeObject 方法负责写入特定类的对象的状态,以便相应的 readObject 方法可以恢复它。通过调用
outdefaultWriteObject 可以调用保存 Object 的字段的默认机制。该方法本身不需要涉及属于其超类或子类的状态。通过使用
writeObject 方法或使用 DataOutput 支持的用于基本数据类型的方法将各个字段写入 ObjectOutputStream,状态可以被保存。
readObject 方法负责从流中读取并恢复类字段。它可以调用 indefaultReadObject
来调用默认机制,以恢复对象的非静态和非瞬态字段。defaultReadObject
方法使用流中的信息来分配流中通过当前对象中相应指定字段保存的对象的字段。这用于处理类演化后需要添加新字段的情形。该方法本身不需要涉及属于其超类或子类的状态。通过使用
writeObject 方法或使用 DataOutput 支持的用于基本数据类型的方法将各个字段写入 ObjectOutputStream,状态可以被保存。

想要用writeObject方法写入对象,这个对象一定要可以序列化的,也就是说要实现Serializable这个接口
把data类改成
public class data implement Serializable {
这样就好了,里面不用加其他的东西


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13131592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-08
下一篇 2023-06-08

发表评论

登录后才能评论

评论列表(0条)

保存