【问题标题】:How to set expires headers in jetty server for static resources such as CSS, Javascript,images etc如何在码头服务器中为 CSS、Javascript、图像等静态资源设置过期标头
【发布时间】:2014-03-27 05:38:30
【问题描述】:

我看到有一个similar question 但找不到正确答案..

任何新的答案将不胜感激。

【问题讨论】:

    标签: java javascript servlets http-headers jetty


    【解决方案1】:

    试试这个:

    1. 定义一个添加响应头的过滤器:
    import com.google.common.collect.HashMultimap;
    import com.google.common.collect.Multimap;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * A filter that modifies a response.
     * <p>
     * Init-parameters:
     * <ul>
     * <li>headers: A comma-separated list of init-parameter names. Each init-parameter represents a
     * response header to set. Each header value may contain multiple comma-separated values.</li>
     * </ul>
     * Sample usage:
     * <pre>
     * {@code
     * FilterHolder responseFilter = dynamicResources.addFilter(ResponseFilter.class, "*.js",
     *   EnumSet.allOf(DispatcherType.class));
     * responseFilter.setInitParameter("headers", "Cache-Control");
     * responseFilter.setInitParameter("Cache-Control", "max-age=60");
     * }
     * </pre>
     *
     * @author Gili Tzabari
     */
    public class ResponseFilter implements Filter
    {
        private final Multimap<String, String> headers = HashMultimap.create();
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException
        {
            String headerNames = filterConfig.getInitParameter("headers");
            if (headerNames == null)
                return;
            for (String name : headerNames.split(","))
            {
                String values = filterConfig.getInitParameter(name);
                if (values == null)
                    continue;
                for (String value : values.split(","))
                    headers.put(name, value);
            }
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException
        {
            if (response instanceof HttpServletResponse)
            {
                HttpServletResponse httpResponse = (HttpServletResponse) response;
                for (String key : headers.keySet())
                    for (String value : headers.get(key))
                        httpResponse.addHeader(key, value);
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy()
        {
        }
    }
    
    1. 配置 Jetty 以将缓存标头注入特定的 URL 模式:
    FilterHolder responseFilter = dynamicResources.addFilter(ResponseFilter.class, "*.js",
        EnumSet.allOf(DispatcherType.class));
    responseFilter.setInitParameter("headers", "Cache-Control");
    responseFilter.setInitParameter("Cache-Control", "max-age=60");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2011-07-30
      • 2017-06-15
      相关资源
      最近更新 更多