2013-05-10 48 views
2

我有問題。我知道如何在servlet中執行JavaScript,但是當我將用戶重定向到另一端後,我想要執行它時遇到問題。這是代碼,它顯示了我的問題。我在html端使用提交按鈕。在Servlet中調用Javascript函數,提交後按鈕已被按下

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問題,這應該工作

回答

4
what happens now is, i will be redirected to my login page, but i do 
not see any alert.

看一看的Javadoc RequestDispatcher#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頁面。

+0

好thx,我現在使用包括,它確實工作完美 – SomeJavaGuy 2013-05-10 09:19:27