加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Jersey框架一:Jersey RESTful WebService框架简介

发布时间:2020-12-16 22:00:53 所属栏目:安全 来源:网络整理
导读:Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的支持 ? 开发RESTful WebService意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包

Jersey系列文章:

Jersey框架一:Jersey RESTful WebService框架简介

Jersey框架二:Jersey对JSON的支持

Jersey框架三:Jersey对HTTPS的支持

?

开发RESTful WebService意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包可用,这将是一个困难的任务

为了简化使用Java开发RESTful WebService及其客户端,一个轻量级的标准被提出:JAX-RS API

Jersey RESTful WebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RS API并且是一个JAX-RS(JSR 311和 JSR 339)的参考实现

Jersey不仅仅是一个JAX-RS的参考实现,Jersey提供自己的API,其API继承自JAX-RS,提供更多的特性和功能以进一步简化RESTful service和客户端的开发

Maven版本:3.1.0

Jersey版本:1.18

JDK版本:1.7.0_65

一,服务端

Maven配置如下:

[html]? view plain ?copy
  1. <project?xmlns="http://maven.apache.org/POM/4.0.0"???
  2. ????????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"???
  3. ????????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0???
  4. ????????????http://maven.apache.org/xsd/maven-4.0.0.xsd">??
  5. ????modelVersion>4.0.0</>??
  6. ????groupId>JERSEY_SERVERartifactIdversion>1.0dependencies ????????dependency ????????????>com.sun.jersey ????????????>jersey-server>1.18 ????????>jersey-grizzly2project>??

首先介绍几个注解:

@Path

用来为资源类或方法定义URI,当然除了静态URI也支持动态URI

copy
?

在CODE上查看代码片

派生到我的代码片

    @Path("{sub_path:[A-Z]*}")??

@GET

表明被注解的方法响应HTTP GET请求,@POST@PUT@DELETE同理

@Consumes

定义请求的媒体类型,如果不指定,则容器默认可接受任意媒体类型,容器负责确认被调用的方法可接受HTTP请求的媒体类型,否则返回415 Unsupported Media Type

方法级注解将覆盖类级注解

@Produces

定义响应媒体类型,如果不指定,则容器默认可接受任意媒体类型,容器负责确认被调用的方法可返回HTTP请求可以接受媒体类型,否则返回406 Not Acceptable

@QueryParam

