From 22adbeabb6e348dd308402e46bf9ca7a4e20cbbe Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Thu, 29 Oct 2020 21:00:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9min=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BD=BF=E5=BE=97?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E4=B8=80=E6=AC=A1=E8=B6=8A=E6=9D=83=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E6=97=B6=E8=A7=A6=E5=8F=91=E7=9A=84=E8=B6=8A?= =?UTF-8?q?=E6=9D=83=E8=AE=BF=E9=97=AE=E4=B8=BA=E4=B8=80=E6=AC=A1[?= =?UTF-8?q?=E5=B0=86=E6=89=80=E6=9C=89=E9=87=8D=E5=AE=9A=E5=90=91=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=83=BD=E6=94=BE=E5=9C=A8URL=E7=B1=BB?= =?UTF-8?q?=E4=B8=AD=E5=8E=BB=E5=A4=84=E7=90=86]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- min/log.txt | 2 + min/pid/pib.db | Bin 32768 -> 32768 bytes ...de9a2ea01b20ceec88b3f2b84ec6dcb1a7.privkey | 25 ---- src/main/java/cn/minbrowser/MainApp.java | 8 +- .../cn/minbrowser/MiniMinData/MinDataAPI.java | 106 ++++++++--------- .../protocol/MinURL/MinURLConnection.java | 23 ++-- .../protocol/MinURL/MinURLStreamHandler.java | 6 +- .../MinURL/MinURLStreamHandlerFactory.java | 4 +- .../cn/minbrowser/protocol/MinWebRender.java | 108 +++++++++++++++++- .../view/NavigationBarController.java | 34 +++--- 10 files changed, 201 insertions(+), 115 deletions(-) delete mode 100644 min/tpm/827a879edf63d1d300f6f507dfd379de9a2ea01b20ceec88b3f2b84ec6dcb1a7.privkey diff --git a/min/log.txt b/min/log.txt index d3086e8..352953d 100644 --- a/min/log.txt +++ b/min/log.txt @@ -15,3 +15,5 @@ 文件名:/MIN/Nginx/test2/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6/%E4%BF%A1%E6%81%AF%E5%B7%A5%E7%A8%8B%E5%AD%A6%E9%99%A2/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%BA%94%E7%94%A8%E6%8A%80%E6%9C%AF/A218/%E6%9D%8E%E6%9B%B4%E6%96%B0_%E5%91%A8%E6%8A%A58-21.pdf 文件操作:下载 文件耗时:334ms 文件名:/MIN/Nginx/test2/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6/%E4%BF%A1%E6%81%AF%E5%B7%A5%E7%A8%8B%E5%AD%A6%E9%99%A2/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%BA%94%E7%94%A8%E6%8A%80%E6%9C%AF/A218/%E5%86%AF%E6%96%87%E7%BF%B0-8%E6%9C%8821%E6%97%A5%E5%91%A8%E6%8A%A5.pdf 文件操作:下载 文件耗时:701ms 文件名:/MIN/Nginx/test2/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6/%E4%BF%A1%E6%81%AF%E5%B7%A5%E7%A8%8B%E5%AD%A6%E9%99%A2/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%BA%94%E7%94%A8%E6%8A%80%E6%9C%AF/A218/%E6%9D%A8%E6%9F%B3%E5%91%A8%E6%8A%A5-20200824.pptx 文件操作:下载 文件耗时:3280ms +文件名:/MIN/Nginx/test2/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6/%E4%BF%A1%E6%81%AF%E5%B7%A5%E7%A8%8B%E5%AD%A6%E9%99%A2/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%BA%94%E7%94%A8%E6%8A%80%E6%9C%AF/A218/%E8%B0%A2%E9%91%AB-20200822.pptx 文件操作:下载 文件耗时:469ms +文件名:/MIN/Nginx/test2/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6/%E4%BF%A1%E6%81%AF%E5%B7%A5%E7%A8%8B%E5%AD%A6%E9%99%A2/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%BA%94%E7%94%A8%E6%8A%80%E6%9C%AF/A218/%E5%B7%A5%E4%BD%9C%E8%BF%9B%E5%B1%95--%E5%B0%B9%E6%96%8C-20200821(1).docx 文件操作:下载 文件耗时:415ms diff --git a/min/pid/pib.db b/min/pid/pib.db index 9c6366fd1f47399048a84dcc07cf475c715ca90c..2c40e479d605df38801dd4547b9a83f3d57cb5f0 100644 GIT binary patch delta 56 zcmZo@U}|V!njp=%XrhcWOheP4E!JY9{@$J L@Na%#uiyXxCV>;> delta 76 zcmZo@U}|V!njp=%dZLUotp0RV=*76kwR diff --git a/min/tpm/827a879edf63d1d300f6f507dfd379de9a2ea01b20ceec88b3f2b84ec6dcb1a7.privkey b/min/tpm/827a879edf63d1d300f6f507dfd379de9a2ea01b20ceec88b3f2b84ec6dcb1a7.privkey deleted file mode 100644 index c8c3154..0000000 --- a/min/tpm/827a879edf63d1d300f6f507dfd379de9a2ea01b20ceec88b3f2b84ec6dcb1a7.privkey +++ /dev/null @@ -1,25 +0,0 @@ -MIIEowIBAAKCAQEAjlnSxaNbGiI65dF1VfbUzgBxdUA1anoPqpmkXKx4uKqUhtJR -+nqX0SEr8nMioHMD+/umJS0SExtVdATmNkK4A9lfX9k+wdAg2E+dOFpJDinr16eb -V8KV5C6Shosqp2M02W7fA71dkxfUrNPAkl4iXOcvuwTWzTg2K0RMaiwVrvvyNa3W -TL+Ka8ZpQGsvDkoxeHfLuAmqcNfwUbMJgeRh9LWbbmDEIONiHwdd8QUDDAn8lpfb -VbGriBDrOjJo0h91wlaTHof/vA0EwLYQYKvMfwecnD5FFGXNer8TDjvVOUwOm1de -Teaag3u/hvUvFUmtb+8qu+uqsDdgstdXadgQqwIDAQABAoIBAAk2NNaHULDrQCZ5 -HH+4nmLKUo1E33AJgBQJJ0K8An/owf3LhHSSFFr7K43f94CskLhwu3qyZPYJkckV -PBSM0r2lBm/8bfw6zLVSyZjI9utMuS9WcE4IkIyYmvDL9rGoUNY1P4dNbM3FAAVD -GrYeE1kxuLwAfyn+ljrMi6lfOvP8zhTeaFAVJzcS9BlMYBCO/feShZClNRxN3r+Y -8TVr6+4HmVxCInFYKZP6GTL5ZMNn2Jrbxjl/mAIMzaFfSCXqyNFJWKKmUjBhgOC3 -2CAIApdOlV7wwWHaqjCeU2YO5i2ntFWvXOFoVyqucdpRlh3Pzrwq2bRXjhqXaxTe -gwnX1/ECgYEA/9AxoVbR7/K3vEkOal9xk0Z3SZeQrGM9LhZzjw19d/oKvQkEGypU -y0MEHgzTIgjjCTJZDokwCmn0R+PfZZyeeHn+KOwJc4k7eNcy9YQ07TEYQKMrYHFG -5gyRoZbC9dNaJcqoxojJEtwcCBNYzxjuqFs0VLCcBmtSW3WyVb3NsXkCgYEAjnRs -/AI2zk+jVu8A7x9MmqkCMK/ZSUuJyyMPn0EV4q2cuGAzgqn64qrGomZNTLZVXo3Q -B1WpjyaibAiz3SsQq20JSJNCUKNanZXOJU+/7zidxIz0sSvHrTklxq0d85YfLrEw -0oRkiul+tgRlPLWsx2QxVi74VGZdWAopihI+DkMCgYEAq1ZPl4dmD3ebFpI8BIUu -tfzRcsoATWYemRrShXL8oXoo7Rn31RYSOx4EyPfABiC7p/I/8dtzANaclfYLL6yp -+3mCAPivD+JPog1JBWZqaJ+kZc6kA/F7EiRC+l7W7/2CeKN3TZpaSraAU+xZZESH -vN1xfHPZ3PbO75EyQ/lfpskCgYA8VzSSyp1MZo9Zk4NhxnA8UrqKxPHVChoj4YYM -fxU2HzPzJUysXDPZL11UDOFRTSp8ErW7ZZ2c9VB3UnhdhpBZDKaSB05fudH4Tiwz -wcQbIHAzgUFkipbZ2QsXTN0TANPUg1ma0lmEPcNedh4ryQiWrOn5B4xIs9N2J1fR -FEkU4QKBgDtQw8cJRXRxV1jD++c1nLbJm69eAPbhfzAF8YM+IkbwZ8AzIrWXrIsO -GwR9E3G+RSU2kXAR+rEbn5Lz2YHO6+LEVh2a93+xTjjC45Q0MDeDMnxqAmVP/MZm -fU7RWbez+Ar4x6pMki4DSl0neXuowzyAQ/wP6jxjqHNb/kYbjsow diff --git a/src/main/java/cn/minbrowser/MainApp.java b/src/main/java/cn/minbrowser/MainApp.java index bfd6f4f..4bb42bc 100644 --- a/src/main/java/cn/minbrowser/MainApp.java +++ b/src/main/java/cn/minbrowser/MainApp.java @@ -29,8 +29,12 @@ public class MainApp extends Application { return primaryStage; } - // 控制器 - NavigationBarController navigationBarController; + // 导航栏界面控制器 + private NavigationBarController navigationBarController; + + public NavigationBarController getNavigationBarController(){ + return navigationBarController; + } public MainApp(){ // 初始化配置文件 diff --git a/src/main/java/cn/minbrowser/MiniMinData/MinDataAPI.java b/src/main/java/cn/minbrowser/MiniMinData/MinDataAPI.java index 7024c7b..8e92399 100644 --- a/src/main/java/cn/minbrowser/MiniMinData/MinDataAPI.java +++ b/src/main/java/cn/minbrowser/MiniMinData/MinDataAPI.java @@ -153,57 +153,57 @@ public class MinDataAPI { return true; } - /** - * 渲染较大HTML、JS等网页文件时,需要借助基于PCON的文件传输接口 - * @param filePrefix 要渲染的网页文件(HTML、JS、CSS) - * @return - */ - public static byte[] getWebRenderContent(String filePrefix) { - // 获取文件信息:type - byte[] fileInfoByte = getWebServerResponse(filePrefix); - System.out.println("fileInfoByte"+new String(fileInfoByte)); - Integer type; - try { - type = JsonPraseUtil.getIntegerFormJson(fileInfoByte, "type"); - } catch (JSONException e) { - e.printStackTrace(); - return null; - } - // 第一种type: type=3,直接获取文件数据 - if (type == 3) { - System.out.println("type=3-filePrefix: "+filePrefix); - String indexData; - try { - indexData = JsonPraseUtil.getStringFormJson(fileInfoByte, "index"); - } catch (JSONException e) { - e.printStackTrace(); - return null; - } - return indexData.getBytes(StandardCharsets.UTF_8); - } else if (type == 1) { - // 获取其它文件信息 - String fileRelativePath; - Long fileLen; - Integer sliceSize; - try { - fileRelativePath = JsonPraseUtil.getStringFormJson(fileInfoByte, "requestName"); - fileLen = JsonPraseUtil.getLongFormJson(fileInfoByte, "size"); - sliceSize = JsonPraseUtil.getIntegerFormJson(fileInfoByte, "chunkSize"); - } catch (JSONException e) { - e.printStackTrace(); - return null; - } - // 文件传输开始 - DownLoadWebClientBasedFacePool downLoadWebClientBasedFacePool = new DownLoadWebClientBasedFacePool( - OrderIPrefixUtil.getValidFilePrefix(globelPrefix, fileRelativePath), - fileLen, sliceSize, - facepoolnumber, - minServerIpString, minServerPortInteger - ); - downLoadWebClientBasedFacePool.downloadData(); - return downLoadWebClientBasedFacePool.getData(); - }else{ - return null; - } - } +// /** +// * 渲染较大HTML、JS等网页文件时,需要借助基于PCON的文件传输接口 +// * @param filePrefix 要渲染的网页文件(HTML、JS、CSS) +// * @return +// */ +// public static byte[] getWebRenderContent(String filePrefix) { +// // 获取文件信息:type +// byte[] fileInfoByte = getWebServerResponse(filePrefix); +// System.out.println("fileInfoByte"+new String(fileInfoByte)); +// Integer type; +// try { +// type = JsonPraseUtil.getIntegerFormJson(fileInfoByte, "type"); +// } catch (JSONException e) { +// e.printStackTrace(); +// return null; +// } +// // 第一种type: type=3,直接获取文件数据 +// if (type == 3) { +// System.out.println("type=3-filePrefix: "+filePrefix); +// String indexData; +// try { +// indexData = JsonPraseUtil.getStringFormJson(fileInfoByte, "index"); +// } catch (JSONException e) { +// e.printStackTrace(); +// return null; +// } +// return indexData.getBytes(StandardCharsets.UTF_8); +// } else if (type == 1) { +// // 获取其它文件信息 +// String fileRelativePath; +// Long fileLen; +// Integer sliceSize; +// try { +// fileRelativePath = JsonPraseUtil.getStringFormJson(fileInfoByte, "requestName"); +// fileLen = JsonPraseUtil.getLongFormJson(fileInfoByte, "size"); +// sliceSize = JsonPraseUtil.getIntegerFormJson(fileInfoByte, "chunkSize"); +// } catch (JSONException e) { +// e.printStackTrace(); +// return null; +// } +// // 文件传输开始 +// DownLoadWebClientBasedFacePool downLoadWebClientBasedFacePool = new DownLoadWebClientBasedFacePool( +// OrderIPrefixUtil.getValidFilePrefix(globelPrefix, fileRelativePath), +// fileLen, sliceSize, +// facepoolnumber, +// minServerIpString, minServerPortInteger +// ); +// downLoadWebClientBasedFacePool.downloadData(); +// return downLoadWebClientBasedFacePool.getData(); +// }else{ +// return null; +// } +// } } diff --git a/src/main/java/cn/minbrowser/protocol/MinURL/MinURLConnection.java b/src/main/java/cn/minbrowser/protocol/MinURL/MinURLConnection.java index 2600815..62fff11 100644 --- a/src/main/java/cn/minbrowser/protocol/MinURL/MinURLConnection.java +++ b/src/main/java/cn/minbrowser/protocol/MinURL/MinURLConnection.java @@ -14,7 +14,9 @@ import java.net.URLConnection; /** * Register a protocol handler for URLs like this: myapp:///pics/sland.gif
- * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载。 + * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载; + * 以及利用mainApp.NavigationBarController.Webview.Engine, + * 做url的重定向。 */ public class MinURLConnection extends URLConnection { @@ -26,7 +28,7 @@ public class MinURLConnection extends URLConnection { * 构造到指定URL的URL连接。不会创建到URL引用的对象的连接 * @param url the specified URL. */ - protected MinURLConnection(MainApp mainApp,URL url) throws MalformedURLException { + protected MinURLConnection(MainApp mainApp,URL url){ super(url); this.mainApp=mainApp; minWebRender=new MinWebRender(this.mainApp); @@ -37,7 +39,7 @@ public class MinURLConnection extends URLConnection { * 构造到指定URL的URL连接。不会创建到URL引用的对象的连接 * @param url the specified URL. */ - protected MinURLConnection(URL url) throws MalformedURLException { + protected MinURLConnection(URL url){ super(url); System.out.println("MIN URL: " + url); } @@ -106,10 +108,17 @@ public class MinURLConnection extends URLConnection { } System.out.println("min prefix: "+minPrefix); // 交由MinWebRender处理该min标识:从web服务器上面拉取数据 - byte[] responseData= minWebRender.handleMinPrefix(minPrefix); - // 将拉取到的数据投喂给浏览器进行渲染 - System.out.println(new String(responseData)); - data=responseData; + MinWebRender.WebRenderResponse webRenderResponse = minWebRender.handleMinPrefix(minPrefix); + // 根据MinWebRender的返回内容,进行不同的操作 + if(webRenderResponse.isRedirect){ + // 重定向 + data=webRenderResponse.urlData; + mainApp.getNavigationBarController().loadUrl(MinUrlUtil.MinUrlHead + +webRenderResponse.newMinPrefix.substring(1)); + }else{ + // 直接渲染 + data=webRenderResponse.urlData; + } } // 去掉协议头/获得MIN协议前缀部分 diff --git a/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandler.java b/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandler.java index 77afdef..ec24f38 100644 --- a/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandler.java +++ b/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandler.java @@ -9,7 +9,9 @@ import java.net.URLConnection; import java.net.URLStreamHandler; /** - * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载。 + * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载; + * 以及利用mainApp.NavigationBarController.Webview.Engine, + * 做url的重定向。 */ public class MinURLStreamHandler extends URLStreamHandler { @@ -30,7 +32,7 @@ public class MinURLStreamHandler extends URLStreamHandler // this.mainWebView.getEngine().load(); // 重定向 - return new MinURLConnection(mainApp,MinUrlUtil.filterMinUrl(url)); + return new MinURLConnection(mainApp,url); } } \ No newline at end of file diff --git a/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandlerFactory.java b/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandlerFactory.java index 7a89e8b..b695ebf 100644 --- a/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandlerFactory.java +++ b/src/main/java/cn/minbrowser/protocol/MinURL/MinURLStreamHandlerFactory.java @@ -6,7 +6,9 @@ import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; /** - * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载。 + * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载; + * 以及利用mainApp.NavigationBarController.Webview.Engine, + * 做url的重定向。 */ public class MinURLStreamHandlerFactory implements URLStreamHandlerFactory { diff --git a/src/main/java/cn/minbrowser/protocol/MinWebRender.java b/src/main/java/cn/minbrowser/protocol/MinWebRender.java index 6031e35..0d66d66 100644 --- a/src/main/java/cn/minbrowser/protocol/MinWebRender.java +++ b/src/main/java/cn/minbrowser/protocol/MinWebRender.java @@ -5,13 +5,21 @@ package cn.minbrowser.protocol; */ import cn.minbrowser.MainApp; +import cn.minbrowser.MiniMinData.FileTransfer.DownLoadWebClientBasedFacePool; import cn.minbrowser.MiniMinData.MinDataAPI; +import cn.minbrowser.MiniMinData.util.JsonPraseUtil; +import cn.minbrowser.MiniMinData.util.OrderIPrefixUtil; import cn.minbrowser.protocol.util.PrefixTypeUtil; +import org.json.JSONException; import java.nio.charset.StandardCharsets; +import java.util.Objects; /** * 负责处理一个MIN前缀地址 + * 说明:这里引入MainApp的原因,是为了做有进度条显示的文件下载; + * 以及利用mainApp.NavigationBarController.Webview.Engine, + * 做url的重定向。 */ public class MinWebRender { private MainApp mainApp; @@ -24,9 +32,10 @@ public class MinWebRender { * @param minPrefix MIN前缀 * @return 返回该MIN前缀代表的数据 */ - public byte[] handleMinPrefix(String minPrefix){ + public WebRenderResponse handleMinPrefix(String minPrefix){ PrefixTypeUtil.PrefixType prefixType=PrefixTypeUtil.recognizePrefixType(minPrefix); System.out.println("PrefixTypeUtil.PrefixType("+minPrefix+"): "+prefixType.toString()); + WebRenderResponse webRenderResponse=new WebRenderResponse(minPrefix); switch (prefixType){ case INDEX_HTML: // return MinDataAPI.getWebServerResponse(minPrefix); @@ -49,7 +58,9 @@ public class MinWebRender { }); thread.start(); // mainApp.downloadFileWithShowingProgressBar(minPrefix,MinDataAPI.downloadDirectory); - return "download success".getBytes(StandardCharsets.UTF_8); + webRenderResponse.urlType=100; + webRenderResponse.urlData="download success".getBytes(StandardCharsets.UTF_8); + return webRenderResponse; } } @@ -60,9 +71,96 @@ public class MinWebRender { /** * 处理诸如HTML、JS、CSS等可以被浏览器解析并渲染的文件所对应的MIN前缀标识 * @param webPrefix 对应web文件的MIN前缀 - * @return 文件数据 + * @return 文件数据、文件类型、重定向到的地址(如果需要重定向的话) */ - private byte[] handleWebRenderPrefix(String webPrefix){ - return MinDataAPI.getWebRenderContent(webPrefix); + private WebRenderResponse handleWebRenderPrefix(String webPrefix){ + WebRenderResponse webRenderResponse=new WebRenderResponse(webPrefix); + // 请求该前缀的具体信息 + byte[] fileInfoByte = MinDataAPI.getWebServerResponse(webPrefix); + System.out.println("fileInfoByte: "+new String(fileInfoByte)); + // 解析Type + Integer type; + try { + type = JsonPraseUtil.getIntegerFormJson(fileInfoByte, "type"); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + webRenderResponse.urlType=type; + // 根据Type的不同,做相对应的处理 + if (type == 1) { + // type=1: 文件 => 分块请求其数据,拼接后返回 + String fileRelativePath; + Long fileLen; + Integer sliceSize; + try { + fileRelativePath = JsonPraseUtil.getStringFormJson(fileInfoByte, "requestName"); + fileLen = JsonPraseUtil.getLongFormJson(fileInfoByte, "size"); + sliceSize = JsonPraseUtil.getIntegerFormJson(fileInfoByte, "chunkSize"); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + // 文件传输开始 + DownLoadWebClientBasedFacePool downLoadWebClientBasedFacePool = new DownLoadWebClientBasedFacePool( + OrderIPrefixUtil.getValidFilePrefix(MinDataAPI.globelPrefix, fileRelativePath), + fileLen, sliceSize, + MinDataAPI.facepoolnumber, + MinDataAPI.minServerIpString, MinDataAPI.minServerPortInteger + ); + downLoadWebClientBasedFacePool.downloadData(); + webRenderResponse.urlData=downLoadWebClientBasedFacePool.getData(); + return webRenderResponse; + } else if(type==2){ + webRenderResponse.isRedirect=true; + // type=2: 需要重定向的文件 => 先解析其要重定向到的url, + // 然后递归调用本方法,获取重定向到的url的data + String indexData; + try { + indexData = JsonPraseUtil.getStringFormJson(fileInfoByte, "index"); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + if(webPrefix.endsWith("/")){ + webRenderResponse.newMinPrefix=webPrefix+indexData; + }else{ + webRenderResponse.newMinPrefix=webPrefix+"/"+indexData; + } + webRenderResponse.urlData="redirecting...".getBytes(StandardCharsets.UTF_8); +// webRenderResponse.urlData= Objects.requireNonNull(handleWebRenderPrefix(webRenderResponse.newMinPrefix)).urlData; + return webRenderResponse; + }else if (type == 3) { + // type=3: 字符串 => 解析本次的应答数据之后,直接返回 + String indexData; + try { + indexData = JsonPraseUtil.getStringFormJson(fileInfoByte, "index"); + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + webRenderResponse.urlType=type; + webRenderResponse.urlData=indexData.getBytes(StandardCharsets.UTF_8); + return webRenderResponse; + }else{ + return null; + } + } + + public class WebRenderResponse { + // 该minurl中的前缀 + public String minPrefix; + + public WebRenderResponse(String minPrefix){ + this.minPrefix=minPrefix; + } + // 该minPrefix的type + public Integer urlType; + // 该minPrefix(或其重定向到的minPrefix)所含有的data + public byte[] urlData; + // 该minPrefix是否需要重定向 + public boolean isRedirect=false; + // 重定向到的minPrefix + public String newMinPrefix; } } diff --git a/src/main/java/cn/minbrowser/view/NavigationBarController.java b/src/main/java/cn/minbrowser/view/NavigationBarController.java index b14e1a2..756ed5e 100644 --- a/src/main/java/cn/minbrowser/view/NavigationBarController.java +++ b/src/main/java/cn/minbrowser/view/NavigationBarController.java @@ -12,6 +12,7 @@ import cn.minbrowser.util.SettingPropertyUtil; import cn.minbrowser.view.login.LoginHTMLController; import cn.minbrowser.view.login.RegisterHTMLController; import cn.minbrowser.view.setting.SettingHTMLController; +import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; @@ -141,19 +142,19 @@ public class NavigationBarController implements Initializable { * * @param url url */ - private void loadUrl(String url) { - if (url.equals("index")) { - // 本地加载 - showHomePage(); - } else if (MinUrlUtil.isMinUrl(url)) { - // 进行重定向的预处理 - url = MinUrlUtil.redirectUrl(url); - // min协议加载 - mainWebView.getEngine().load(url); - } else { - // http及其它通用网络协议的加载 - mainWebView.getEngine().load(url); - } + public void loadUrl(String url) { + Platform.runLater(() -> { + if (url.equals("index")) { + // 本地加载 + showHomePage(); + } else if (MinUrlUtil.isMinUrl(url)) { + // min协议加载 + mainWebView.getEngine().load(url); + } else { + // http及其它通用网络协议的加载 + mainWebView.getEngine().load(url); + } + }); } @Override @@ -189,13 +190,6 @@ public class NavigationBarController implements Initializable { new ChangeListener() { public void changed(ObservableValue ov, State oldState, State newState) { if (newState == State.SUCCEEDED) { - String currentLoc = mainWebView.getEngine().getLocation(); - // 如果是一个纯前缀URL,且type!=2,则重新load - if (MinUrlUtil.isPurePrefixMinUrl(currentLoc) - &&(MinUrlUtil.getUrlType(currentLoc)==2) - ) { - mainWebView.getEngine().load(MinUrlUtil.redirectUrl(currentLoc)); - } // 将新url回显到文本输入框 showUrlText(mainWebView.getEngine().getLocation()); }