将Jersey REST服务中的图像返回到浏览器与使用servlet

时间:2017-10-09 20:50:01

标签: java image servlets jersey jax-rs

我很想知道将图像(* .jpg或* .gif)返回给客户端浏览器的最佳方法是什么:

  • 我想到的第一个想法是使用好的旧servlet。
  • 或者我也可以使用JAX-RS(Jersy)休息服务。

我需要为不同大小的图像创建一些方法,比如

  • 缩略图尺寸
  • 小尺寸
  • 正常尺寸
  • 原始尺寸
  • 自定义尺寸

如果我使用servlet,那么我可以为每个图像大小创建一个servlet,为自定义大小创建一个额外的servlet,我可以将所需的W和H值作为URL参数发送到servlet。

如果我使用REST,我可以使用方法创建一个类,对于自定义大小,我可以使用Path参数。

但性能呢? 哪种解决方案更好,为什么?

1 个答案:

答案 0 :(得分:0)

我认为这两种解决方案在性能方面都是相同的。然而,恕我直言,JAX-RS与Servlet不同,因为它是声明性的,而后者是程序性的。

我只使用@QueryParam代替@PathParam来获取一个端点。正如我认为你在问题中所说的那样,图像的大小更像是子资源的属性。

使用此解决方案(我已经实施过一次),您只有一种带注释的方法,使其非常易于阅读。例如:

@Path("images")
public interface ImageResource {
    enum Size {
        thumbnail, small, normal, original, custom
    }

    @GET
    @Path("/{id}")
    @Produces("image/jpeg")
    byte[] getImage(@PathParam("id") long id, @QueryParam("size") @DefaultValue("thumbnail") Size size, @QueryParam("width") Integer width, @QueryParam("height") Integer height);
}

然后,如果size == Size.custom检查宽度和高度都不为空。