Helpex - Trao đổi & giúp đỡ Đăng nhập

Java 9: ​​HTTP Client và Process API trong JShell

Bài đăng này tiếp tục khám phá các tính năng Java9 của tôi từ bài đăng trên blog Các tính năng Java 9 hàng đầu của tôi . Ở đây chúng tôi đang thử nghiệm với API xử lý và ứng dụng khách HTTP / 2 của Java 9 trong JShell .

Máy khách HTTP / 2

Máy khách HTTP / 2 là một dự án ấp trứng trong Java 9. Điều này có nghĩa là API chưa được hoàn thiện, vì vậy nó có một số phạm vi thay đổi trong các phiên bản trong tương lai. Những thay đổi rõ ràng nhất từ ​​Java 9 sang Java 10 sẽ là chuyển nó từ mô-đun jdk.incubator.httpclient sang mô-đun “http.client”, cùng với các thay đổi tên gói liên quan. Cần lưu ý điều này khi sử dụng API.

HTTP / 2 không hoạt động ngay lập tức trong JShell, nhưng nó ổn, vì nó cho phép chúng ta thấy Hệ thống mô-đun nền tảng Java (JPMS) đang hoạt động. Chúng tôi chỉ cần chuyển mô-đun httpclient vào JShell bằng cách sử dụng
–add-modules:

C:\jdk9TestGround>jshell -v --add-modules jdk.incubator.httpclient


Sau đó, chúng tôi nhập các thư viện HTTP:

jshell> import jdk.incubator.http.*;


Bây giờ chúng ta có thể gọi một trang web từ 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());


Tính năng thú vị nhất là việc sử dụng mẫu Builder để tạo HTTP Request. Điều này được định nghĩa trong HttpRequest.Builder , có thể được sử dụng để xây dựng các yêu cầu HttpClient phức tạp hơn bao gồm xác thực.

Cú pháp tương tự với cả Jetty HttpClientokhttp , đều tuân theo Http / 2. Nó chắc chắn đơn giản hơn nhiều so với cách tiếp cận cũ trong Java.

Các tính năng hữu ích khác của API này là:

  • Yêu cầu không đồng bộ : Điều này hữu ích hơn ví dụ trên, vì nó không chặn. Điều này được thực hiện thông qua phương thức HttpRequest.sendAsync .
  • WebSockets : Điều này được tạo thông qua  lớp WebSocket , lớp này có WebSocket.Builder của riêng nó . Tôi sẽ đề cập đến vấn đề này trong một bài đăng khác, vì nó rõ ràng hơn trên JShell.

API quy trình

Các Quy trình API đơn giản hoá xử lý thông tin truy nhập trong Java.

Xem xét các chi tiết về quy trình JShell hiện tại của tôi:

jshell> System.out.println(ProcessHandle.current().pid());
8580

jshell> 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]


Chúng tôi cũng có thể truy cập các quy trình và id hệ thống:

Hoặc thông tin:

Bây giờ chúng tôi có quyền truy cập vào các quy trình mà chúng tôi có thể giết quy trình chọn lọc - hãy giết Notepad:

Chúng tôi cũng có tùy chọn hủy bỏ cưỡng bức nếu việc hủy không giết được quá trình.

Các ví dụ trên cho thấy API quy trình hữu ích và đơn giản như thế nào để bắt đầu, kết thúc và giám sát các quy trình. Nó giải phóng chúng tôi khỏi việc dựa vào các thư viện của bên thứ ba để cung cấp quyền kiểm soát quy trình.

15 hữu ích 0 bình luận 17k xem chia sẻ

Có thể bạn quan tâm

loading