我有一個在我的網站上註冊的表單。提交表單時,會調用一個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>
在網上搜索我發現,像你這樣寫jsp是被認爲是不好的做法。使用核心JSTL要好得多。不過,我會將你的答案標記爲正確,因爲它讓我走上了正確的軌道。謝謝! –
感謝您的評論。 –