日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

restful web_泽西岛的RESTful Web服务

發布時間:2023/12/3 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 restful web_泽西岛的RESTful Web服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

restful web

我已經討論了有關體系結構考慮事項<< link >>的早期文章,以成為可在我的系統/機器上使用的分布式環境上的RESTful系統。 本文我們將討論如何基于REST體系結構考慮來構建Web服務。 本教程說明了如何使用Tomcat 6,Eclipse和Jersey JAX-RS(JSR 311)參考實現在Java中開發RESTful Web服務。

簡而言之,RESTful Web服務是使用HTTP on REST原理的機器之間的通信,它具有以下要點:

  • 每個資源代表唯一的URI,以通過HTTP協議進行通信
  • HTTP方法支持的每個資??源操作(POST,GET,PUT和DELETE)
  • JSON,XML和各種MIME類型(例如圖像,字節流等)支持的請求和響應。

JAX-RS

JAX-RS是基于注釋的API,用于在Java中基于HTTP實現RESTful Web服務。 本質上,類和方法用信息注釋,這些信息使運行時可以將它們公開為資源。 在考慮到URI,請求和接受的內容類型以及HTTP方法的情況下,實現JAX-RS的運行時在HTTP協議和Java類之間進行中介。

Jersey框架實現了JSR-RS(JSR-311)參考API。 除了Jersey之外,還有其他各種實現,例如Retlet,JBOSS RESTeasy,Apache CXF等。

球衣:

澤西島包含以下主要部分:

  • 核心服務器:要基于注釋構建RESTful Web服務,請包含諸如jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar之類的關鍵庫。
  • 核心客戶端:Jersey客戶端API可幫助您輕松與REST服務進行通信,包括libabry ersey-client.jar
  • JAXB支持:(在高級示例中使用)jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar
  • JSON支持:(在高級示例中使用)jersey-json.jar
  • 集成:Jersey還提供了可以輕松與Spring,Guice,Apache Abdera等集成的庫。

獲取工具

軟件 下載
Java JDK-6 http://www.oracle.com/
Eclipse –印度 http://www.eclipse.org/
Tomcat的Apache -6 http://tomcat.apache.org/
H2-數據庫 http://www.h2database.com/

注意 :您可以在此處下載完整的演示應用程序,包括H2和Jersey庫<link>

使用Jersey的RESTful Web服務實現

我們將為用戶管理構建一個小型應用程序,以對用戶進行CRUD操作。 然后,我們將使用列用戶名和密碼創建一個小的User表,并使用Jersey注釋對Web服務使用POJO類公開操作進行CRUD操作。

以下是開始RESTful Web服務開發之前的設計注意事項。

  • 資源:具有用戶名和密碼屬性的用戶
  • 資源類: UsersResource.java
  • URI: http:// localhost:8080 / UserManagement / users
  • 表示形式: XML

應用程序開發文件夾結構

我們的應用程序的目錄結構如下所示:

以下是所需的應用程序庫列表:

應用配置:

在開始開發之前,我們需要將Jersey servlet添加到web.xml中,以將整個請求定向到jersey,以進行資源標識和操作過程(POST,GET,PUT和DELETE)。

