AuthImageServlet.java

package com.util.servlet;

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

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AuthImageServlet extends HttpServlet {

/**
  * Constructor of the object.
  */
  private static final String CONTENT_TYPE = "text/html; charset=gb2312";  
     //设置字母的大小,大小  
     private Font mFont = new Font("Times New Roman", Font.PLAIN, 17);  
     public void init() throws ServletException  
     {  
         super.init();  
     }  
     Color getRandColor(int fc,int bc)  
     {  
         Random random = new Random();  
         if(fc>255) fc=255;  
         if(bc>255) bc=255;  
         int r=fc+random.nextInt(bc-fc);  
         int g=fc+random.nextInt(bc-fc);  
         int b=fc+random.nextInt(bc-fc);  
         return new Color(r,g,b);  
     }  
  
     public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
     {  
         response.setHeader("Pragma","No-cache");  
         response.setHeader("Cache-Control","no-cache");  
         response.setDateHeader("Expires", 0);  
         //表明生成的响应是图片  
         response.setContentType("image/jpeg");  
           
         int width=100, height=18;  
         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
           
         Graphics g = image.getGraphics();  
         Random random = new Random();  
         g.setColor(getRandColor(200,250));  
         g.fillRect(1, 1, width-1, height-1);  
         g.setColor(new Color(102,102,102));  
         g.drawRect(0, 0, width-1, height-1);  
         g.setFont(mFont);  
  
         g.setColor(getRandColor(160,200));  
  
         //画随机线  
         for (int i=0;i<155;i++)  
         {  
             int x = random.nextInt(width - 1);  
             int y = random.nextInt(height - 1);  
             int xl = random.nextInt(6) + 1;  
             int yl = random.nextInt(12) + 1;  
             g.drawLine(x,y,x + xl,y + yl);  
         }  
  
         //从另一方向画随机线  
         for (int i = 0;i < 70;i++)  
         {  
             int x = random.nextInt(width - 1);  
             int y = random.nextInt(height - 1);  
             int xl = random.nextInt(12) + 1;  
             int yl = random.nextInt(6) + 1;  
             g.drawLine(x,y,x - xl,y - yl);  
         }  
  
         //生成随机数,并将随机数字转换为字母  
         String codeList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
         String sRand="";    
         for (int i=0;i<6;i++){
            int a=random.nextInt(codeList.length()-1);
            String rand=codeList.substring(a,a+1);
            sRand+=rand;

g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));    
               g.drawString(rand,15*i+10,16);    
         }
                
         System.out.println("-----------------------------------"+sRand);
         HttpSession session = request.getSession(true); 
         session.setAttribute("rand",sRand);  
         g.dispose(); 
           OutputStream os =response.getOutputStream();
        ImageIO.write(image, "JPEG", os);
     }

}

CheckServlet.java

package com.util.servlet;

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

import javax.mail.Session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CheckServlet extends HttpServlet {

/**
  * Constructor of the object.
  */
 public CheckServlet() {
  super();
 }

/**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

this.doPost(request, response);
 }

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

request.setCharacterEncoding("utf-8");
  String yzm=request.getParameter("yzm");
  HttpSession session=request.getSession(true);
  String xt=session.getAttribute("rand").toString();
  if(yzm.equals(xt)){
   System.out.println("验证码相同");
  }else{
   System.out.println("验证码不同11111111111111111111");
  }
  System.out.println("yzm:"+yzm);
  System.out.println("XT:"+xt);
  //string account = context.Session["rand"].ToString();
  //String user = session.getAttribute("rand");
 }

/**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occurs
  */
 public void init() throws ServletException {
  // Put your code here
 }

}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 <script type="text/javascript">
 function changeCode() {
  var imgNode = document.getElementById("vimg");
  imgNode.src="servlet/AuthImageServlet?"+Math.random();
 }
 </script>
  </head>
 
  <body>
 
   <form action="servlet/CheckServlet" method="post">
    <label>输入验证码</label><br>
    <input type="text" name="yzm"/><img alt="yzm" id="vimg" title="点击更换" onclick="changeCode()"
     src="servlet/AuthImageServlet"><br>
     <input type="submit" name="submit"/>
   </form>
    This is my JSP page. <br>
  </body>
</html>

