2012-05-16 58 views
0

昨天我問了this的問題,並得到了一些非常好的反饋。總結我的情況,我試圖添加緩存 - 禁止HTTP響應頭到我的Spring MVC Web應用程序(我意外繼承的項目)。Spring MVC如何處理1頁應用程序的標題?

所以,每個答案-ER的(並且最終,@ Bozho的)建議,我已將此添加到我的Spring配置文件:

<mvc:annotation-driven/> 
<mvc:interceptors> 
    <bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
     <property name="cacheSeconds" value="-1"/> 
     <property name="useExpiresHeader" value="true"/> 
     <property name="useCacheControlHeader" value="true"/> 
     <property name="useCacheControlNoStore" value="true"/> 
    </bean> 
</mvc:interceptors> 

我重新建造我的應用程序在本地,而在Firefox中打開它所以我可以使用Firebug來測試返回HTTP響應的頭文件。

對我來說不幸的是,原始開發人員的目標是使其成爲一個「1頁的Web應用程序」,每個實際的JSP頁面有大約40多個AJAX調用。

我不僅不看到我要找的Cache-ControlExpires等,這些40 + AJAX請求的頭,但我擔心,因爲有每個JSP頁面超過1個AJAX請求,Spring攔截器不知道將哪些AJAX調用添加到頭文件中。我沒有看到任何錯誤消息或日誌記錄輸出來表明Spring不喜歡我的配置等。一切似乎都很好......它只是不工作!

  • 我對此配置有誤嗎?如果不是,那麼爲什麼這個不起作用的原因是什麼(爲什麼攔截器沒有踢入)?
  • 做多個AJAX調用會導致Spring MVC請求攔截器行爲異常嗎?

在此先感謝您的幫助!

+0

這仍然是一個問題 - 沒有任何人有什麼建議嗎? – IAmYourFaja

回答

0

當涉及到XML配置時,Spring可能會非常挑剔,並且添加從網上找到的代碼片段往往不起作用,即使是最微不足道的示例。不知道更多關於你的配置,很難重現這一點,並看到你的配置錯誤或與攔截器聲明衝突。

你總是可以迫使你的控制器通過聲明HttpHeaders對象的實例,配置它們,並將它們包括爲響應實體(這是什麼樣子,你正在使用)返回緩存禁止用頭:

HttpHeaders headers = new HttpHeaders(); 
headers.add("Pragma", "no-cache"); 
headers.add("Expires", "Thu, 01 Jan 1970 00:00:00 GMT"); 
headers.add("Cache-Control", "max-age=0, no-cache, no-store"); 

如果你有很多控制器,並且每個控制器有很多方法,這會變成很多重複的,討厭的代碼。相反,你可以擴展HttpHeaders

public class YourAppHeaders extends HttpHeaders { 
    public YourAppHeaders()    
     add("Pragma", "no-cache"); 
     add("Expires", "Thu, 01 Jan 1970 00:00:00 GMT"); 
     add("Cache-Control", "max-age=0, no-cache, no-store"); 
    } 
} 

然後,你可以通過每@Controller的源文件,並找到/新YourAppHeaders情況下更換新HttpHeaders實例。

我推薦這種方法在XML配置有以下幾個原因:

  • 你的XML配置不工作,我沒有足夠的信息來理解爲什麼;和
  • 這種方法是有保證的工作;和
  • 它的代碼最小量您可以添加到完成你在找什麼

最好的運氣 - HTH

1

如果你的配置看起來完全如圖所示,你的攔截器聲明將不會生效。您需要將攔截器聲明放入<mvc:interceptors>,請參閱Bozho's answer

關於多個AJAX查詢,只要這些查詢由Spring MVC控制器處理,就應該沒問題。默認情況下,攔截器攔截所有到達控制器的請求,但如果需要,您可以將其範圍縮小爲特定的URL模式。

+0

對不起@axtavt,這是我的部分複製粘貼錯誤。我已經更新了我的問題中的代碼片段,以反映實際的Spring配置(顯示''聲明)。這仍然不起作用 - 有什麼我可以做的調查爲什麼? – IAmYourFaja

相關問題