验证码实现

Html页面:

<!DOCTYPEhtmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">

<title>Insert titlehere</title>

 

<scripttype="text/javascript">

    function changeimage(img){

       img.src=img.src+"?"+new Date().getTime();/*之所以不用img.src=img.src,是因为浏览器会因为缓存问题

                                                再次使用原来的图片,而不再问服务器请求。*/

    }

</script>

</head>

<body>

    <formaction="">

       用户名:<inputtype="text"name="username"><br>

       密码:<inputtype="text"name="password"><br> 

       验证码:<inputtype="text">

       <imgsrc="/text/demo2"onclick="changeimage(this)"alt="换一张"style="cursor:hand"><br>

       <inputtype="submit"value="注册">

    </form>

      

</body>

</html>


验证码servlet:

//实现验证码图片

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

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;

importjavax.servlet.http.HttpServletResponse;

 

importcom.sun.org.apache.bcel.internal.generic.Type;

/**

 *Servlet implementation class demo1

 */

public class demo2 extends HttpServlet {  

       publicstatic int WIDTH=140,HEIGHT=30;  

       protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {       

              /*OutputStreamoutput=response.getOutputStream();*/

              BufferedImageimage=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

              Graphicsg=image.getGraphics();

              fillimageColor(g);

              drawimageRect(g);

              drawimageLine(g);

              drawimageString((Graphics2D)g);         

              response.setHeader("refresh","3");//定时刷新,3秒

              //发头控制浏览器不要缓存

              response.setDateHeader("expries",-1);

              response.setHeader("Cache-Control","no-cache");

              response.setHeader("Pragma","no-cache");

             

              response.setContentType("image/jpeg");

              ImageIO.write(image,"jpg", response.getOutputStream());          

       } 

       privatevoid drawimageString(Graphics2D g) {

              Stringstr="\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f";

              Strings=null;

              intk=0,n=10;

              g.setColor(Color.BLUE);

              g.setFont(newFont("宋体",Font.BOLD,20));

              for(inti=0;i<4;i++){

                     k=newRandom().nextInt(str.length());

                     s=str.substring(k,k+1);

                     intdegree=new Random().nextInt()%30;//余数可能是正30或者是-30

                     g.rotate(degree*Math.PI/180,n,20);//旋转

                     g.drawString(s,n,20);

                     g.rotate(-degree*Math.PI/180,n,20);

                     n+=30;

              }

              intdegree=new Random().nextInt(30);       

       }

       privatevoid drawimageLine(Graphics g) {

              g.setColor(Color.green);

              for(inti=0;i<8;i++)

              g.drawLine((newRandom()).nextInt(150), (new Random()).nextInt(30), (newRandom()).nextInt(150), (new Random()).nextInt(30));

       }

       privatevoid drawimageRect(Graphics g) {

              g.setColor(Color.BLUE);

              g.drawRect(1,1, WIDTH-2, HEIGHT-2);            

       } 

       privatevoid fillimageColor(Graphics g) {

              g.setColor(Color.WHITE);

              g.fillRect(0,0, WIDTH, HEIGHT);             

       }

       protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

              doGet(request,response);

       }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值