2015-12-10 272 views
0

我有,如果用戶輸入錯誤的憑據,其中登錄的servlet登錄頁面中,給出警報:警報返回空白頁

PrintWriter out = response.getWriter(); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<script type=\"text/javascript\">"); 
     out.println("alert('User or password incorrect, please try again');"); 
     out.println("</script>"); 
     out.println("</head>"); 
     out.println("</html>"); 

警報工作正常,但警報後,它給與鏈接一個空白頁:

http://localhost:8080/AWSCustomerJavaWebFinal/LoginServlet

,這是什麼可能的解決方案,使警報後,頁面上停留的login.jsp或轉發警報後的login.jsp,而不是移動轉發到登錄servlet,我試圖請求disp atcher,但它沒有顯示警報,並再次轉移到login.jsp。

+1

這不是處理輸入驗證的好方法。試着看看Struts,Spring MVC或Stripes等框架如何實現它。 –

+0

@ScaryWombat我現在正在使用hibernate,仍處於學習階段。 –

+0

試試這個表單驗證教程http://www.javaworld.com/article/2076076/java-web-development/server-side-java--advanced-form-processing-using-jsp.html –

回答

1

如果堅持顯示警報給用戶,因爲這POST操作的結果的,你應該考慮這樣做在JavaScript重定向,以及:

out.println("<script type=\"text/javascript\">"); 
    out.println("alert('User or password incorrect, please try again');"); 
    out.println("window.location = 'login.jsp';"); 
    out.println("</script>"); 

您也可能要考慮增加至少一個基本的<正文>到該響應。

+0

謝謝Jan.這是我需要的。 –

0

當您提交表單時,您給出了action屬性的url。提交時,表單將被髮送到該網址。這意味着您現在指向該網址。所以它會留在你提供的網址上。

要麼提供相同的動作url(login.jsp),如果通過身份驗證,然後將用戶重定向到另一頁
或者使用ajax來做這件事。

+0

我已經這樣做,如果(結果==真){調度到一個JSP頁面,如果結果是假的,然後我發送到一個錯誤頁面,它工作正常,但我想顯示一個提醒,所以我做了這個,我無法顯示警報並一起發送給login.jsp? –

2

其基本思想是當你將一個表單發佈到一個servlet時,servelt將驗證這些數據。如果失敗,那麼servlet會向會話添加一個屬性並重定向回jsp頁面,否則它將重定向到主頁面

在所有情況下,JSP將檢查此會話屬性,如果它不存在,那麼這意味着它是正常的(首先嚐試登錄),否則它意味着它已經嘗試過,並失敗,它會顯示錯誤。

如果您確實需要提醒,請使用此會話屬性的值設置隱藏字段(帶有html id)。 Javascript(onLoad/ready)會檢查這個html元素,並在必要時顯示警告。