在web開發中,用戶登錄和注冊功能是必不可少的。為了提高安全性,常常需要使用驗證碼功能來防止惡意攻擊。JSP和MySQL結合使用可以實現驗證碼登錄注冊功能。
首先在MySQL中創建一個用戶表,包括用戶名和密碼兩個字段。使用JSP開發頁面時,需要用到JSTL,可以通過以下方式引入:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
驗證碼功能可以通過生成隨機數和驗證碼圖片實現。具體代碼如下:
<%! public String getCode() { // 隨機生成4位驗證碼 String code = ""; for (int i = 0; i< 4; i++) { int r = (int) (Math.random() * 10); code += r; } return code; } %> <%! public static void outputImage(int width, int height, OutputStream os, String code) throws IOException { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); g.setColor(Color.BLACK); g.setFont(new Font("Arial", Font.PLAIN, 18)); g.drawString(code, 11, 20); g.dispose(); ImageIO.write(image, "JPEG", os); } %>
在頁面中引入上述代碼可生成隨機驗證碼圖片:
<img src="verify.jsp" alt="" />
登錄和注冊頁面中需增加驗證碼輸入框并驗證。登錄驗證的代碼如下:
<%! public boolean checkCode(HttpServletRequest request) { String verifyCode = request.getParameter("verifyCode"); String code = (String) request.getSession().getAttribute("code"); if (code.equalsIgnoreCase(verifyCode)) { return true; } else { return false; } } %> <c:if test="${not empty param.login}"><c:if test="${checkCode(request)}"><c:set var="username" value="${param.username}" scope="session" /> <c:set var="password" value="${param.password}" scope="session" /> <c:redirect url="loginResult.jsp" /> </c:if> <c:if test="${not checkCode(request)}"> <c:set var="message" value="驗證碼錯誤" /> </c:if> </c:if>
注冊驗證的代碼類似,可以參考登錄驗證代碼編寫。在驗證通過后,可以將用戶名和密碼保存在session中,實現登錄狀態的跟蹤。登錄結果可以通過JDBC查詢MySQL數據庫得到,以下是對應的代碼:
<%@ page import="java.sql.*" %> <% String username = (String) session.getAttribute("username"); String password = (String) session.getAttribute("password"); String message = ""; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/user"; String user = "root"; String pass = "password"; Connection con = DriverManager.getConnection(url, user, pass); Statement stmt = con.createStatement(); String sql = "SELECT * FROM user WHERE username='" + username + "' AND password='" + password + "'"; ResultSet rs = stmt.executeQuery(sql); if (rs.next()) { message = "登錄成功"; } else { message = "用戶名或密碼錯誤"; } con.close(); } catch (Exception e) { message = "登錄失敗"; } %> <p>${message}</p>
以上就是JSP和MySQL結合使用實現驗證碼登錄注冊功能的全部內容。