这是客户端
public class WidgetView extends Region {
private WebView webView;
private WebEngine webEngine;
private ClientService service = new ClientService();
public WidgetView() {
setPrefSize(1000, 600);
service.start();
webView = new WebView();
webView.setContextMenuEnabled(false);
webEngine = webView.getEngine();
webEngine.setOnAlert(event -> {
System.out.println(event.getData().toString());
sendToServer(event.getData().toString());
//do something...
});
URL url = getClass().getResource("/ru/parus/imctax/web/index.html");
webEngine.load(url.toExternalForm());
getChildren().add(webView);
}
private void sendToServer(String json) {
service.sendJson(json);
System.out.println("Данные были отправлены!");
}
class ClientService extends Service<Session> {
private Session session;
@Override
protected Task<Session> createTask() {
Task<Session> task = new Task<Session>() {
@Override
protected Session call() throws Exception {
ClientManager client = ClientManager.createClient();
ClientEndpointConfig endpointConfig = ClientEndpointConfig.Builder.create().build();
URI uri = new URI("imc://localhost:8080/imc");
session = client.connectToServer(new ClientEndpoint(), endpointConfig, uri);
return session;
}
};
return task;
}
void sendJson(String json) {
//---------
if (session == null) {
System.out.println("Session is null ((");
//This message printed on console
}//---------
if (session != null) {
try {
System.out.println("Объект отправлен");
session.getBasicRemote().sendText(json);
} catch (IOException e) {
e.printStackTrace();
}
}
}
void closeSession() {
if (session != null) {
try {
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
ClientEndpoint
public class ClientEndpoint extends Endpoint {
public ClientEndpoint() {
}
@Override
public void onOpen(Session session, EndpointConfig endpointConfig) {
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String s) {
System.out.println("Called method 'onMessage'. Parameter: "+s);
}
});
}
}
服务器端
public class ServerMain {
public static void main(String[] args) {
Server server = new Server("localhost", 8080, "/imc", PurchaseServerEndpoint.class);
try {
server.start();
} catch (DeploymentException e) {
e.printStackTrace();
server.stop();
}
}
}
//Another class in Server side
@ServerEndpoint("/imc")
public class PurchaseServerEndpoint {
@OnOpen
public void open(Session session) {
System.out.println("Session ["+session+"] is open!");
}
@OnClose
public void close(Session session) {
System.out.println("Session ["+session+"] is closed!");
}
@OnMessage
public void receiveJson(String message, Session session) {
System.out.println("I'm receive json: " + message);
}
}
我启动ServerApplication,然后启动ClientApp(带WebView的FxApp)。 数据未传递,因为会话为空。 也许这条线不正确?
session = client.connectToServer(new ClientEndpoint(), endpointConfig, uri);
如何使其正确?
答案 0 :(得分:0)
URI uri = new URI("imc://localhost:8080/imc");
也许它应该是这样的:
URI uri = new URI("ws://localhost:8080/imc");
如果将服务器部署到某个应用程序服务器而不是在上下文路径中显示附加项 - 应用程序名称。例如,ws://localhost:8080/application_name/imc