按下提交按钮后,在Servlet中调用Javascript函数

时间:2013-05-10 09:09:20

标签: java servlets post

我有一个问题。我知道如何在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问题,这应该有效

1 个答案:

答案 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未提交给客户端,因此您的htmljavascript代码无法运行。转发意味着您当前的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页面目前没有任何可视内容。