2016-03-31 26 views
1

是否可以配置嵌入式Jetty(v9)僅爲特定資源文件類型設置特定標頭。如何配置嵌入式Jetty(v9)爲特定資源文件設置特定標頭?

目前,我沒有做任何特殊的處理靜態資源,所以大概Jetty有一些默認的處理程序設置來做到這一點。是否有可能通過一些自定義設置來擴展或超載該默認處理程序,以便我可以僅爲html文件設置Cache-Control標題?

我試圖有所作爲類似Apache配置以下位:

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

...在我的碼頭設置:

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); 
    ... 
    ... 
} 

其實,如果這可以實現jetty.xml或其他配置文件,這將是更可取的。

+0

我終於找到了我需要的文檔,這似乎可以解釋的事情做好:http://www.eclipse.org /jetty/documentation/current/rewrite-handler.html ...如果我能得到它,我會用特定的解決方案自己發表一個答案 – RTF

回答

2

我能夠完成我想要使用碼頭-env.xml這個配置我的web應用程序:

<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。我總結我的ResourceHandler在這個RewriteHandler設置特定的HTTP頭文件(這裏的Cache-Control):

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... 
相關問題