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

Pet*_*der 7 java jquery servlets http http-status-code-301

我有一个要求,即不应将值缓存在服务器中,也不应将浏览器缓存为域和会话上的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.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

脚本:

<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>
Run Code Online (Sandbox Code Playgroud)

控制台输出:

Send use from cache.
--- i enter username and press the button ---
Write
Read and cache!
--- now i make a reload ---
Send use from cache.
Run Code Online (Sandbox Code Playgroud)

来自browsercache的reaload后没有返回我插入的用户名.

为什么浏览器不缓存?

编辑:添加解释

İlk*_*kut 0

您的请求是一个 ajax 调用,它是async request对您的 servlet 的调用,在这种情况下,您在服务器端的重定向不会影响客户端。此请求的工作方式类似于浏览器中的单独线程。

因此,您应该指定响应数据(在本例中为 url,带有查询字符串)。在 ajax 成功回调中 servlet 响应之后,您应该指定重定向事件的位置。

对于 ajax success 后的重定向window.location.href = reponseUrl;,您可以设置输入的值,而不是重定向。

否则只需提交表单并通过您的 servlet 进行重定向。