java验证码问题的更多相关文章

  1. Java 验证码、二维码

    Java 验证码.二维码 资源 需要:   jelly-core-1.7.0.GA.jar网站:   http://lychie.github.io/products.html将下载下来的 jelly ...

  2. springMVC+Java验证码完善注册功能

    这篇文章简单的写了一个java验证码,为之前写过的springMVC注册功能加上验证码,验证码的作用就不多说了,防止机器人程序恶意注册什么的.. 其中User.java,加上了password和cod ...

  3. java制作验证码(java验证码小程序)

    手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...

  4. Java 验证码识别库 Tess4j 学习

    Java 验证码识别库 Tess4j 学习 [在用java的Jsoup做爬虫爬取数据时遇到了验证码识别的问题(基于maven),找了网上挺多的资料,发现Tess4j可以自动识别验证码,在这里简单记录下 ...

  5. Java 验证码工具类

    package com.wuyu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...

  6. java 验证码

    package lizikj.bigwheel.pcsystem.util;import javax.imageio.ImageIO; import java.awt.*; import java.a ...

  7. java验证码组件kaptcha使用方法

    使用方法: 项目中导入kaptcha-2.3.jar包在web.xml里面新增: <!-- 登陆验证码Kaptcha -->    <servlet>        <s ...

  8. java验证码-汉字验证码

    今天整理了一个java实现的汉字输入验证码 主要包含两个类,一个是生成验证码,一个是判断验证码输入是否正确 实现原理非常简单,将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码 ...

  9. 漂亮的自制java验证码

    网上有很多开源的验证码插件,例如jcaptcha,kaptcha等等...这些都不错,不过感觉用起来不太舒服,最后还是网上找了个原型的,然后在这个基础上修改下,效果还算不错,凑合用下,验证码要做到难以 ...

  10. java验证码(采用struts2实现)转

    第一步:编写验证码的Action package com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...

随机推荐

  1. Android 动态隐藏显示导航栏,状态栏

    Talk is cheap, show me the code. --Linus Torvalds Okay, here: 一.导航栏: [java] view plain copy private  ...

  2. 数据结构自己实现——Tree and Forest

    //中D序??遍???历???二t叉?树??? //先??序??遍???历???二t叉?树??? //后??序??遍???历???二t叉?树??? #include <iostream> ...

  3. python笔记4:高级特性

    4 高级特性 4.1  切片 [:] *注:-- list和tuple,字符串都支持切片 4.2 迭代 Iteration for ... in 及 for ... in if 两个变量迭代时, 例1 ...

  4. ruti

    也许我可以说除了我把+号写成了-号这个程序几乎是完美的

  5. CodeChef - RIN Course Selection

    Read problems statements in Mandarin Chineseand Russian. Rin is attending a university. She has M se ...

  6. 邁向IT專家成功之路的三十則鐵律 鐵律二十一:IT人用才之道-穿透

    在以道德為基礎的企業主管之人,其最根本的能力除了須要有洞悉事物的敏捷思維之外,眼光還必要有像水柱般一樣的穿山引石之能,如此不僅能夠為企業找到適才之人,更能為企業的永續經營奠定有如泰山般的基石.只可惜大 ...

  7. 邁向IT專家成功之路的三十則鐵律 鐵律十八:IT人求職之道-文化

    IT人所從事的工作是一個求新求變速度最快的行業,因此您所待的企業IT部門或資訊公司,其組織文化將關係到您在這間公司服務期間,是否能夠快速成長的決定因素.遇到不良的組織文化建議您三個就可以走人了,千萬別 ...

  8. 三维场景如何嵌入到PPT中展示?

    今天要跟大家一起交流的大体内容如标题所示,日常生活中,ppt已经成为人们工作学习生活中不可或缺的工具之一,那么三维场景是如何在ppt中加载展示的呢?请大家慢慢往下看. 1.创建命令按钮和web bro ...

  9. [Algorithms] Sort an Array with a Nested for Loop using Insertion Sort in JavaScript

    nsertion sort is another sorting algorithm that closely resembles how we might sort items in the phy ...

  10. cucumber 使用资料

    1.cucumber reporting github:https://github.com/damianszczepanik/cucumber-reporting 配置:详细参考上述地址描述 a.添 ...