2

スタンドアロンの桟橋アプリケーションがあります。Jettyへのリクエストは、過去に期限切れヘッダーで処理されています。

Expires: Thu, 01 Jan 1970 00:00:00 GMT

これは、私が設定しているものとは異なる有効期限ヘッダーです。なぜこれが起こっているのか理解できませんか?サーブレットフィルター内で、(他のヘッダーとともに)有効期限を次のように設定しています。

public class AuthorisationFilter implements Filter {

public void init (FilterConfig config) throws ServletException {
    expires = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
    expires.setTimeZone(TimeZone.getTimeZone("GMT"));
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    // ....
    if(url.endsWith(".eot") || url.endsWith(".ttf") || url.endsWith(".woff")) {
        response.setHeader("Expires", expires.format(new Date(new Date().getTime()+(1000*86400))));
    } else if(url.endsWith(".css") || url.endsWith(".pdf") || url.endsWith(".png") || url.endsWith(".gif") || url.endsWith(".jpg") || url.endsWith(".ico")) {
        response.setHeader("Expires", expires.format(new Date(new Date().getTime()+(1000*500))));
    } else {
        response.setHeader("Expires", "Sat, 6 May 1995 1:00:00 GMT");
    }

chain.doFilter(request, response);
}

次のようにサーブレットフィルタを登録しています。

Server server = new Server(port);
ServletContextHandler context = new ServletContextHandler(server, "/", false, false);

FilterHolder f = new FilterHolder(new UrlFilter(jee));
context.addFilter(f, "/*", null);
f = new FilterHolder(new AuthorisationFilter(jee);
context.addFilter(f, "/*", null);
4

2 に答える 2

2

You might try to use the setDateHeader() method instead.

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#setDateHeader(java.lang.String,%20long)

于 2013-03-14T01:23:18.210 に答える
2

いくつかの一般的なアドバイス。

  1. HttpServletResponse.getOutputStream()またはHttpServletResponse.getWriter( )にアクセスする前に設定してください

  2. Expiresなどの日付ヘッダーを設定するときは、HttpServletResponse.setDateHeader(String name、long date)を使用します

于 2013-03-14T01:23:31.730 に答える