javascript
在JShell中尝试Java9 HTTP客户端和Process API
這篇文章繼續了My My Java 9 Features博客文章中對Java9功能的探索。 在這里,我們用在Java9 HTTP / 2客戶端和進程API試驗JShell
HTTP / 2客戶端
HTTP / 2客戶端是Java9中的孵化器項目。 這意味著該API尚未最終確定,因此在將來的版本中仍有一定的更改范圍。 從Java9到Java10的最明顯變化是將其從jdk.incubator.httpclient模塊移動到“ http.client”模塊,以及相關的軟件包名稱更改。 使用API??時應牢記這一點。
HTTP / 2不能直接在jshell中正常工作,但是它可以讓我們看到Java Platform Modularity System(JPMS)的運行。 我們只需使用–add-modules –將httpclient模塊傳遞到jshell中
C:\jdk9TestGround>jshell -v --add-modules jdk.incubator.httpclient然后,我們導入http庫–
jshell> import jdk.incubator.http.*;現在,我們可以從jshell調用網站–
jshell> HttpClient httpClient = HttpClient.newHttpClient(); jshell> HttpRequest httpRequest = HttpRequest.newBuilder().uri(new URI("https://www.javabullets.com")).GET().build(); jshell> HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandler.asString()); jshell> System.out.println(httpResponse.statusCode()); jshell> System.out.println(httpResponse.body());最有趣的功能是使用Builder模式創建HTTP請求。 這在HttpRequest.Builder中定義,可用于構造更復雜的HttpClient請求,包括身份驗證。
語法與Http / 2兼容的Jetty HttpClient和okhttp相似。 絕對比Java中的舊方法簡單得多。
此API的其他有用功能是–
- 異步請求–由于它是非阻塞的,因此比上面的示例更有用。 這是通過HttpRequest.sendAsync方法完成的
- WebSockets –通過具有自己的WebSocket.Builder的WebSocket類創建。 我將在另一篇文章中介紹它,因為它比在jshell中更清晰
流程API
流程API簡化了Java中對流程信息的訪問。
考慮一下我當前的Jshell流程的細節–
jshell> System.out.println(ProcessHandle.current().pid()); 8580jshell> System.out.println(ProcessHandle.current().info()); [user: Optional[NEW-EJ0JTJ5I9B9\javabullets], cmd: C:\Program Files\Java\jdk-9\bin\java.exe, startTime: Optional[2017-10-09T19:41:21.743Z], totalTime: Optional[PT4.625S]]jshell> System.out.println(ProcessHandle.current().parent()); Optional[6592]我們還可以訪問系統進程和ID –
jshell> ProcessHandle.allProcesses().forEach(p -> System.out.println(p.pid())); 8276 9720 8012 480或資訊–
jshell> ProcessHandle.allProcesses().forEach(p -> System.out.println(p.info()));[user: Optional[NEW-EJ0JTJ5I9B9\javabullets], cmd: C:\Program Files (x86)\PFU\ScanSnap\Update\ScanSnapUpdater.exe, startTime: Optional[2017-10-09T18:28:42.812Z], totalTime: Optional[PT0.78125S]] [user: Optional[NEW-EJ0JTJ5I9B9\javabullets], cmd: C:\Windows\explorer.exe, startTime: Optional[2017-10-09T18:35:08.397Z], totalTime: Optional[PT25.234375S]] [user: Optional[NEW-EJ0JTJ5I9B9\javabullets], cmd: C:\Windows\System32\cmd.exe, startTime: Optional[2017-10-09T18:36:11.522Z], totalTime: Optional[PT0.078125S]]現在我們可以訪問可以殺死選擇性過程的進程-讓我們殺死記事本-
jshell> Process p = new ProcessBuilder("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe").start(); p ==> Process[pid=9644, exitValue="not exited"]jshell> p.destroy();如果destroy不能終止進程,我們還可以選擇destroyForce。
上面的示例顯示了Process API對于啟動,終止和監視進程有多么有用和簡單。 它使我們擺脫了依賴第三方庫提供過程控制的麻煩
翻譯自: https://www.javacodegeeks.com/2017/10/experimenting-java9-http-client-process-api-jshell.html
總結
以上是生活随笔為你收集整理的在JShell中尝试Java9 HTTP客户端和Process API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓投屏到电视机(安卓投屏到电视)
- 下一篇: Java命令行界面(第20部分):JSA