我有一个问题。我知道如何在servlet中执行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);
现在发生的是,我将被重定向到我的登录页面,但我没有看到任何警报。 但是当我删除转发线并且会有写
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
所以现在我收到警报消息,但是我被重定向到空白页面,因为根本没有重定向。
所以现在我正在尝试创建一个警报,告诉用户警报中的某些内容。在它之后,我想将他重定向到登录页面,在那里我想调用我写的“注销”功能。
但我既没有收到警报也没有调用注销功能。 基于this问题,这应该有效
答案 0 :(得分:4)
what happens now is, i will be redirected to my login page, but i do not see any alert.
查看RequestDispatcher#forward()的javadoc。
在将响应提交给客户端之前,应将forward称为(在刷新响应正文输出之前)。 如果响应已经提交,则此方法抛出IllegalStateException。响应缓冲区中的未提交输出将在转发前自动清除。
因此,当您forward()
时,当前response
未提交给客户端,因此您的html
和javascript
代码无法运行。转发意味着您当前的Servlet不处理request
,转发的代码应该处理它,因此您不会在当前Servlet中的out.println()
中看到任何内容作为最终响应的一部分。 Tjis正在转发请求,并在服务器端本身完成,这不是由浏览器启动的重定向。要重定向,您需要使用HttpServletResponse#sendRedirect。
So now i am getting the alert message, but i am getting redirected to a blank page
您没有被重定向到任何页面,仔细检查您写入回复的内容:
out.println("<script type=\"text/javascript\">");
out.println("alert('the session did time out, please reconnect');");
out.println("logout();");
out.println("</script>");
在这种情况下,浏览器会输入类似这样的HTML代码:
<html>
<script type="text/javascript">
alert('the session did time out, please reconnect');
logout();
</script>
此代码只显示警告并调用logout()
函数(如果有)。它显示的HTML页面目前没有任何可视内容。