0

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ヘッダーでこれを達成しようとしましたが、機能しませんでした。

4

1 に答える 1