java jersey(java官方网站下载java)

各位老铁们好,相信很多人对java jersey都不是特别的了解,因此呢,今天就来为大家分享下关于java jersey以及java官方网站下载java的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

随着互联网的飞速发展,越来越多的企业开始重视Web服务的开发。而在众多的Web服务框架中,Java Jersey无疑是一个备受关注的存在。它是一个开源的、高性能的、功能丰富的RESTful Web服务框架,可以帮助开发者轻松构建高质量的Web服务。本文将深入探讨Java Jersey的各个方面,带你全面了解这个强大的框架。

一、Java Jersey简介

1. 什么是Java Jersey

Java Jersey是一个开源的RESTful Web服务框架,它遵循JAX-RS 2.0规范。JAX-RS 2.0是Java API for RESTful Web Services的第二个版本,它提供了一组丰富的API,用于构建RESTful Web服务。

2. Java Jersey的特点

  • 高性能:Java Jersey在性能方面表现出色,可以轻松处理大量并发请求。
  • 易于使用:Java Jersey提供了一组简单的API,使得开发者可以轻松构建RESTful Web服务。
  • 功能丰富:Java Jersey支持多种协议,如HTTP、HTTPS、WebSockets等,并且支持多种数据格式,如JSON、XML、CSV等。
  • 高度可扩展:Java Jersey支持自定义组件,可以满足各种需求。

二、Java Jersey的核心组件

1. JAX-RS 2.0规范

JAX-RS 2.0规范是Java Jersey的基础,它定义了RESTful Web服务的基本概念和API。

2. Jersey容器

Jersey容器负责处理客户端请求并返回响应。它提供了多种容器实现,如Servlet容器、Jetty容器等。

3. Jersey客户端

Jersey客户端用于向RESTful Web服务发送请求并接收响应。它支持多种编程模型,如JAX-RS 2.0客户端API、JAX-RS 1.1客户端API等。

4. Jersey服务器端

Jersey服务器端负责处理客户端请求并返回响应。它支持多种编程模型,如JAX-RS 2.0服务器端API、JAX-RS 1.1服务器端API等。

三、Java Jersey的安装与配置

1. 安装

Java Jersey可以通过Maven或Gradle进行安装。以下是一个简单的Maven依赖示例:

“`xml

org.glassfish.jersey.containers

jersey-container-servlet

2.31

org.glassfish.jersey.media

jersey-media-json-jackson

2.31

“`

2. 配置

配置Java Jersey主要包括以下步骤:

  • 配置Servlet:在web.xml中配置Jersey Servlet。
  • 配置资源类:将资源类注册到Jersey容器中。
  • 配置JSON处理器:配置JSON处理器,以便处理JSON数据。

四、Java Jersey的实战案例

1. 创建一个简单的RESTful Web服务

以下是一个简单的RESTful Web服务的示例:

