在使用JavaFX开发浏览器的时候 会遇到需要使用webview获取cookie的情况,下面介绍用CookieManager 的方式获取,亲测可用,
首先创建一个按钮,利用按钮的点击事件打开一个网页,然后等网页打开后,关闭窗体的时候调用获取cookie的函数,就可以拿到cookie公我们的桌面应用使用了主要这里的 CookieManager 需要导import com.sun.webkit.network.CookieManager; 这个包,不然运行会报错,不过报错信息也会提示你的
@FXML
protected void loginAction()throws IOException {
Stage stage =new Stage();
stage.setWidth(1280);
stage.setHeight(850);
stage.setTitle("登录窗体");
////要注意fxml文件的类路径写法(与本JavaFXController.java的相对关系)
//特别要注意第二窗体对应的view的fxml文件路径写法(view和controller都放在各自的包下):
//不用问为什么要加../ 我也不知道 可能HomeController 在 com.mitcub.controller下
//FXMLLoader loader = new FXMLLoader(getClass().getResource("../login.fxml"));
//Scene scene = new Scene(loader.load(),1280,850);
//LoginController controller = loader.getController();
//controller.webView = new WebView();
WebView webView =new WebView();
final WebEngine webEngine = webView.getEngine();
ScrollPane scrollPane =new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
scrollPane.setContent(webView);
webEngine.getLoadWorker().stateProperty()
.addListener(new ChangeListener() {
@Override
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {
if (newState == Worker.State.SUCCEEDED) {
currentUrl =webEngine.getLocation();
}
}
});
if(AppUtil.isBlank(cookie)) {
webEngine.load(baseUrl);
}else{
webEngine.load(baseUrl+"Member/index");
}
Scene scene =new Scene(webView,1280,850);
scene.setRoot(scrollPane);
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);//模式窗体
stage.setOnCloseRequest(new EventHandler() {
@Override
public void handle(WindowEvent event) {
System.out.println("window close event");
//event.consume();
cookie = getCookies();
// settingView.setCookie(cookie);
}
});
stage.show();
}
private StringgetCookies(){
CookieManager cookieManager = (CookieManager) CookieHandler.getDefault();
try {
Map> result = cookieManager.get(new URI(currentUrl), new HashMap<>());
java.util.List cookies = result.get("Cookie");
String cookie = cookies.get(0);
// System.out.println(cookie);
return cookie;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}