복붙노트

[SPRING] 주석으로 봄 mvc 3 헤더 없음 캐시를 설정하는 방법

SPRING

주석으로 봄 mvc 3 헤더 없음 캐시를 설정하는 방법

스프링 mvc 3에서 주석없이 헤더 캐시를 설정하는 방법은 무엇입니까? ~이 아니다.

  response.setHeader("Pragma","No-cache");     
  response.setHeader("Cache-Control","no-cache");     
  response.setDateHeader("Expires",   0);     

해결법

  1. ==============================

    1.그러한 옵션은 없습니다. 인터셉터를 사용할 수 있습니다.

    그러한 옵션은 없습니다. 인터셉터를 사용할 수 있습니다.

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

    (여기에서 가져온)

    한편으로는 그러한 주석을 사용하지 않는 것이 논리적입니다. spring-mvc 메소드에 대한 주석은 주로 컨테이너가 호출 할 메소드를 결정하도록합니다 (요청 헤더, 요청 url 또는 메소드로 제한). 응답 제어는이 범주에 속하지 않습니다.

    반면 컨트롤러가 단위 테스트를 받았을 때 HTTP 헤더 항목을 테스트하는 것과 관련이 없기 때문에 (또는 그럴까요?) @ResponseBody와 @ResponseStatus가 있으며, 일부 응답 속성을 지정합니다.

  2. ==============================

    2.특정 컨트롤러 맵핑에 대한 설정을 대체하려면 WebContentInterceptor에서 cacheMappings 특성 오브젝트를 사용하십시오

    특정 컨트롤러 맵핑에 대한 설정을 대체하려면 WebContentInterceptor에서 cacheMappings 특성 오브젝트를 사용하십시오

    <bean id="webContentInterceptor"
    class="org.springframework.web.servlet.mvc.WebContentInterceptor">
    <property name="cacheSeconds" value="2100" />
    <property name="useExpiresHeader" value="true" />
    <property name="useCacheControlHeader" value="true" />
    <property name="useCacheControlNoStore" value="true" />
    <property name="cacheMappings">
        <props>
            <prop key="/myUncachedController">0</prop>
        </props>
    </property>
    

  3. ==============================

    3.나는 이것이 오래되었다는 것을 알고있다. 그러나 이것은 약간에게 도움이 될지도 모른다.

    나는 이것이 오래되었다는 것을 알고있다. 그러나 이것은 약간에게 도움이 될지도 모른다.

    캐시 할 때 더 많은 로직을 추가하고 싶지 않은 경우 사용자 정의 인터셉터를 작성할 수도 있습니다.

    예를 들어 브라우저가 IE이거나 특정 URL에서만 응답에서 캐싱을 사용하지 않으려면 HandlerInterceptor 인터페이스를 확장하여 응답을 수행 할 수 있습니다.

    그렇게함으로써 정확히 무슨 일이 일어나는지 많은 것을 제어 할 수 있습니다. 한 번에 모든 헤더를 설정하거나 각 컨트롤러의 응답에 변경 사항을 입력하는 것만 큼 쉽지는 않지만 그렇게 어렵지는 않으며 내 의견으로는 더 나은 장기적인 솔루션입니다. 일반적으로 봄에하는 법을 아는 것도 좋은 일입니다.

    이것은 꽤 좋은 튜토리얼입니다 :

    http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/

  4. from https://stackoverflow.com/questions/4364622/how-to-set-header-no-cache-in-spring-mvc-3-by-annotation by cc-by-sa and MIT license