加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:34:35 所属栏目:Java 来源:网络整理
导读:我有一个要求,即不应将值缓存在服务器中,也不应将浏览器缓存为域和会话上的cookie. 所以我选择永久重定向到价值 Servlet的: @Overrideprotected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOExcepti
我有一个要求,即不应将值缓存在服务器中,也不应将浏览器缓存为域和会话上的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 );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读