验证码的制作

来源:互联网 发布:备份数据库的sql语句 编辑:程序博客网 时间:2024/05/16 10:23

【制作验证码】


web.xml配置为:

  <!-- com.gdy.xiazai.getimage 类的创建 -->  <servlet>  <servlet-name>gimg</servlet-name>  <servlet-class>com.gdy.xiazai.getimage</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>gimg</servlet-name>  <url-pattern>*.gimg</url-pattern>  </servlet-mapping>    <welcome-file-list>    <welcome-file>login.html</welcome-file>  </welcome-file-list>


后台java代码为:

package com.gdy.xiazai;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;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;/** * 【*。gimg】请求处理类 * 功能: * 制作验证码 * @author Administrator * */public class getimage extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//getimg(req,resp);outputYZM(req, resp);}/** * 验证码的制作 * @param req * @param resp */protected void outputYZM(HttpServletRequest req, HttpServletResponse resp){int width=100;int height=20;//创建缓存图像BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);//创建画笔Graphics grap=image.getGraphics();//指定边框颜色grap.setColor(Color.RED);//画图像边框grap.drawRect(0, 0, width, height);//填充一下矩形的背景颜色//设定画笔的颜色grap.setColor(Color.YELLOW);//填充矩形背景grap.fillRect(1, 1, width-2, height-2);//填充内容//设置画笔的颜色grap.setColor(Color.BLACK);String str="Android训练营";//随机产生4个数字输出到页面Random r=new Random();for(int i=0;i<4;i++){//产生随机数字//int n= r.nextInt(10);//grap.drawString(n+"", ((width-2)/5)*(i+1), 16);int flag=r.nextBoolean()?1:-1;//设置随机大小的字体grap.setFont(new Font("幼圆",Font.BOLD + Font.ITALIC,20+flag*r.nextInt(10)));//产生随机字符grap.drawString(str.charAt(r.nextInt(str.length()))+"", ((width-2)/5)*(i+1)+flag*r.nextInt(6), 14+r.nextInt(4)*flag);}//设置干扰线grap.setColor(Color.GRAY);//画30条干扰线for(int i=0;i<r.nextInt(30);i++){grap.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));}//将图片输出到客户端try {//告诉客户端不要缓存图像resp.setHeader("Expires", -1+"");resp.setHeader("Cache-control", "no-cache");resp.setHeader("Pragma", "no-cache");ImageIO.write(image, "jpg", resp.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}



HTML代码为:

<!DOCTYPE html><html>  <head>    <title>MyHtml.html</title>    <meta http-equiv="content-type" content="text/html; charset=UTF-8">  </head>  <body>    <table>    <tr>    <td>姓名:</td>    <td><input type="text"></td>    </tr>    <tr>    <td>年龄:</td>    <td><input type="text"></td>    </tr>    <tr>    <td><input type="text"></td>    <td>验证码:<img id="id_yzm" src="/T20160419/a.gimg" onclick="change()" /><a  href="javascript:change()" >看不起, 换一张</a></td>    <script type="text/javascript">    function change(){    //alert("aa");    var yzm=document.getElementById("id_yzm");    //加一个无意义的参数,让地址每次都变化    yzm.src="/T20160419/a.gimg?t="+new Date().getTime();    }    </script>    </tr>    <tr>    <td></td>    <td><input type="submit" value="提交"></td>    </tr>    </table>  </body></html>

效果图如下:


0 0
原创粉丝点击