2010-11-26 6 views
1

원격 사용자에게 정보를 표시하기 위해 JSP (Spring MVC)를 사용합니다. 페이지 캐싱에 몇 가지 문제가 있습니다. 다음과 같이 보입니다.페이지 캐싱 문제

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>My Title</title> 
    </head> 
    <body> 
     <jsp:include page="menu.jsp" flush="true" /> 
     <form method="post"> 
      Write here 
      <input type="text" name="inputTxt" value="${txt}" /> 
      <input type="submit" value="OK" /> 
     </form> 

     <table border="1"> 
      ... 
     </table>      
    </body> 
</html> 

페이지에 항목이 표시되어야합니다. 사용자가 OK 버튼을 누르면 서버는 데이터베이스에 정보를 추가하고 테이블에 행을 추가합니다. 모두 잘 작동합니다. 그러나 테이블은 기록 된 사용자에 따라 정보를 표시합니다. 그래서 처음 로그인 할 때 내 앱이 훌륭하게 작동합니다 (현재 사용자에 해당하는 데이터를 보여줍니다). 그러나 현재 사용자에서 로그 아웃하고 새 사용자에서 로그인 할 때이 페이지는 전나무 사용자에 대한 데이터를 계속 표시합니다. F5 키를 누르면 표가 업데이트되고 현재 사용자에 해당하는 올바른 정보가 표시됩니다. 나는 캐싱에 문제가 있다고 생각한다. 이 문제를 방지하려면 어떻게해야합니까? 어떤 아이디어?

+0

당신이 유래 질문 http://stackoverflow.com/questions/49547/making-sure-a-web-page-를 확인하실 수 있습니다 캐시되지 않은 전체 브라우저 – Javi

답변

3

페이지가 실제로 브라우저에 의해 캐시됩니다. Firefox에서 Firebug으로 확인할 수 있습니다. 일반적으로 동적 내용의 클라이언트 측 캐싱을 비활성화하려고합니다. Filterurl-pattern에 매핑하여 *.jsp으로 매핑하고 기본적으로 doFilter() 메서드에서 다음 작업을 수행하면됩니다.

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1 
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0 
httpResponse.setDateHeader("Expires", 0); // Proxies. 
chain.doFilter(request, response); 

이러한 응답 헤더는 클라이언트 (webbrowser)가 응답을 캐시하지 않도록 지시합니다. 테스트하기 전에 브라우저 캐시를 청소하는 것을 잊지 마십시오.

스프링 MVC에서

, 당신과 같이 인터셉터를 만들 수 있습니다

public class DisableBrowserCachingInterceptor extends HandlerInterceptorAdapter { 

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { 
     response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1 
     response.setHeader("Pragma", "no-cache"); // HTTP 1.0 
     response.setDateHeader("Expires", 0); // Proxies 
    } 
}