包含jersey servlet之后,Web.xml將如下所示

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>UserManagement</display-name><servlet><servlet-name>Jersey REST Service</servlet-name><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class><init-param><param-name>com.sun.jersey.config.property.packages</param-name><param-value>resource.com.users.java</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Jersey REST Service</servlet-name><url-pattern>/*</url-pattern></servlet-mapping> </web-app>

資源資源

資源是指可通過網絡尋址和操縱的任何東西。 Jersey資源是帶有@Path注釋的純Java對象(PO??JO),將由HTTP方法POST,GET,PUT和DELETE進行操縱。 資源還具有子資源。 在示例應用程序Users Users的UsersResource中,Java bean是Resources。 用戶是具有屬性名稱和密碼的簡單POJO

UsersResource.java @Path("/users") public class UsersResource implements IUsersResource{ @Context UriInfo uriInfo; @GET @Produces ("application/xml") public List<User> getUsersAll() { List<User> als=null; try { als= UserService.getInstance().getUserAll(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return als; }@POST @Consumes ("application/xml") @Produces ("application/xml") public User createUser(User user){ URI uri = uriInfo.getAbsolutePathBuilder().path(user.getUserName()).build(); Response res=Response.created(uri).build(); try { UserService.getInstance().CreateUser(user); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return user; }@Path("/user/{username}") @GET @Produces ("application/xml")public List<User> getUser(@PathParam("username") String username) { List<User> asl=null; try { asl= UserService.getInstance().getUser(username); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return asl; }

以下是對JAX-RS注釋的簡要說明

  • @Path:與根路徑結合的路徑提供URI來標識資源。 例如,在給定的示例URI中將為http:// localhost:8080 / UserManagement / users
  • @Path(“ / user / {username}”):我們也可以在方法上使用子路徑來公開子資源,此示例URI將為http:// localhost:8080 / UserManagement / users / user / john
  • @Context:上下文用于注入上下文對象,例如Request,Response,UriInfo,ServletContext等。
  • @PathParam:此批注與@Path一起使用,并與GET,POST,PUT和DELETE結合使用。 其他可用的注釋是@ FormParam,@ QueryParam等。
  • @Produces(“ application / xml”):支持多種MIME類型的響應。 在這種情況下,application / xml將是默認的MIME類型。
  • @Consumes(“ application / xml”):輸入請求有效負載將以xml格式發送。
  • @GET:由GET,POST,PUT和DELET方法之一操縱的資源通過HTTP標頭傳遞

JAXB – Java POJO XML綁定

澤西島支持JAXB,實習生將POJO轉換為XML,反之亦然。 為了使POJO具備支持XML的資格,我們必須聲明@XmlRootElement注釋,如下所示:

不要忘記在轉換過程中根據需要添加空的構造函數。

@XmlRootElement public class User { private String userName; private String userPasswd; public User(String userName, String userPasswd) { this.userName = userName; this.userPasswd = userPasswd; } public User() { super(); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPasswd() { return userPasswd; } public void setUserPasswd(String userPasswd) { this.userPasswd = userPasswd; } }

我們將在H2數據庫的User表中創建執行CRUD操作的服務類。

UserService.javapublic class UserService{ public static UserService userService = new UserService(); public static final String GET_USER="SELECT * FROM USER"; public static final String INSERT_USER="Insert into user "; public List<User> getUserAll() throws ClassNotFoundException, SQLException { List<User> ls = new ArrayList(); ls=DataServiceHelper.getInstance().executeQuery(GET_USER); return ls; }public List<User> getUser(String name) throws ClassNotFoundException, SQLException{ String SQL_WHERE_CAS=" where name='"+name+"'"; List<User> als=DataServiceHelper.getInstance().executeQuery(GET_USER+SQL_WHERE_CAS); return als; }public void CreateUser(User user) throws SQLException, ClassNotFoundException { String SQL_WHERE_CASE=" VALUES('" + user.getUserName() + "','" + user.getUserPasswd() + "')"; DataServiceHelper.getInstance().executeUpdateQuery(INSERT_USER+SQL_WHERE_CASE); } public static UserService getInstance() { return userService; } }

助手類

我們必須創建更多的類來與DB(在本例中為H2)進行交互并執行CRUD操作。

DaraServiceHelper.javapublic class DataServiceHelper { public static DataServiceHelper dataServiceHelper = null; private Connection con = null; DataSource dataSource = null; InitialContext initialContext = null; public static final String DB_URL = "jdbc:h2:tcp://localhost/~/test"; public static final String DRIVER_NAME = "org.h2.Driver"; /*** This method is used to create an object for the given DAO class name. */public Connection getConnection() throws ClassNotFoundException, SQLException { Class.forName(DRIVER_NAME); con = DriverManager.getConnection(DB_URL, "sa", ""); return con; }public void closeConnection() throws SQLException { if (isConnectionOpen()) { con.close(); con = null; } } public boolean isConnectionOpen() { return (con != null); }public static DataServiceHelper getInstance() { if (dataServiceHelper == null) { dataServiceHelper = new DataServiceHelper(); } return dataServiceHelper; }public void executeUpdateQuery(String query) throws SQLException, ClassNotFoundException { Connection con = getConnection(); Statement stmt = con.createStatement(); stmt.execute(query); closeConnection(); }public List<User> executeQuery(String query) throws ClassNotFoundException, SQLException { Connection con = getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); List<User> als = convertPojoList(rs); closeConnection(); return als; }private List<User> convertPojoList(ResultSet rs) throws SQLException { List<User> asl = new ArrayList<User>(); while (rs.next()) { User user = new User(rs.getString("name"), rs.getString("password")); asl.add(user); } return asl; }public static void main(String[] args) throws ClassNotFoundException, SQLException { String query = "Select * from user where name='nitin'"; List<User> als = DataServiceHelper.getInstance().executeQuery(query); System.out.println("List==>" + als); } }

注意:為簡單起見,我將所有代碼都包含在一個類中

澤西島客戶測試

澤西島提供客戶端來測試RESTful Web服務,它有助于與服務器進行通信并測試服務。 該庫是一個通用實現,可以與任何基于HTTP / HTTPS的Web服務配合使用。

public class UserResourceSample { public static final String USER_URI="http://localhost:8080/UserManagement/users"; public String testGetUsersAll() { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource resource = client.resource(ForumConstant.USER_URI); ClientResponse response = resource.type(MediaType.APPLICATION_XML).get( ClientResponse.class); String en = response.getEntity(String.class); return en; }public String testGetUsers() { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource resource = client.resource(ForumConstant.USER_URI); ClientResponse response = resource.type(MediaType.APPLICATION_XML).get( ClientResponse.class); String en = response.getEntity(String.class); return en; }public User testCreateUser() { User user = new User("John", "john@"); Client client = Client.create(); WebResource r = client.resource(ForumConstant.USER_URI); ClientResponse response = r.accept(MediaType.APPLICATION_XML).post( ClientResponse.class, user); return user; } }

使用瀏覽器運行

在Eclipse中運行Web應用程序,并在以下位置測試REST服務的可用性: http:// localhost:8080 / UserManagement / users&#8221;。 您應該看到用戶項目的XML表示形式:

對于子資源:

注意 :在運行應用程序之前,請不要忘記運行H2數據庫并將記錄插入到User表中

結論:

這個例子討論了Apache tomcat與Jersey的基本用法。 我們將在以后討論一些JAX-RS的高級用法。 您也可以將完整的代碼下載到此鏈接下面的<>

資源:

  • http://en.wikipedia.org/wiki/Representational_state_transfer
  • https://jersey.java.net/

參考: Tech My Talk博客上的JCG合作伙伴 Nitin Kumar提供的RESTful Webservices with Jersey 。

翻譯自: https://www.javacodegeeks.com/2013/07/restful-webservices-with-jersey.html

restful web

總結

以上是生活随笔為你收集整理的restful web_泽西岛的RESTful Web服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。