在编写RESTful
Web服务时,如果在客户端(当前是.NET胖客户端)上启用任何类型的缓存,则会遇到问题。默认情况下,Jersey不发送任何类型的缓存控制标头,因此客户端将自动缓存大多数页面(这似乎是有效的行为)。
我希望默认情况下,Jersey发送“ no-cache”的缓存控件,然后特别是响应将覆盖该缓存控件。
有没有办法用泽西岛做到这一点?
我发现RESTeasy可以使用@NoCache注释来指定整个类的设置,但是我找不到与Jersey相似的东西。
通过使用ResourceFilterFactory,使用Jersey可以轻松实现-
您可以创建附加到方法的任何自定义注释来设置缓存控制设置。应用程序初始化时,将为每个发现的资源方法调用ResourceFilterFactories-
在您的ResourceFilterFactory中,您可以检查该方法是否具有@CacheControlHeader批注(或任何您想调用的注解)-如果没有,只需返回添加“
no-cache”的响应过滤器”指令,否则应使用批注中的设置。这是如何执行此操作的示例:
public class CacheFilterFactory implements ResourceFilterFactory {
private static final List<ResourceFilter> NO_CACHE_FILTER = Collections.<ResourceFilter>singletonList(new CacheResponseFilter("no-cache"));
@Override
public List<ResourceFilter> create(AbstractMethod am) {
CacheControlHeader cch = am.getAnnotation(CacheControlHeader.class);
if (cch == null) {
return NO_CACHE_FILTER;
} else {
return Collections.<ResourceFilter>singletonList(new CacheResponseFilter(cch.value()));
}
}
private static class CacheResponseFilter implements ResourceFilter, ContainerResponseFilter {
private final String headerValue;
CacheResponseFilter(String headerValue) {
this.headerValue = headerValue;
}
@Override
public ContainerRequestFilter getRequestFilter() {
return null;
}
@Override
public ContainerResponseFilter getResponseFilter() {
return this;
}
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
// attache Cache Control header to each response based on the annotation value
response.getHttpHeaders().putSingle(HttpHeaders.CACHE_CONTROL, headerValue);
return response;
}
}
}
批注可以如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CacheControlHeader {
String value();
}
通过将以下初始化参数添加到web.xml中的Jersey servlet的定义,可以在您的应用程序中注册ResourceFilterFactory:
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>package.name.CacheFilterFactory</param-value>
</init-param>
问题内容: 我在Glassfish上有一个工作正常的JavaEE 6 Web应用程序,该应用程序已经具有JSF前端并具有其身份验证机制((使用基于CDI和注释的安全性),因此有一个登录屏幕,用户输入用户名密码,按登录按钮和Java EE身份验证过程开始。 现在,我想“还将”我的一些服务类公开为REST服务(我可能会使用Jersey),因此也可以从移动设备访问它。但是让我担心的是登录部分。 我将使用
我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?
使用 rax-plugin-pwa 插件,可以方便快捷的使用 Service Worker 控制缓存,以获得更快的加载速度。 首先,安装 build-plugin-rax-pwa 插件依赖: $ npm install build-plugin-rax-pwa --save 在工程配置 build.json 中添加 pwa 插件并配置缓存目标: { "plugins": [ [
我们已经配置nginx服务器添加缓存控制头到公共和到期时间到1个月。但是当我们从浏览器发出请求时,客户端正在添加缓存控制:无缓存头。正因为如此,它每次都是新鲜下载内容,而不是提供缓存版本。 我怎样才能缓存静态文件? 如果我从终端触发请求,服务器添加的缓存控制标头在响应标头中可见。
我有一个问题与超文本传输协议头-缓存控制:max-age=1234我的源有那个头,但任何方式发送请求和接收304.我需要可能我错过了什么?还有一个,源除了缓存控制: max-age=1234在"响应头"有缓存控制: max-age=0在"请求头",可能是它的影响。 我的一个资源响应标题,示例: > 远程地址:10.6.237.13:443请求请求方式:GET状态码:304未修改
问题内容: Hibernate使用的默认缓存的名称是什么?甚至有默认的缓存,还是必须添加缓存提供程序才能利用缓存? 我以为是EHCache,但我认为必须对其进行配置…默认情况下它不是“那里” … 问题答案: Hibernate已经通过持久上下文提供了一种称为 一级缓存 的缓存机制。它在 Session作用域内,默认情况下处于启用状态,无法关闭。 诸如EHCache之类的缓存提供程序提供了另一种称为