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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

restful web_泽西岛的RESTful Web服务

發(fā)布時(shí)間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 restful web_泽西岛的RESTful Web服务 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

restful web

我已經(jīng)討論了有關(guān)體系結(jié)構(gòu)考慮事項(xiàng)<< link >>的早期文章,以成為可在我的系統(tǒng)/機(jī)器上使用的分布式環(huán)境上的RESTful系統(tǒng)。 本文我們將討論如何基于REST體系結(jié)構(gòu)考慮來(lái)構(gòu)建Web服務(wù)。 本教程說(shuō)明了如何使用Tomcat 6,Eclipse和Jersey JAX-RS(JSR 311)參考實(shí)現(xiàn)在Java中開(kāi)發(fā)RESTful Web服務(wù)。

簡(jiǎn)而言之,RESTful Web服務(wù)是使用HTTP on REST原理的機(jī)器之間的通信,它具有以下要點(diǎn):

  • 每個(gè)資源代表唯一的URI,以通過(guò)HTTP協(xié)議進(jìn)行通信
  • HTTP方法支持的每個(gè)資??源操作(POST,GET,PUT和DELETE)
  • JSON,XML和各種MIME類型(例如圖像,字節(jié)流等)支持的請(qǐng)求和響應(yīng)。

JAX-RS

JAX-RS是基于注釋的API,用于在Java中基于HTTP實(shí)現(xiàn)RESTful Web服務(wù)。 本質(zhì)上,類和方法用信息注釋,這些信息使運(yùn)行時(shí)可以將它們公開(kāi)為資源。 在考慮到URI,請(qǐng)求和接受的內(nèi)容類型以及HTTP方法的情況下,實(shí)現(xiàn)JAX-RS的運(yùn)行時(shí)在HTTP協(xié)議和Java類之間進(jìn)行中介。

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

球衣:

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

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

獲取工具

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

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

使用Jersey的RESTful Web服務(wù)實(shí)現(xiàn)

我們將為用戶管理構(gòu)建一個(gè)小型應(yīng)用程序,以對(duì)用戶進(jìn)行CRUD操作。 然后,我們將使用列用戶名和密碼創(chuàng)建一個(gè)小的User表,并使用Jersey注釋對(duì)Web服務(wù)使用POJO類公開(kāi)操作進(jìn)行CRUD操作。

以下是開(kāi)始RESTful Web服務(wù)開(kāi)發(fā)之前的設(shè)計(jì)注意事項(xiàng)。

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

應(yīng)用程序開(kāi)發(fā)文件夾結(jié)構(gòu)

我們的應(yīng)用程序的目錄結(jié)構(gòu)如下所示:

以下是所需的應(yīng)用程序庫(kù)列表:

應(yīng)用配置:

在開(kāi)始開(kāi)發(fā)之前,我們需要將Jersey servlet添加到web.xml中,以將整個(gè)請(qǐng)求定向到j(luò)ersey,以進(jìn)行資源標(biāo)識(shí)和操作過(guò)程(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>

資源資源

資源是指可通過(guò)網(wǎng)絡(luò)尋址和操縱的任何東西。 Jersey資源是帶有@Path注釋的純Java對(duì)象(PO??JO),將由HTTP方法POST,GET,PUT和DELETE進(jìn)行操縱。 資源還具有子資源。 在示例應(yīng)用程序Users Users的UsersResource中,Java bean是Resources。 用戶是具有屬性名稱和密碼的簡(jiǎn)單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; }

以下是對(duì)JAX-RS注釋的簡(jiǎn)要說(shuō)明

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

JAXB – Java POJO XML綁定

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

不要忘記在轉(zhuǎn)換過(guò)程中根據(jù)需要添加空的構(gòu)造函數(shù)。

@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數(shù)據(jù)庫(kù)的User表中創(chuàng)建執(zhí)行CRUD操作的服務(wù)類。

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; } }

助手類

我們必須創(chuàng)建更多的類來(lái)與DB(在本例中為H2)進(jìn)行交互并執(zhí)行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); } }

注意:為簡(jiǎn)單起見(jiàn),我將所有代碼都包含在一個(gè)類中

澤西島客戶測(cè)試

澤西島提供客戶端來(lái)測(cè)試RESTful Web服務(wù),它有助于與服務(wù)器進(jìn)行通信并測(cè)試服務(wù)。 該庫(kù)是一個(gè)通用實(shí)現(xiàn),可以與任何基于HTTP / HTTPS的Web服務(wù)配合使用。

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; } }

使用瀏覽器運(yùn)行

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

對(duì)于子資源:

注意 :在運(yùn)行應(yīng)用程序之前,請(qǐng)不要忘記運(yùn)行H2數(shù)據(jù)庫(kù)并將記錄插入到User表中

結(jié)論:

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

資源:

  • 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

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。