前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jsp实现登录验证码

jsp实现登录验证码

作者头像
瑞新
发布2020-07-08 11:42:51
3.9K0
发布2020-07-08 11:42:51
举报

效果图

在这里插入图片描述
在这里插入图片描述

目录结构

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
login.jsp
<form action="<%= request.getContextPath()%>/servlet/UserServlet" method="post" >
		username1:<input type="text" name="uname" />
		pwd1:<input type="password"  name="upwd" />
	    <br>
	       验证码:<input  type="text" name="checkCode"/>
	    <a href="javascript:reloadCode();">
	    <img alt="验证码" id="imagecode" src="<%= request.getContextPath()%>/servlet/ImageServlet"/>
	       看不清楚</a><br>
	    <input type="submit" value="提交">
   </form>
代码语言:javascript
复制
辅助js
<script type="text/javascript">
function reloadCode()
     {
         var time=new Date().getTime();
         document.getElementById("imagecode").src="<%= request.getContextPath()%>/servlet/ImageServlet?d="+time;
     }
</script>
代码语言:javascript
复制
ImageServlet 图像
package com.bennyrhys.bean;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/servlet/ImageServlet")
public class ImageServlet  extends HttpServlet{
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
        //这个方法实现验证码的生成
        BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
         Graphics g=bi.getGraphics(); //通过缓冲区创建一个画布
         Color c=new Color(200,150,255); //创建颜色
         /*根据背景画了一个矩形框
          */
         g.setColor(c);//为画布创建背景颜色
         g.fillRect(0, 0, 68,22); //fillRect:填充指定的矩形
         
         char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
         Random r=new Random();
         int len=ch.length;
         int index; //index用于存放随机数字
         StringBuffer sb=new StringBuffer();
         for(int i=0;i<4;i++)
         {
             index=r.nextInt(len);//产生随机数字
             g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));  //设置颜色
             g.drawString(ch[index]+"",(i*15)+3, 18);//画数字以及数字的位置
             sb.append(ch[index]);
         }
         request.getSession().setAttribute("piccode",sb.toString()); //将数字保留在session中,便于后续的使用
         ImageIO.write(bi, "JPG", response.getOutputStream()); 
    }}
代码语言:javascript
复制
UserServlet验证
package com.bennyrhys.bean;

import java.io.IOException;
import java.io.PrintWriter;

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;

/**
 * Servlet implementation class UserServlet
 */
@WebServlet(urlPatterns="/servlet/UserServlet")
public class UserServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("do Post");
		String uname = request.getParameter("uname");
		String upwd = request.getParameter("upwd");
		System.out.println(uname+"----"+upwd);
		/*if ("root".equals(uname) && "root".equals(upwd)) {
			//提示成功登录
			System.out.println("yes");
			//传输session数据
			HttpSession session = request.getSession();
			session.setAttribute("uname", uname);
			session.setAttribute("upwd", upwd);
			//转跳页面
			String contextPath = request.getContextPath();
			response.sendRedirect(contextPath+"/index.html");
		}else {
			System.out.println("no");
			request.getRequestDispatcher("/login.html").forward(request, response);
		}*/
		
		
		//验证码
		 String piccode=(String) request.getSession().getAttribute("piccode");
	        String checkCode=request.getParameter("checkCode");  //取值
	        checkCode=checkCode.toUpperCase();  //把字符全部转换为大写的(此语句可以用于验证码不区分大小写)
	        response.setContentType("text/html;charset=gbk");//解决乱码问题
	        PrintWriter out=response.getWriter();
	        if(checkCode.equals(piccode) && "root".equals(uname) && "root".equals(upwd))
	        {
	            out.println("验证码输入正确!");
	          //提示成功登录
				System.out.println("yes");
				//传输session数据
				HttpSession session = request.getSession();
				session.setAttribute("uname", uname);
				session.setAttribute("upwd", upwd);
				//转跳页面
				String contextPath = request.getContextPath();
				response.sendRedirect(contextPath+"/index.html");
	        }
	        else
	        {
	            out.println("验证码输入错误!!!");
	            System.out.println("no");
				request.getRequestDispatcher("/login.jsp").forward(request, response);
	        }
	        out.flush();//将流刷新
	        out.close();//将流关闭
		
	}

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档