Som*_*Guy 3 java post servlets
我有一个问题。我知道如何在Servlet中执行JavaScript,但是在将用户重定向到另一端后想立即执行JavaScript时遇到了问题。这是代码,它显示了我的问题。我在html端使用了一个提交按钮。
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("<script type=\"text/javascript\">");
out.println("alert('the session did time out, please reconnect');");
out.println("logout();");
out.println("</script>");
request.getRequestDispatcher("/Login.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
现在发生的是,我将被重定向到我的登录页面,但是我没有看到任何警报。但是当我删除转发线路时,将被写入
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("<script type=\"text/javascript\">");
out.println("alert('the session did time out, please reconnect');");
out.println("logout();");
out.println("</script>");
// the redirect is missing now
Run Code Online (Sandbox Code Playgroud)
因此,现在我收到警报消息,但由于没有任何重定向,因此我被重定向到空白页。
因此,现在我试图创建一个警报,该警报告诉用户警报中的某些内容。在此之后,我想将他重定向到登录页面,在这里我要调用我编写的“注销”功能。
但是我既没有收到警报,也没有调用注销功能。基于这个问题,这应该工作
现在发生的是,我将被重定向到我的登录页面,但我确实 没有看到任何警报。
看看RequestDispatcher#forward()的javadoc 。
在将响应提交给客户端之前(在刷新响应主体输出之前),应调用forward 。如果响应已经提交,则此方法引发IllegalStateException。在转发之前,将自动清除响应缓冲区中未提交的输出。
因此,当您使用时forward(),当前response不会提交给客户端,因此您html和javascript代码不会运行。转发意味着您当前的Servlet不处理request,转发的代码应改为处理它,因此您不会在out.println()最终响应中看到任何内容写在当前Servlet内部。Tjis正在转发请求,并在服务器端本身完成,这不是由浏览器启动的重定向。要重定向,您需要使用HttpServletResponse#sendRedirect。
所以现在我收到警报消息,但是我被重定向到 空白页
您不会被重定向到任何页面,请仔细检查您对响应写的内容:
out.println("<script type=\"text/javascript\">");
out.println("alert('the session did time out, please reconnect');");
out.println("logout();");
out.println("</script>");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,浏览器将收到类似以下内容的HTML代码:
<html>
<script type="text/javascript">
alert('the session did time out, please reconnect');
logout();
</script>
Run Code Online (Sandbox Code Playgroud)
此代码将仅显示警报和呼叫logout()功能(如果有)。它会显示HTML网页,该网页的当前形式没有任何可视内容。