现在的位置: 首页 > 综合 > 正文

黑马程序员_JavaWeb之验证码

2018年02月17日 ⁄ 综合 ⁄ 共 2963字 ⁄ 字号 评论关闭

---------------------- android培训java培训、期待与您交流! ----------------------

 

想在市面上一些常见的商务网站、论坛、个人博客都需要登陆注册,随之而来的就是安全上的提高,许多设计师都在验证码上下功夫,最近做项目看了好多验证码的编写觉得这个真的很好自己也理解的不错 把每一步的作用以及程序的运行都有说明,大家看看吧,有不足的地方大家给指出来 一定要说的 还有记得留下足印哦$_$....

public class Imagetest extends HttpServlet {
 //将要添加进图片的字符当然这些字符是被随机进去的
 public static final char[] CHARS={'a','b','c','d','e','f','g','h','i','j','k','m','n','o','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
 //创建随机对象Random对象
 public static Random random=new Random();
 //获取随机字符的方法返回字符串
 public static String getRandomString(){
  StringBuilder builder=new StringBuilder();
  for (int i = 0; i < 6; i++) {//每次要六个字符
   builder.append(CHARS[random.nextInt(CHARS.length)]);
  }
  return builder.toString();
 }
 //图片背景的颜色
 public static Color getColor(){
  return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
 }
 
 //获取当前图片的反色为了让图片颜色和图片的颜色形成鲜明的对比
 public static Color getReverseColor(Color c){
  return new Color(255-c.getRed(),255-c.getBlue(),255-c.getGreen());
 }
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  System.out.println("00000000000000000000000000000000");
   response.setContentType("imae/jpeg");
   String randomString=getRandomString();//获取在之前随机出来的数字
   //将之前的随机字符转放到session中一边在前端调用
   request.getSession(true).setAttribute("randomString", randomString);
   //从现在开始画图片
   //第一步设置图片的高度和宽度
   int width=100;
   int height=30;
   //获取图片的颜色
   Color color=getColor();
   //获取图片的反色
   Color reveserColor=getReverseColor(color);
   //创建一个以红蓝绿为基色的图片
   BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics2D g=bi.createGraphics();//用之前的图片来创建一个画图对象
   //设置在图片上的字体
   g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,18));//Font构造中的参数:字体的样式,字体加粗,字体大小
   //设置颜色
   g.setColor(color);
   //绘制背景
   g.fillRect(0, 0, width, height);//以浏览器的左上角为原点,以width为宽度,以height为高度
   //设置颜色(这里是给字体设置颜色,所以取的是反色)
   g.setColor(reveserColor);
   //在已经画好的图片上写入随机好的字符
   g.drawString(randomString, 18, 20);
   //下面的工作是为了效果更加明显为图片加入噪音点
   for (int i = 0,n=random.nextInt(100); i <n; i++) {
    g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);//在一定范围内画噪音点
   }
   //利用字节流将图片转成JPEG格式
   ServletOutputStream out=response.getOutputStream();
   JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);//编码器
   encoder.encode(bi);//对刚刚画好的图片进行编码
   out.flush();//输出到客户端
 }

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

  this.doGet(request, response);//这样写的目的大家一目了然
 }

}

//web.xml的配置情况

<servlet>

       <servlet-name>Imagetest</servlet-name>

       <servlet-class>Imagetest</servlet-class>

</servlet>

<servlet-mapping>

       <servlet-name>Imagetest</servlet-name>

       <url-pattern>/servlet/Imagetest</url-pattern>

</servlet-mapping>

//前台JSP代码部分

<img src="servlet/Imagetest"></img>

 

---------------------- android培训java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima

抱歉!评论已关闭.