<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java Servlet RESTFul 客戶端 > 原文: [http://zetcode.com/articles/javaservletrestclient/](http://zetcode.com/articles/javaservletrestclient/) 在 Java Servlet RESTFul 客戶端教程中,我們使用 JAX-RS 在 Java Servlet 中創建 RESTFul 客戶端。 用于 RESTful Web 服務的 Java API(JAX-RS)是 Java API 規范,它提供了根據代表性狀態轉移(REST)架構模式創建 Web 服務的支持。 Jersey 是 Java RESTful Web 服務框架和 JAX-RS 參考實現。 Servlet 是 Java 類,可響應特定類型的網絡請求-最常見的是 HTTP 請求。 Java servlet 用于創建 Web 應用。 它們在 servlet 容器(例如 Tomcat 或 Jetty)中運行。 現代 Java Web 開發使用在 servlet 之上構建的框架。 ## Java Servlet 應用 以下 Web 應用向`api.randomuser.me`站點創建一個請求,該站點是一個隨機用戶生成器。 Java servlet 使用`ClientBuilder`創建一個`Client`,這是用于構建和執行客戶端請求以使用返回的響應的流暢 API 的主要入口點。 ```java $ tree . ├── nb-configuration.xml ├── pom.xml └── src ├── main │ ├── java │ │?? └── com │ │?? └── zetcode │ │?? ├── model │ │?? │ ├── Location.java │ │?? │ ├── Name.java │ │?? │ ├── Person.java │ │?? │ └── PersonsList.java │ │?? ├── service │ │?? │?? └── PersonService.java │ │?? └── web │ │?? └── MyServlet.java │ ├── resources │ └── webapp │ ├── index.html │ ├── META-INF │ │?? └── context.xml │ ├── show.jsp │ └── WEB-INF └── test └── java ``` 這是項目結構。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>JavaServletRestClient</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>JavaServletRestClient</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.25.1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.22</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project> ``` 這是 Maven POM 文件。 我們有四個工件:用于 servlet 的`javax.servlet-api`,用于標準 JSP 標簽庫的`jstl`,用于 RESTFul 核心客戶端實現的`jersey-client`和用于 JSON / Java Bean 數據綁定的`jersey-media-json-jackson`。 `context.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <Context path="/JavaServletRestClient"/> ``` 在 Tomcat `context.xml`文件中,我們定義了上下文路徑。 它是 Web 應用的名稱。 在該應用中,我們有三個 bean。 這些 bean 將被響應中的數據填充。 `Location.java` ```java package com.zetcode.model; public class Location { private String street; private String city; private String state; private String postcode; public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getPostcode() { return postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(street).append(" ") .append(city).append(" ") .append(state).append(" ") .append(postcode); return sb.toString(); } } ``` `Location`存儲用戶的地址。 `Name.java` ```java package com.zetcode.model; public class Name { private String first; private String last; private String title; public String getFirst() { return first; } public void setFirst(String firstName) { first = firstName; } public String getLast() { return last; } public void setLast(String lastName) { last = lastName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(title).append(" ").append(first) .append(" ").append(last); return sb.toString(); } } ``` `Name`存儲用戶名詳細信息。 `Person.java` ```java package com.zetcode.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Person { private Name name; private Location location; private String email; private String gender; public void setName(Name name) { this.name = name; } public Name getName() { return name; } public Location getLocation() { return location; } public void setLocation(Location location) { this.location = location; } public void setEmail(String email) { this.email = email; } public String getEmail() { return email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Name: ").append(name) .append("Address: ").append(location) .append("Email ").append(email) .append("Gender: ").append(gender); return sb.toString(); } } ``` `Person`類存儲有關用戶的數據,包括姓名,地址,電子郵件和性別。 ```java @JsonIgnoreProperties(ignoreUnknown = true) ``` 使用`@JsonIgnoreProperties`批注,我們告訴 Jackson 忽略`Person`中未列出的屬性。 `PersonsList.java` ```java package com.zetcode.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import java.util.List; @JsonIgnoreProperties(ignoreUnknown = true) public class PersonsList { List<Person> results; public List<Person> getResults() { return results; } public void setResults(List<Person> result) { results = result; } } ``` 這是`Person`對象的列表。 Web 服務使用數據填充此列表。 `MyServlet.java` ```java package com.zetcode.web; import com.zetcode.model.Person; import com.zetcode.service.PersonService; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"}) public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); List<Person> people = PersonService.fetchPeople(0, 50); request.setAttribute("people", people); request.getRequestDispatcher("show.jsp").forward(request, response); } } ``` `MyServlet` Servlet 調用`PersonService.fetchPeople()`,它返回`Person`對象的列表。 該列表將作為屬性存儲,并且處理將分派到`show.jsp`頁面。 JSP 頁面呈現`Person`對象的列表。 `PersonService.java` ```java package com.zetcode.service; import com.zetcode.model.Person; import com.zetcode.model.PersonsList; import java.util.List; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; public class PersonService { private static WebTarget resource = ClientBuilder.newBuilder() .build().target("https://api.randomuser.me/"); public static List<Person> fetchPeople(int offset, int num) { PersonsList res = resource.queryParam("seed", 1) .queryParam("results", num).queryParam("page", 1) .request(MediaType.APPLICATION_JSON).get(PersonsList.class); return res.getResults(); } } ``` `PersonService`包含用于在`api.randomuser.me` Web 服務上執行查詢的`fetchPeople()`方法。 該服務隨機返回用戶對象。 ```java private static WebTarget resource = ClientBuilder.newBuilder() .build().target("https://api.randomuser.me/"); ``` 使用`ClientBuilder`創建一個 Web 資源目標。 `api.randomuser.me`網站隨機返回用戶列表。 ```java public static List<Person> fetchPeople(int offset, int num) { PersonsList res = resource.queryParam("seed", 1) .queryParam("results", num).queryParam("page", 1) .request(MediaType.APPLICATION_JSON).get(PersonsList.class); return res.getResults(); } ``` 我們向網絡資源發送查詢; 數據存儲在`PersonsList`中。 `index.html` ```java <!DOCTYPE html> <html> <head> <title>Home Page</title> <meta charset="UTF-8"> </head> <body> <a href="MyServlet">List people</a> </body> </html> ``` 這是主頁。 它包含一個調用`MyServlet`的鏈接。 `show.jsp` ```java <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Show people</title> </head> <body> <table> <thead> <tr> <th>Title</th> <th>First name</th> <th>Last name</th> <th>Street</th> <th>City</th> <th>State</th> <th>Postcode</th> <th>Email</th> <th>Gender</th> </tr> </thead> <tbody> <c:forEach var="per" items="${people}"> <tr> <td><c:out value="${per.name.title}"/></td> <td><c:out value="${per.name.first}"/></td> <td><c:out value="${per.name.last}"/></td> <td><c:out value="${per.location.street}"/></td> <td><c:out value="${per.location.city}"/></td> <td><c:out value="${per.location.state}"/></td> <td><c:out value="${per.location.postcode}"/></td> <td><c:out value="${per.email}"/></td> <td><c:out value="${per.gender}"/></td> </tr> </c:forEach> </tbody> </table> </body> </html> ``` `show.jsp`頁面使用 JSTL 庫中的`c:forEach`和`c:out`標簽在 HTML 表中顯示數據。 在本教程中,我們向 Web 服務創建了一個 JAX-RS 客戶端請求,該請求會隨機生成用戶。 該請求是從 Java Servlet 發送的。 您可能也對以下相關教程感興趣: [Java servlet Log4j 教程](/articles/javaservletlog4j/), [Java servlet JSON 教程](/articles/javaservletjson/), [Java Servlet PDF 教程](/articles/javaservletpdf/), [Java servlet 復選框教程](/articles/javaservletcheckbox/), [Java servlet 圖像教程](/articles/javaservletimage/), [Java Servlet HTTP 標頭](/articles/javaservlethttpheaders/)或 [Java 教程](/lang/java/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看