jsp使用servlet实现验证码

在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等...

现在,小编将讲述通过servlet实现验证码:

验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢?

<生成图片>

{

  生成图片的类:

  1.BufferedImage图像数据缓冲区

  2.Graphics绘制图片

  3.color获取颜色

  4.Random获取随机数

  5.ImageIO输出图片

}

///

<生成验证码图片>

1.在index.jsp中写入以下代码

  <form action="<%= request.getContextPath()%>/servlet/LoginServlet" method="get" >
    验证码:<input  type="text" name="checkCode"/>
    <img alt="验证码" id="imagecode" src="<%= request.getContextPath()%>/servlet/ImageServlet"/>
    <a href="javascript:reloadCode();">看不清楚</a><br>
    <input type="submit" value="提交">
    </form>

2.在src中创建ImageServlet类

 1 public class ImageServlet  extends HttpServlet{
 2     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
 3         //这个方法实现验证码的生成
 4         BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
 5          Graphics g=bi.getGraphics(); //通过缓冲区创建一个画布
 6          Color c=new Color(200,150,255); //创建颜色
 7          /*根据背景画了一个矩形框
 8           */
 9          g.setColor(c);//为画布创建背景颜色
10          g.fillRect(0, 0, 68,22); //fillRect:填充指定的矩形
11          
12          char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
13          Random r=new Random();
14          int len=ch.length;
15          int index; //index用于存放随机数字
16          StringBuffer sb=new StringBuffer();
17          for(int i=0;i<4;i++)
18          {
19              index=r.nextInt(len);//产生随机数字
20              g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));  //设置颜色
21              g.drawString(ch[index]+"",(i*15)+3, 18);//画数字以及数字的位置
22              sb.append(ch[index]);
23          }
24          request.getSession().setAttribute("piccode",sb.toString()); //将数字保留在session中,便于后续的使用
25          ImageIO.write(bi, "JPG", response.getOutputStream()); 
26     }

3.在WEB-INF进行配置文件

1 <servlet>
2         <servlet-name>ImageServlet</servlet-name>
3         <servlet-class>code.sam.ImageServlet</servlet-class>
4 </servlet>
5 
6 <servlet-mapping>
7         <servlet-name>ImageServlet</servlet-name>
8         <url-pattern>/servlet/ImageServlet</url-pattern>
9 </servlet-mapping>

------华丽分割线-------

<输入信息与图片中的数字进行校验>

1.创建LoginServlet类

 1 public class LoginServlet extends HttpServlet {
 2     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException
 3     //用于验证验证码
 4     {
 5         String piccode=(String) request.getSession().getAttribute("piccode");
 6         String checkCode=request.getParameter("checkCode");  //取值
 7         //checkCode=checkCode.toUpperCase();  //把字符全部转换为大写的(此语句可以用于验证码不区分大小写)
 8         response.setContentType("text/html;charset=gbk");//解决乱码问题
 9         PrintWriter out=response.getWriter();
10         if(checkCode.equals(piccode))
11         {
12             out.println("验证码输入正确!");
13         }
14         else
15         {
16             out.println("验证码输入错误!!!");
17         }
18         out.flush();//将流刷新
19         out.close();//将流关闭
20     }

2.配置WEB-INF

1     <servlet>
2         <servlet-name>LoginServlet</servlet-name>
3         <servlet-class>code.sam.LoginServlet</servlet-class>
4     </servlet>
5 
6     <servlet-mapping>
7         <servlet-name>LoginServlet</servlet-name>
8         <url-pattern>/servlet/LoginServlet</url-pattern>
9     </servlet-mapping>

------华丽分割线-----

在点击页面中的看不清楚时,需要进行刷新,在页面中书写一段JS代码

1     function reloadCode()
2     {
3         var time=new Date().getTime();
4         document.getElementById("imagecode").src="<%= request.getContextPath()%>/servlet/ImageServlet?d="+time;
5     }

****************************************************

代码全部完成

结果如下图***

 

转载于:https://www.cnblogs.com/boy1025/p/4250710.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现验证码功能需要以下步骤: 1. 在登录页面上添加验证码输入框和验证码图片。 2. 在后端生成随机的验证码字符串,并将其存储到 Session 中。 3. 将生成的验证码字符串绘制成图片,并将其输出到前端页面。 4. 用户输入验证码后,将验证码字符串与 Session 中存储的验证码字符串进行比较,以确定用户输入是否正确。 下面是一个使用 IDEA 和 Servlet 实现验证码功能的示例代码: 1. 在登录页面上添加验证码输入框和验证码图片。 ```html <form action="login" method="post"> <label for="username">用户名:</label><input type="text" id="username" name="username"><br> <label for="password">密 码:</label><input type="password" id="password" name="password"><br> <label for="verifyCode">验证码:</label><input type="text" id="verifyCode" name="verifyCode" style="width: 100px;"><img src="verifyCode" alt="验证码"><br> <input type="submit" value="登录"> </form> ``` 2. 在后端生成随机的验证码字符串,并将其存储到 Session 中。 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应头,禁止缓存 response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", -1); // 创建 BufferedImage 对象,用于绘制验证码图片 int width = 100; int height = 40; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取 Graphics2D 对象,用于绘制验证码 Graphics2D g2d = image.createGraphics(); // 设置背景颜色 g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, width, height); // 生成随机的验证码字符串 String code = generateRandomCode(); request.getSession().setAttribute("verifyCode", code); // 绘制验证码字符串 g2d.setColor(Color.BLACK); g2d.setFont(new Font("宋体", Font.BOLD, 20)); g2d.drawString(code, 30, 25); // 绘制干扰线 g2d.setColor(Color.GRAY); for (int i = 0; i < 10; i++) { int x1 = (int) (Math.random() * width); int y1 = (int) (Math.random() * height); int x2 = (int) (Math.random() * width); int y2 = (int) (Math.random() * height); g2d.drawLine(x1, y1, x2, y2); } // 将验证码图片输出到前端页面 response.setContentType("image/jpeg"); OutputStream out = response.getOutputStream(); ImageIO.write(image, "jpeg", out); out.close(); } /** * 生成随机的验证码字符串 */ private String generateRandomCode() { String code = ""; Random random = new Random(); for (int i = 0; i < 4; i++) { int num = random.nextInt(10); code += num; } return code; } ``` 3. 将生成的验证码字符串绘制成图片,并将其输出到前端页面。 4. 用户输入验证码后,将验证码字符串与 Session 中存储的验证码字符串进行比较,以确定用户输入是否正确。 ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的用户名、密码和验证码 String username = request.getParameter("username"); String password = request.getParameter("password"); String verifyCode = request.getParameter("verifyCode"); // 从 Session 中获取存储的验证码字符串 String storedCode = (String) request.getSession().getAttribute("verifyCode"); // 比较用户输入的验证码和存储的验证码是否一致 if (!verifyCode.equals(storedCode)) { // 验证码错误,返回错误信息 response.getWriter().write("验证码错误"); return; } // 验证码正确,进行用户名和密码的验证 if ("admin".equals(username) && "123456".equals(password)) { // 登录成功,重定向到首页 response.sendRedirect(request.getContextPath() + "/index.jsp"); } else { // 登录失败,返回错误信息 response.getWriter().write("用户名或密码错误"); } } ``` 以上就是使用 IDEA 和 Servlet 实现验证码功能的完整示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值