copy
    package?com.sean;??
  1. ???
  2. import?java.io.IOException;??
  3. import?java.net.URI;??
  4. import?java.util.Iterator;??
  5. ??
  6. import?javax.ws.rs.Consumes;??
  7. import?javax.ws.rs.DefaultValue;??
  8. import?javax.ws.rs.GET;??
  9. import?javax.ws.rs.Path;??
  10. import?javax.ws.rs.PathParam;??
  11. import?javax.ws.rs.Produces;??
  12. import?javax.ws.rs.QueryParam;??
  13. import?javax.ws.rs.core.Context;??
  14. import?javax.ws.rs.core.HttpHeaders;??
  15. import?javax.ws.rs.core.MediaType;??
  16. import?javax.ws.rs.core.MultivaluedMap;??
  17. import?javax.ws.rs.core.Request;??
  18. import?javax.ws.rs.core.UriBuilder;??
  19. import?javax.ws.rs.core.UriInfo;??
  20. ??
  21. import?org.glassfish.grizzly.http.server.HttpServer;??
  22. import?com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;??
  23. import?com.sun.jersey.api.core.PackagesResourceConfig;??
  24. import?com.sun.jersey.api.core.ResourceConfig;??
  25. import?com.sun.jersey.spi.resource.Singleton;??
  26. @Singleton??
  27. @Path("service")???
  28. class?MyResource?{??
  29. ??????
  30. @Path("{sub_path:[a-zA-Z0-9]*}")??
  31. @Consumes({MediaType.TEXT_PLAIN,?MediaType.APPLICATION_JSON})??
  32. @Produces(MediaType.TEXT_PLAIN)??
  33. public?String?getResourceName(??
  34. ????????????@PathParam("sub_path")?String?resourceName,??
  35. ????????????@QueryParam("desc")?String?description,??
  36. @Context?Request?request,100); background-color:inherit">@Context?UriInfo?uriInfo,100); background-color:inherit">@Context?HttpHeaders?httpHeader)?{??
  37. ????????System.out.println(this.hashCode());??
  38. //??????将HTTP请求打印出来??
  39. ????????System.out.println("******?HTTP?request?******");??
  40. ????????StringBuilder?strBuilder?=?new?StringBuilder();??
  41. ????????strBuilder.append(request.getMethod()?+?"?");??
  42. ????????strBuilder.append(uriInfo.getRequestUri().toString()?+?"?");??
  43. ????????strBuilder.append("HTTP/1.1[rn]");??
  44. ????????System.out.println(strBuilder.toString());??
  45. ????????MultivaluedMap<String,?String>?headers?=?httpHeader.getRequestHeaders();??
  46. ????????Iterator<String>?iterator?=?headers.keySet().iterator();??
  47. ????????while(iterator.hasNext()){??
  48. ????????????String?headName?=?iterator.next();??
  49. ????????????System.out.println(headName?+?":"?+?headers.get(headName)?+?"[rn]");??
  50. ????????}??
  51. ????????System.out.println("[rn]");??
  52. ????????String?responseStr?=resourceName?+?"["?+?description?+?"]";??
  53. return?responseStr;??
  54. ????}??
  55. static?void?main(String[]?args)?{??
  56. ????????URI?uri?=?UriBuilder.fromUri("http://127.0.0.1").port(10000).build();??
  57. ????????ResourceConfig?rc?=?new?PackagesResourceConfig("com.sean");??
  58. try?{??
  59. ????????????HttpServer?server?=?GrizzlyServerFactory.createHttpServer(uri,?rc);??
  60. ????????????server.start();??
  61. ????????}?catch?(IllegalArgumentException?e)?{??
  62. ????????????e.printStackTrace();??
  63. catch?(NullPointerException?e)?{??
  64. catch?(IOException?e)?{??
  65. ????????????Thread.sleep(1000*1000);??
  66. ????????}?catch?(InterruptedException?e)?{??
  67. ????????????e.printStackTrace();??
  68. ????????}??
  69. 二,客户端

    copy

      ????????????????http://maven.apache.org/xsd/maven-4.0.0.xsd">JERSEY_CLIENT>??????????
    1. >jersey-client客户端程序如下:

      [plain]? copy
        二月?06,?2015?4:33:33?下午?com.sun.jersey.api.core.PackagesResourceConfig?init??
      1. INFO:?Scanning?for?root?resource?and?provider?classes?in?the?packages:??
      2. ??com.sean??
      3. 二月?06,?2015?4:33:33?下午?com.sun.jersey.api.core.ScanningResourceConfig?logClasses??
      4. INFO:?Root?resource?classes?found:??
      5. ??class?com.sean.Test??
      6. ??class?com.sean.MyResource??
      7. INFO:?No?provider?classes?found.??
      8. INFO:?Initiating?Jersey?application,?version?'Jersey:?1.18?11/22/2013?01:21?AM'??
      9. INFO:?Started?listener?bound?to?[127.0.0.1:10000]??
      10. INFO:?[HttpServer]?Started.??
      11. 1814260800??
      12. ******?HTTP?request?******??
      13. GET?http://127.0.0.1:10000/service/sean?desc=description?HTTP/1.1[rn]??
      14. accept:[text/plain][rn]??
      15. content-type:[text/plain][rn]??
      16. user-agent:[Java/1.7.0_65][rn]??
      17. host:[127.0.0.1:10000][rn]??
      18. connection:[keep-alive][rn]??
      19. [rn]??
      20. 1814260800??
      21. ******?HTTP?request?******??
      22. GET?http://127.0.0.1:10000/service/sean?desc=description?HTTP/1.1[rn]??
      23. auth:[123456][rn]??
      24. [rn]??

      客户端日志如下: