我有一个要求,即不应将值缓存在服务器中,也不应将浏览器缓存为域和会话上的cookie.
所以我选择永久重定向到价值
Servlet的:
@Override protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { String key = request.getParameter("key"); String val = request.getContentType(); if (val != null && val.length() == 0) { val = null; } String repeatText = request.getParameter("repeatText"); if (val != null && repeatText == null) { response.setStatus(301); // moved permanent response.addHeader("Location","?repeatText=" + val); System.out.println("Write"); } else { if (repeatText != null) { response.setContentLength(repeatText.length()); response.addHeader("pragma","no-cache"); response.addIntHeader("expires",BROWSER_CACHE_DAYS); response.getWriter().write(repeatText); System.out.println("Read and cache!"); } else { response.sendError(304); // use from cache! System.out.println("Send use from cache."); } } }
脚本:
<input class="username" /> <button>Login</button> <script> jQuery.ajax('theservlet?key=username').done(function(v){jQuery('.username').val(v);}); jQuery('button').click(function(){ jQuery.ajax('theservlet?key=username',{contentType:jQuery('.username').val()}) }); </script>
控制台输出:
Send use from cache. --- i enter username and press the button --- Write Read and cache! --- now i make a reload --- Send use from cache.
来自browsercache的reaload后没有返回我插入的用户名.
为什么浏览器不缓存?
解决方法
重定向ajax请求不会将浏览器重定向到新位置,如果确实如此,您将不再拥有页面,您只需要来自servlet的响应.
因此,当您刷新页面时,您将再次从头开始请求原始URL,并且用户名将丢失.
jQuery('button').click(function(){ var username=jQuery('.username').val(); jQuery.ajax('theservlet?key=username',{contentType:username}); window.location.hash=username; });
这会将“#username”附加到地址栏中的URL.然后在页面加载时,您可以填充请求参数的输入(如果存在):
jQuery('.username').val( window.location.hash );