提交注册表和 Java servlet
Registration form submitting and Java servlets
我的网站上有一份注册表格。提交表单时,将调用 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。
- JSON分析错误:Java中AJAX、Javascript和Servlet的意外EOF
- Java servlet代码未被调用
- 翻译是从哪里来的?Java servlet、tomcat和Ext Js Sencha应用程序
- Java EE servlet 页面重定向 + 向控制器发送数据
- JQuery, Java Servlet Examplet within Eclipse WTP
- 将servlet请求从javascript发送到java给出了“;请求的资源不可用”;
- 错误管理器:从标准Java到Servlet
- javaScript初学者:将数据从java脚本发送到servlet
- Java servlet对JavaScript的响应
- 如何在java servlet中获取客户端MAC地址
- 从旧的Java过渡到Play,Servlet问题
- java.lang.NullPointerException servlet
- 数据无法通过 Java Servlet 的问题
- 如何将 JavaScript 变量传递给 Java Servlet
- 提交注册表和 Java servlet
- 为什么 Servlet.service() for servlet jsp 抛出了异常 java.lang.NullPo
- Java servlet 无法读取 html select 标记名称
- 将java Servlet Map.toString响应转换为json
- Atmosphere Java Servlet Server 发送事件
- 使用JSP和Servlet Java的消息提示