2016-03-05 71 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