验证码的制作和验证(一)

2018-06-18 03:45:40来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

方法一:BufferedImage+Graphics制作验证码

  1.制作JSP页面(如图)

       

  代码如下:

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

  2.实现ImageServlet

 1 public class ImageServlet extends HttpServlet {
 2     
 3     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
 4         //制作图片
 5         BufferedImage bi=new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);
 6         Graphics g=bi.getGraphics();
 7         //设置颜色并绘制
 8         Color c=new java.awt.Color(200, 150, 255);
 9         g.setColor(c);
10         g.fillRect(0, 0, 68, 22);
11         //设置内容
12         char ch[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
13         //随机数--通过随机数随机产生颜色和字母、数字
14         Random r=new Random();
15         int len=ch.length,index;
16         StringBuffer sb=new StringBuffer();
17         for(int i=0;i<4;i++){
18             //随机产生字母、数字
19             index=r.nextInt(len);
20             //随机产生颜色
21             g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
22             //画出字母、数字
23             g.drawString(ch[index]+"", (i*15)+3, 18);
24             //存储当前字母、数字
25             sb.append(ch[index]);
26         }
27         //将当前字母、数字存入session
28         request.getSession().setAttribute("piccode", sb.toString());
29         //输出图片
30         ImageIO.write(bi, "JPG", response.getOutputStream());
31     }
32 }

  3.实现点击“看不清楚”换一张图片(修改Jsp)

**在form标签前、body标签内插入:

1 <script type="text/javascript">
2       function reloadCode(){
3            //通过time来区分不同的时间,从而刷新验证码图片
4            var time=new Date().getTime();
5            document.getElementById("imagecode").src="<%=request.getContextPath()%>/servlet/ImageServlet?d="+time;
6 }
7 </script>

**注:其中,必须加入time来区分不同的路径,否则浏览器中会有缓存,点击之后还是原来的图!!

  4.实现验证码的验证(实现LoginServlet)

 1 public class LoginServlet extends HttpServlet{    
 2     public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException{
 3         //获取图片内容
 4         String piccode=(String)request.getSession().getAttribute("piccode");
 5         //获取输入内容
 6         String checkcode=request.getParameter("checkcode");
 7         //不区分大小写
 8         checkcode=checkcode.toUpperCase();
 9         //防止乱码
10         response.setContentType("text/html;charset=gbk");
11         PrintWriter out=response.getWriter();
12         //验证并输出结果
13         if(checkcode.equals(piccode)){
14             out.println("验证码输入正确!");
15         }else{
16             out.println("验证码输入错误!!");
17         }
18         out.flush();
19         out.close();
20     }
21 }

--未完待续--

**注:学习自慕课网《Java实现验证码制作》,附链接https://www.imooc.com/learn/283

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JAXB应用实例

下一篇:Hibernate入门(一)