Return 从 Jersey REST 服务到浏览器的图像与使用 servlet
Return an image from Jersey REST service to browser vs. use servlet
我很想知道将 return 图像(*.jpg 或 *.gif)发送到客户端浏览器的最佳方式是什么:
- 我想到的第一个想法是使用旧的 servlet。
- 或者我也可以使用 JAX-RS (Jersy) rest 服务。
我需要为不同大小的图像创建一些方法,例如
- 缩略图大小
- 小尺寸
- 正常尺寸
- 原始大小
- 自定义尺寸
如果我使用 servlet,那么我可以为每个图像尺寸创建一个 servlet,并为自定义尺寸创建一个额外的 servlet,我可以在其中将所需的 W 和 H 值作为 URL 参数发送给 servlet。
如果我使用 REST,我可以使用方法创建 class,对于自定义大小,我可以使用 Path 参数。
但是性能呢?
哪种解决方案更好,为什么?
我认为这两种解决方案在性能方面是等效的。但是,恕我直言,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
检查宽度和高度都不为空。
我很想知道将 return 图像(*.jpg 或 *.gif)发送到客户端浏览器的最佳方式是什么:
- 我想到的第一个想法是使用旧的 servlet。
- 或者我也可以使用 JAX-RS (Jersy) rest 服务。
我需要为不同大小的图像创建一些方法,例如
- 缩略图大小
- 小尺寸
- 正常尺寸
- 原始大小
- 自定义尺寸
如果我使用 servlet,那么我可以为每个图像尺寸创建一个 servlet,并为自定义尺寸创建一个额外的 servlet,我可以在其中将所需的 W 和 H 值作为 URL 参数发送给 servlet。
如果我使用 REST,我可以使用方法创建 class,对于自定义大小,我可以使用 Path 参数。
但是性能呢? 哪种解决方案更好,为什么?
我认为这两种解决方案在性能方面是等效的。但是,恕我直言,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
检查宽度和高度都不为空。