Spring MVC Controllerの応答が、ブラウザーで静的コンテンツとして表示されるようにしたいと思います。一度フェッチしてからブラウザのキャッシュから取得して304 Not Modified
ステータスコードを取得するだけです。簡単な方法で普通のSpringMVCコントローラーを持っています。simpleService.getVariables()
データベースから巨大なコンテンツを取得しています。Stringを返します。
@RequestMapping(value = "/jsContent.htm")
public ModelAndView jsContent(@RequestParam("ver") String version,
HttpServletRequest request, HttpServletResponse response) {
ModelAndView mav = new ModelAndView("jsContent");
mav.addObject("variables", simpleService.getVariables());
return mav;
}
応答はApacheTilesによって処理されています。はfirstPart
通常のJavaScriptファイルであり、secondPart
はオブジェクトにString
追加されModelAndView
ます。
<definition name="javascript" template="/WEB-INF/tiles/javascript.jsp" />
<definition name="jsContent" extends="javascript">
<put-attribute name="firstPart" expression="/js/content/static.js" />
<put-attribute name="secondPart" expression="${variables}" />
</definition>
expressions
タイルで有効にするために、これを追加しましたtilesProperties
:
これは私のtiles/javascript.jsp
です:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertAttribute name="firstPart" />
<tiles:insertAttribute name="secondPart" />
304 Not Modified
このSpringフィルターをに追加することによってのみステータスコードを達成しましたweb.xml
。ただし、コンテンツは毎回フェッチされており、Etag
ヘッダーの比較により、ステータスコードは304
変更があった場合に表示されます。
<filter>
<filter-name>etagFilter</filter-name>
<filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>etagFilter</filter-name>
<servlet-name>dispatcher</servlet-name>
</filter-mapping>
Spring Controllerのキャッシュされた応答を取得するにはどうすればよいですか?HTTPヘッダーでこれを達成しようとしましたが、機能しませんでした。