“`java

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.Produces;

import javax.ws.rs.core.MediaType;

@Path(“

如何在java REST API中用GZip和Jersey压缩相应

  有许多情景当你的REST api提供的相应是非常长的,并且我们都知道传递速度和贷款在移动设备/网络上是多重要。当开发支持REST apis的移动app的时候,我认为首要的性能最优化的点就是需要解决。猜猜是什么?因为响应式文本,因此我们能压缩这些文本。而且随着当前的只能手机和平板的能力,在客户端解压文本应该不是个大问题…因此在这篇文章中,如果你使用java的Jersey构建它,我将介绍你怎么能有选择性的压缩REST API响应,这个Jersey事JAX-RS的映射实现(还有更多)…

  1.Jersey过滤器和拦截器

  啊,感谢Jersey的强大的过滤器和拦截器特性,这个实现是相当容易的。然后过滤器是主要打算来维护像HTTP headers,URIs和/或HTTP methods的request和response的参数,拦截器是维护实体,通过维护实体的输入/输出流。

  但是对于压缩将使用一个GZip WriterInterceptor,一个写拦截器被用于这种情况,在那个类里,实体被写到”wire”,当在这种情况中时,它在服务器这边,这就意味着输出一个响应实体。

  1.1GZip Writer Interceptor

  那让我们来看看我们的GZip Writer Interceptor吧:

  GZip Writer Interceptor

  package org.codingpedia.demo.rest.interceptors;

  import java.io.IOException;

  import java.io.OutputStream;

  import java.util.zip.GZIPOutputStream;

  import javax.ws.rs.WebApplicationException;

  import javax.ws.rs.core.MultivaluedMap;

  import javax.ws.rs.ext.WriterInterceptor;

  import javax.ws.rs.ext.WriterInterceptorContext;

  @Provider

  @Compress

  public class GZIPWriterInterceptor implements WriterInterceptor{

  @Override

  public void aroundWriteTo(WriterInterceptorContext context)

  throws IOException, WebApplicationException{

  MultivaluedMap<String,Object> headers= context.getHeaders();

  headers.add(“Content-Encoding”,”gzip”);

  final OutputStream outputStream= context.getOutputStream();

  context.setOutputStream(new GZIPOutputStream(outputStream));

  context.proceed();

  }

  }

  注意:

  它实现了WriterInterceptor,这是一个写拦截器的消息体的接口,这个接口包装调用javax.ws.rs.ext.MessageBodyWriter.writeTo

  供应商实现WriterInterceptor协议必须要么以编程方式注册进一个JAX-RS运行环境,要么必须用@Provider注解来注解在一个提供商扫描语句期间自动的被JAX-RS运行环境发现。

  @Compress是绑定注解的名称,在接下来的段落中我们将更详细的讨论它

  “拦截器从WriterInterceptorContext中获得一个输出流并且设置一个新的用原始的GZIP包装器包装的输出流。在所有的拦截器被执行以后,输出流最终设置WriterInterceptorContext将用于序列化实体。在上面的例子中,实体字节将被写到GZIPOutputStream中,这个类将压缩流数据,然后把他们写到原始输出流。原始流总是把数据写到wire中。当拦截器被用在服务器上时,原始输出流会把数据写到底层服务器容器的流中,然后发送响应给客户端。”

  “重载方法aroundWriteTo()获取WriterInterceptorContextz作为参数。这个上下文包括请求头参数getters和setters,请求属性,实体,实体流和其它属性;当你压缩你的响应时,你应当设置'Content-Encoding'头位gzip”

  1.2压缩注解

  过滤器和拦截器能被绑定名字。名称绑定是一种概念,这种概念就是允许告诉一个JAX-RS的运行时,一个只为特定资源方法的特定的过滤器或者拦截器将被执行。当一个过滤器或者拦截器只对一些特定的资源方法限制,那我们就认为它是名称绑定。过滤器和拦截器没有这样的限制就被称作global。在我们的例子中我们已经构建了@Compress注解:

  Compress annotation

  package org.codingpedia.demo.rest.interceptors;

  import java.lang.annotation.Retention;

  import java.lang.annotation.RetentionPolicy;

  import javax.ws.rs.NameBinding;

  //@Compress annotation is the name binding annotation

  @NameBinding

  @Retention(RetentionPolicy.RUNTIME)

  public@interface Compress{}

  而且用它来标记在资源上的方法,这个方法应该是被压缩的(eg:当GET-ing的时候,所有的博客用PodcastsResource)

  @Compress annotation在资源方法上的使用

  @Component

  @Path(“/podcasts”)

  public class PodcastsResource{

  @Autowired

  private PodcastService podcastService;

  ………………………

  /*

  ************************************ READ***********************************

  */

  /**

  * Returns all resources(podcasts) from the database

  *

  *@return

  *@throws IOException

  *@throws JsonMappingException

  *@throws JsonGenerationException

  *@throws AppException

  */

  @GET

  @Compress

  @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

  public List<Podcast> getPodcasts(

  @QueryParam(“orderByInsertionDate”) String orderByInsertionDate,

  @QueryParam(“numberDaysToLookBack”) Integer numberDaysToLookBack)

  throws IOException,AppException{

  List<Podcast> podcasts= podcastService.getPodcasts(

  orderByInsertionDate, numberDaysToLookBack);

  return podcasts;

  }

  ………………………

  }

  2.测试

  2.1SOAPui

  好了,如果你正在用SOAPui测试,你能使用下面的请求违反PodcastsResource

  Reqest:

  请求例子:

  GET HTTP/1.1

  Accept-Encoding: gzip,deflate

  Accept: application/json, application/xml

  Host: localhost:8888

  Connection: Keep-Alive

  User-Agent: Apache-HttpClient/4.1.1(java 1.5)

  Response:

  被压缩的json响应,通过SOAPui自动的解压缩

  HTTP/1.1 200 OK

  Content-Type: application/json

  Content-Encoding: gzip

  Content-Length: 409

  Server: Jetty(9.0.7.v20131107)

  [

  {

  ”id”: 2,

  ”title”:”Quarks& Co- zum Mitnehmen”,

  ”linkOnPodcastpedia”:””,

  ”feed”:””,

  ”description”:”Quarks& Co: Das Wissenschaftsmagazin”,

  ”insertionDate”:”2014-10-29T10:46:13.00+0100″

  },

  {

  ”id”: 1,

  ”title”:”- The Naked Scientists Podcast- Stripping Down Science”,

  ”linkOnPodcastpedia”:””,

  ”feed”:”feed_placeholder”,

  ”description”:”The Naked Scientists flagship science show brings you a lighthearted look at the latest scientific breakthroughs, interviews with the world top scientists, answers to your science questions and science experiments to try at home.”,

  ”insertionDate”:”2014-10-29T10:46:02.00+0100″

  }

  ]

  SOAPui接受Content-type:gzip头,我们在GZIPWriterIntercepter中添加了并且自动的解压了响应并且用人眼可读的方式展示出来。

  好了,就这些了。你已经了解了Jersey如何让它直接压缩REST api响应了。

java有哪些好用的REST框架

1Dropwizard

Dropwizard提供了稳定成熟的Java库,并封装成一个简单的轻量级的包。

Dropwizard介于框架和库之间。它提供了一个开发web应用程序的全部所需。由于内置模块化,一个应用程序可以保持小而精干的特点,减少开发和维护的时间,减少负担。

Dropwizard使用已有的 Jetty HTTP库,嵌入到你的项目中,无需外部的server。所有的Dropwizard项目都有一个 main方法来管理内建的 HTTP server.

2 Jersey

Jersey RESTful框架是开源的RESTful框架,实现了JAX-RS(JSR 311& JSR 339)规范。它扩展了JAX-RS参考实现,提供了更多的特性和工具,可以进一步地简化 RESTful service和 client开发。尽管相对年轻,它已经是一个产品级的 RESTful service和 client框架。

3 Ninja Web Framework

Ninja Web Framework是全栈的 java web framework。稳定,快速,可靠,产品级.

它提供了开发,测试,发布,维护 RESTful web应用的一切(Servlets, Guice, JPA, Flyway migrations, Maven, etc.).

就像 DropWizzard, Ninja Web Framework是一个集成的软件栈。你不必建立你自己的,只需使用 Maven archetype生成一个新的项目,导入到IDE中就可以开始编码了。

4

Play Framework

使用Play Framework很容易地创建,构建和发布 web应用程序,支持 Java& Scala。它使用Akka,基于一个轻量级的无状态的架构。它应该应用于大规模地低CPU和内存消耗的应用。

5

Spark Framework

不要和 Apache的大数据框架 Spark弄混,这里的 Spark框架是一个轻量级的 Java web框架,用来进行快速的开发(50% Spark用户使用 Spark创建 REST APIs)。它受 Ruby框架 Sinatra启发。

它有一个不到1M的最小化的内核,提供了所有基本的特性,用来构建 RESTful或者传统的 web应用程序。

java框架有哪些轻量级类型

轻量级 Java框架主要包括 Spark Java、Jersey、Dropwizard、Javalin和 Ratpack,它们以简洁性、易用性和高性能为特点,适用于小型项目或简化开发场景。以下是具体介绍:

Spark Java

特点:基于 MVC模式的微框架,以极简主义和易用性著称,适合快速开发 REST API或小型 Web应用。

核心功能:内置路由、模板引擎支持(如 FreeMarker、Thymeleaf)、静态文件服务。

示例场景:创建简单的 REST API,如返回字符串响应或 JSON数据。

代码示例:import spark.Spark;import spark.Route;public class HelloSpark{public static void main(String[] args){Spark.get("/",(req, res)->"Hello, Spark!");}}

Jersey

特点:基于 JAX-RS规范的 RESTful Web服务框架,通过注解驱动开发,简化 API实现。

核心功能:支持多种数据格式(JSON、XML)、自动内容协商、异步请求处理。

示例场景:构建符合 REST标准的 Web服务,如返回 JSON格式的响应。

代码示例:import javax.ws.rs.*;@Path("/hello")public class HelloJersey{@GET@Produces("application/json")public String hello(){return"{"message":"Hello, Jersey!"}";}}

Dropwizard

特点:高度优化的微服务框架,集成性能监控、配置管理和安全性,适合生产环境。

核心功能:内置 Metrics指标库、日志系统(Logback)、健康检查接口。

示例场景:开发需要监控和可操作性的微服务,如记录请求指标。

代码示例:import io.dropwizard.Application;public class HelloDropwizard extends Application<Configuration>{public static void main(String[] args) throws Exception{new HelloDropwizard().run(args);}@Overridepublic void run(Configuration config, Environment env){env.jersey().register(new HelloEndpoint());}}

Javalin

特点:轻量级 Web框架,支持 Java和 Kotlin,以简单性和可扩展性为核心。

核心功能:WebSocket支持、异步请求处理、灵活的中间件机制。

示例场景:快速搭建 Web应用或 API服务,如返回动态内容。

代码示例:import io.javalin.Javalin;public class HelloJavalin{public static void main(String[] args){Javalin app= Javalin.create().start(8080);app.get("/", ctx-> ctx.result("Hello, Javalin!"));}}

Ratpack

特点:基于 Netty的异步微框架,强调高性能和可扩展性,支持反应式编程。

核心功能:WebSockets、事件驱动编程、非阻塞 I/O操作。

示例场景:开发高并发异步服务,如实时数据推送。

代码示例:import ratpack.server.RatpackServer;public class HelloRatpack{public static void main(String[] args){RatpackServer.start(server-> server.handlers(ctx-> ctx.render("Hello, Ratpack!")));}}

选择建议:

简单 REST API/Web应用:优先选择 Spark Java或 Javalin,因其学习曲线平缓且代码简洁。标准化 REST服务:使用 Jersey,尤其需兼容 JAX-RS规范时。高性能微服务:考虑 Dropwizard(集成监控)或 Ratpack(异步处理)。项目规模:小型项目推荐 Spark Java/Javalin;中大型项目可结合 Dropwizard或 Ratpack的扩展能力。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享