2016-03-05 63 views
0

我有一個在我的網站上註冊的表單。提交表單時,會調用一個Java Servlet。在Servlet中,我檢查數據庫是否已經使用了用戶名或電子郵件。我希望Servlet在註冊完成後作出響應,並且我希望我的客戶端能夠收到此響應並採取相應措施。一個簡單的結果可能是註冊表格上方顯示「註冊成功」或「電子郵件/用戶名已在使用中」的文字。 如何讓我的客戶端收到來自Servlet的響應?註冊表單提交和Java servlets

我的形式

<form id="registerForm" autocomplete="on"> 
    <h1>Registrera</h1> 
    <p> 
    <label for="usernamesignup" class="uname" data-icon="u">Användarnamn</label> 
    <input id="usernamesignup" name="usernamesignup" required="required" type="text" 
    placeholder="användarnamn" /> 
    </p> 
    <p> 
    <label for="emailsignup" class="youmail" data-icon="e">E-mail</label> 
    <input id="emailsignup" name="emailsignup" required="required" type="email" 
    placeholder="[email protected]" /> 
    </p> 
    <p> 
    <label for="passwordsignup" class="youpasswd" data-icon="p">Lösenord</label> 
    <input id="passwordsignup" name="passwordsignup" required="required" type="password" 
    placeholder="lösenord" /> 
    </p> 
    <p> 
    <label for="passwordsignup_confirm" class="youpasswd" data-icon="p">Upprepa lösenord</label> 
    <input id="passwordsignup_confirm" name="passwordsignup_confirm" required="required" type="password" 
    placeholder="lösenord" /> 
    </p> 
    <p class="signin button"> 
    <input type="submit" value="Registrera"/> 
    </p> 
    <p class="change_link"> 
    Redan medlem? <a href="#tologin" class="to_register">Logga in</a> 
    </p> 
</form> 

我的servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String username = request.getParameter("usernamesignup"); 
    String email = request.getParameter("emailsignup"); 
    String password = request.getParameter("passwordsignup"); 

    try { 
     MysqlDataSource dataSource = new MysqlDataSource(); 
     ... 

     Connection conn = dataSource.getConnection(); 
     Statement stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT * FROM Users WHERE username = '" + username + "' OR email = '" + email + "'"); 

     if (!rs.next()) { 
      stmt.executeUpdate("INSERT INTO Users VALUES('" + username + "', '" + password + "', '" + email + "')"); 
      //Notify the client that the registration was successful! 
     } else { 
      //Notify the client that the registration failed! 
     } 
     ... 
    } 
} 

我的解決方案

我去哪裏,我從我的Servlet發送重定向和附加狀態的解決方案參數。核心JSTL然後檢索此參數並相應地顯示一條消息。我在我的servlet以下幾點:

ResultSet rs = stmt.executeQuery("SELECT * FROM Users WHERE username = '" + username + "' OR email = '" + email + "'"); 

if (!rs.next()) { 
    stmt.executeUpdate("INSERT INTO Users VALUES('" + username + "', '" + password + "', '" + email + "')"); 
    //Registration was successful! 
    response.sendRedirect ("pages/index.jsp?status=1"); 
} else { 
    //Registration failed 
    response.sendRedirect ("pages/index.jsp?status=2#toregister"); 
} 

,並在我的JSP我做的:

<div id="registerMessage"> 
    <c:set var="status" value="${param.status}" /> 
    <c:if test="${status == '1'}"> 
     <p class="success">Du är nu registrerad och kan logga in!</p> 
    </c:if> 
    <c:if test="${status == '2'}"> 
     <p class="fail">Användarnamnet eller email adressen finns redan!</p> 
    </c:if> 
</div> 

回答

0

我假設你使用JSP的登記表..

情況,其中用戶名已在使用:

從servlet的通過URL發送一個變量 「狀態= 1」 ..

response.sendRedirect ("registration.jsp?status=1); 

如果登記從servlet的全成發送一個可變經由URL

response.sendRedirect ("registration.jsp?status=2); 

現在,在根據用戶標識文本框代碼或在上面的形式使用的任何特定的div JSP「狀態= 2」這代碼..

<% String s=request.getParameter("status"); 
     If (s==null) 
      { } 
     else if (s.equals ("1")) 
     { 
    %> 
    <br/><h3> user id already exist </h3> 
    <%} 
     else if (s.equals ("2")) 
     { 
    %> 
    <br/><h3> registration successfull</h3> 
    <%} 
     else { }%> 

它應該工作正常。

+1

在網上搜索我發現,像你這樣寫jsp是被認爲是不好的做法。使用核心JSTL要好得多。不過,我會將你的答案標記爲正確,因爲它讓我走上了正確的軌道。謝謝! –

+0

感謝您的評論。 –

1

一個簡單的方法來做到這一點是發送一個響應返回到HTML形式的客戶端:

response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); //Returns a PrintWriter object that can send character text to the client 
out.println("<h1>Registered successfully</h1>"); 

欲瞭解更多信息,請通過這些Tutorials

如果你不希望頁面REL OAD那麼你應該:

  • 通過Javascript發送Ajax請求到Servlet
  • 檢查發送到你的servlet的值,你正在做的事情,正如我在上面的代碼中提到發送響應(您可以發送成功或失敗的布爾值以後在Javascript檢查)
  • 你,你會在Javascript中獲得響應數據作爲Ajax響應
  • 現在你可以在特定的div設置相應反應的結果。

    有關如何在Servlet中使用Ajax的更多信息,請參閱this

+0

感謝您的回答。我知道這是一個解決方案。問題是我希望郵件出現在我提交表單的URL上,我希望它出現在頁面上的某個位置(比如位於註冊表單上方的div內)。 –

+0

@RichardSilvertass我編輯了答案,看看。我希望它有幫助 –

+0

你能給我一個例子,如何使用Ajax提交表單在JavaScript中並捕獲響應(成功註冊和非成功註冊)? –

0

最簡單的方法,我能想到的,您可以隱藏變量說味精在註冊頁面一樣{味精}一些DIV下提交意見,並與在的servlet的doGet或doPost值填充這個變量(你正在使用)

doGet(...){ 
//code for deal with db 
if(succesfullRegistration) 
request.setAttribute("msg", "Registration Succesfull! Please Login and Proceed..or what ever you want to show..."); 
else 
request.setAttribute("msg", "User already Exists"); 
} 
// forward the request to same registration page. 
} 

asnyc,用ajax做。

+0

如何轉發到我的註冊頁面? –

+0

request.getRequestDispatcher(「/ view/registration.jsp」)。forward(req,res); – umesh