提交注册表和 Java servlet

Registration form submitting and Java servlets

本文关键字:servlet Java 注册表 提交      更新时间:2023-09-26

我的网站上有一份注册表格。提交表单时,将调用 Java Servlet。在 Servlet 中,我检查我的数据库是否已经使用了用户名或电子邮件。我希望 Servlet 在注册完成与否时做出响应,我希望我的客户端收到此响应并采取相应的行动。一个简单的结果可能是注册表上方的文本,上面写着"注册成功"或"电子邮件/用户名已在使用中"。如何让我的客户端接收来自 Servlet 的响应?

我的表格

<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="namn@mail.com" />
  </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>

我的仆人

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>

执行此操作的一种简单方法是以 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>");

有关更多信息,请浏览这些教程

如果您不希望页面重新加载,那么您应该:

  • 通过 Javascript 将 Ajax 请求发送到您的 servlet
  • 检查发送到 Servlet 的值,就像你现在所做的那样,并按照我在上面的代码中提到的方式发送响应(你可以发送一个布尔值来表示成功或失败,以便稍后在 Javascript 中签入)
  • 您将在 Javascript 中收到响应数据作为 Ajax 响应
  • 现在,您可以在特定div 中相应地设置响应结果。

    有关如何将 Ajax 与 Servlet 一起使用的更多信息,请参阅此答案。

我假设您使用jsp作为注册表。

用户名已被使用的情况:

从servlet通过url发送一个变量"status=1"。

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

如果从 servlet 注册成功,则通过 url 发送变量 "status=2

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

现在,在 jsp 的用户 ID 文本框代码下或在表单上方的任何特定div 中使用此代码。

    <% 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 { }%>

它应该可以正常工作。

我能想到的最简单的方法,您可以在提交 say 下的注册页面上将变量 say msg 隐藏在某个div 中,例如 {msg},并在 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。