案例--验证码--需求&分析,实现

    科技2022-07-14  111

    黑马程序员

    案例–验证码–需求&分析

    案例–验证码–代码实现

    login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>login</title> <script> window.onload=function () { //1. 获取图片对象 document.getElementById("checkCode").onclick=function () {//加时间戳 this.src="/day17/checkCodeServlet?"+new Date().getTime(); } } </script> <style> table input{ box-sizing: border-box; vertical-align: center; padding-left: 4px; } div{ color: red; } </style> </head> <body> <form action="/day17/loginServlet" method="post"> <table> <tr> <td>用户名</td> <td><input type="text" placeholder="请输入用户名" name="username"></td> </tr> <tr> <td>密码</td> <td><input type="password" placeholder="请输入密码" name="password"></td> </tr> <tr> <td>验证码</td> <td><input type="text" placeholder="请输入验证码" name="checkcode_String"></td> </tr> <tr> <td colspan="2"><img src="/day17/checkCodeServlet" id="checkCode"></td> </tr> <tr> <td colspan="2"><input type="submit" value="登录"></td> </tr> </table> </form> <div><%=request.getSession().getAttribute("login") == null ? "":request.getSession().getAttribute("login")%></div> <div><%=request.getSession().getAttribute("cc_session") == null ? "":request.getSession().getAttribute("cc_session")%></div> </body> </html>

    CheckCodeServlet

    package zr.web.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; @WebServlet("/checkCodeServlet") public class CheckCodeServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int width=100; int height=50; //1. 创建一个对象,在内存中代表这个验证码图片 BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //2. 美化这个图片 //2.1 填充背景色 Graphics graphics = image.getGraphics();// 画笔对象 graphics.setColor(Color.white); graphics.fillRect(0,0,width,height); //2.2 画边框 graphics.setColor(Color.blue); graphics.drawRect(0,0,width-1,height-1); //2.3 生成随机字符 String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; //生成随机脚标 Random ran=new Random(); StringBuilder sb =new StringBuilder(); for (int i = 1; i <=4 ; i++) { int index = ran.nextInt(str.length()); //获取字符 char ch=str.charAt(index);//随机字符 sb.append(ch); //2.4写验证码 graphics.drawString(ch+"",width/5*i,height/2); } String checkCode_session =sb.toString(); //将生成的验证码存入session request.getSession().setAttribute("checkCode_session",checkCode_session); //2.5画干扰线 graphics.setColor(Color.gray); for (int i = 1; i <=10 ; i++) { //随机生成坐标点 int x1 = ran.nextInt(width); int y1 = ran.nextInt(height); int x2 = ran.nextInt(width); int y2 = ran.nextInt(height); graphics.drawLine(x1,y1,x2,y2); } //3. 将图片输出到页面展示 ImageIO.write(image,"jpg",response.getOutputStream()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }

    JDBCUtils

    package zr.web.utils;

    import com.alibaba.druid.pool.DruidDataSourceFactory;

    import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties;

    public class JDBCUtils { private static DataSource ds;

    static{ try { Properties pro =new Properties(); InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid1.properties"); pro.load(is); ds= DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSourse(){ return ds; } public static Connection getConnection() throws SQLException { return ds.getConnection(); }

    }

    User

    package zr.web.domain; public class User { private String username; private String password; private String checkCode; public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setCheckCode(String checkCode) { this.checkCode = checkCode; } public String getUsername() { return username; } public String getPassword() { return password; } public String getCheckCode() { return checkCode; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", checkCode='" + checkCode + '\'' + '}'; } }

    LoginServlet

    package zr.web.servlet; import org.apache.commons.beanutils.BeanUtils; import zr.web.dao.UserDao; import zr.web.domain.User; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Map; @WebServlet("/loginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置request的编码 request.setCharacterEncoding("utf-8"); //获取所有请求参数 Map<String, String[]> parameterMap = request.getParameterMap(); //创建一个User对象,用于封装数据 User user=new User(); //使用BeanUtils封装 try { BeanUtils.populate(user,parameterMap); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } String checkcode_string = request.getParameter("checkcode_String"); HttpSession session = request.getSession(); String checkCode_session = (String) session.getAttribute("checkCode_session"); session.removeAttribute("checkCode_session"); if(checkCode_session!=null && checkCode_session.equalsIgnoreCase(checkcode_string)){ UserDao dao=new UserDao(); User login = dao.login(user); if (login!=null){ //登陆成功 String username = user.getUsername(); session.setAttribute("user",username); //重定向到success.jsp response.sendRedirect(request.getContextPath()+"/success.jsp"); }else{ //登录失败 session.setAttribute("login","用户名或密码错误"); //转发到login.jsp页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } }else{ //验证码错误 session.setAttribute("cc_session","验证码错误"); //转发到login.jsp页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }

    success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>success</title> </head> <body> <h1><%=request.getSession().getAttribute("user")%>欢迎您回来</h1> </body> </html>
    Processed: 0.010, SQL: 8