java – BHSM-Servlet不允许浏览器缓存用户名

前端之家收集整理的这篇文章主要介绍了java – BHSM-Servlet不允许浏览器缓存用户名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个要求,即不应将值缓存在服务器中,也不应将浏览器缓存为域和会话上的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,并且用户名将丢失.

您可以直接在javascript中将用户名添加到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 );

猜你在找的Java相关文章