2016-03-31 23 views
1

埋め込みJetty(v9)を設定して、特定のリソースファイルタイプに対してのみ特定のヘッダーを設定することは可能ですか?埋め込みJetty(v9)を設定して特定のリソースファイルに特定のヘッダーを設定するにはどうすればよいですか?

現時点では、私は静的リソースを処理するために特別なことをしていないので、おそらくJettyはそれを行うためのデフォルトのハンドラ設定を持っています。 htmlファイルのみにCache-Controlヘッダーを設定できるように、カスタムセットアップでデフォルトハンドラーを拡張または過負荷にすることはできますか?

私は、Apacheの設定の以下のビットに類似した何かを達成しようとしている:これはで達成できるのであれば、

public static void main(String[] args) throws Exception { 
    Server server = new Server(443); 
    WebAppContext webapp = new WebAppContext(); 
    webapp.setContextPath("/"); 
    webapp.setWar("war"); 
    server.setHandler(webapp); 
    ... 
    ... 
} 

実は:私の突堤セットアップで

<Files "*.html"> 
    Header set Cache-Control "public, max-age=900" 
</Files> 

を... jetty.xmlまたはその他の設定ファイルが必要です。

+0

私は最終的にうまく物事を説明しているようだ、私は必要なドキュメントを見つけました/jetty/documentation/current/rewrite-handler.html ...もし私がそれを働かせることができるなら、私は特定の解決法で自分自身で回答を投稿します – RTF

答えて

2

私は私のWebアプリケーションのための桟橋-env.xmlにこの設定を使用して欲しかったものを達成することができました:

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 

    <Call name="insertHandler"> 
     <Arg> 
     <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> 
     <Set name="rewriteRequestURI"><Property name="jetty.rewrite.rewriteRequestURI" deprecated="rewrite.rewriteRequestURI" default="true"/></Set> 
     <Set name="rewritePathInfo"><Property name="jetty.rewrite.rewritePathInfo" deprecated="rewrite.rewritePathInfo" default="false"/></Set> 
     <Set name="originalPathAttribute"><Property name="jetty.rewrite.originalPathAttribute" deprecated="rewrite.originalPathAttribute" default="requestedPath"/></Set> 

     <Call name="addRule"> 
      <Arg> 
      <New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule"> 
       <Set name="pattern">*.html</Set> 
       <Set name="name">Cache-Control</Set> 
       <Set name="value">Max-Age=900,public</Set> 
       <Set name="terminating">true</Set> 
      </New> 
      </Arg> 
     </Call> 

     </New> 
    </Arg> 
    </Call> 

</Configure> 
0

あなたのソリューションが正常に動作ば完全に埋め込まれた方法thatin得るために私を助けました。

私はjetty 9.2.19 org.eclipse.jetty.rewrite.handler.RewriteHandlerを使用しています。私は(ここでのCache-Control)は、特定のHTTPヘッダを設定するには、このRewriteHandlerで私ResourceHandlerをラップ:http://www.eclipse.org:

RewriteHandler rewriteHandler = new RewriteHandler(); 
rewriteHandler.addRule(new Rule() 
    { 
    @Override 
    public String matchAndApply(String target, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException 
    { 
    // you can check the target for its path or filetype or whatever 
    if((target.endsWith(".woff2")) || ... || (target.endsWith(".jpg"))) 
     { 
     httpServletResponse.setHeader("Cache-Control", "public, max-age=2592000"); 
     } 
    return null; 
    } 
    }); 
// set the RewriteHandler around the ResourceHandler 
rewriteHandler.setHandler(resource_handler); 
// set the RewriteHandler to the Webservers Handlerlist... 
関連する問題