在web開發(fā)中,用戶登錄和注冊(cè)功能是必不可少的。為了提高安全性,常常需要使用驗(yàn)證碼功能來(lái)防止惡意攻擊。JSP和MySQL結(jié)合使用可以實(shí)現(xiàn)驗(yàn)證碼登錄注冊(cè)功能。
首先在MySQL中創(chuàng)建一個(gè)用戶表,包括用戶名和密碼兩個(gè)字段。使用JSP開發(fā)頁(yè)面時(shí),需要用到JSTL,可以通過(guò)以下方式引入:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
驗(yàn)證碼功能可以通過(guò)生成隨機(jī)數(shù)和驗(yàn)證碼圖片實(shí)現(xiàn)。具體代碼如下:
<%! public String getCode() { // 隨機(jī)生成4位驗(yàn)證碼 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); } %>
在頁(yè)面中引入上述代碼可生成隨機(jī)驗(yàn)證碼圖片:
<img src="verify.jsp" alt="" />
登錄和注冊(cè)頁(yè)面中需增加驗(yàn)證碼輸入框并驗(yàn)證。登錄驗(yàn)證的代碼如下:
<%! 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="驗(yàn)證碼錯(cuò)誤" /> </c:if> </c:if>
注冊(cè)驗(yàn)證的代碼類似,可以參考登錄驗(yàn)證代碼編寫。在驗(yàn)證通過(guò)后,可以將用戶名和密碼保存在session中,實(shí)現(xiàn)登錄狀態(tài)的跟蹤。登錄結(jié)果可以通過(guò)JDBC查詢MySQL數(shù)據(jù)庫(kù)得到,以下是對(duì)應(yīng)的代碼:
<%@ 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 = "用戶名或密碼錯(cuò)誤"; } con.close(); } catch (Exception e) { message = "登錄失敗"; } %> <p>${message}</p>
以上就是JSP和MySQL結(jié)合使用實(shí)現(xiàn)驗(yàn)證碼登錄注冊(cè)功能的全部?jī)?nèi)容。