登陆时的验证码设计、及点击刷新的编写方式

</pre><pre class="java" name="code">jvaservlet的代码,这里是绘制验证码的图片
package com.cn.demol2;

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.PrintWriter;
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;

public class Checkpic extends HttpServlet {
	//第一步创建图片的规格大小
	public static final int WIDTH = 150;
	public static final int HEIGTH = 30;
	

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		BufferedImage image = new BufferedImage(WIDTH, HEIGTH, BufferedImage.TYPE_INT_RGB);
		Graphics g = image.getGraphics();
//设置背景颜色
		setBackground(g);
//设置边框
		setBorder(g);
//设置干扰线
		setRandomLine(g);
//写随机数		
		setRondomNum((Graphics2D) g);
		response.setDateHeader("expries",-1);
		response.setHeader("cache", "no-cache");
		response.setHeader("pragma", "no-cache");
		response.setContentType("image/jpeg");
		ImageIO.write(image,"jpg",response.getOutputStream());
	}






	private void setRondomNum(Graphics2D g) {
		// TODO Auto-generated method stub
		
		g.setColor(Color.BLACK);
		g.setFont(new Font("宋体",Font.BOLD,20));
		String data = "本时钟仅供参考不作为计费依据您已经建立了宽带上网的连接如果您想继续使用宽带上网功能请不要关闭本窗口如果您想断开连接请单击下线按钮";//随机出现在图片中的字段
		int x = 5;
		for(int i = 0;i<4;i++){
			int degree = new Random().nextInt()%30;
			String ch = data.charAt(new Random().nextInt(data.length()))+"";//强制字符转换

			
			
			 g.rotate(degree * Math.PI/180,x,20);//旋转的角度
			 g.drawString(ch, x, 20);
			 g.rotate(-degree * Math.PI/180,x,20);//反向旋转
			 x+=30;//避免字体重叠
		}
	}



	private void setRandomLine(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.RED);
		for(int i= 0;i<6;i++){
			int x1 = new Random().nextInt(WIDTH);
			int y1 = new Random().nextInt(HEIGTH);
			int x2 = new Random().nextInt(WIDTH);
			int y2 = new Random().nextInt(HEIGTH);
			g.drawLine(x1, y1, x2, y2);//得到6条随机线
			
		}
	}



	private void setBorder(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.BLUE);
		g.drawRect(1, 1, WIDTH-2, HEIGTH-2);//设计边框颜色,大小
	}



	private void setBackground(Graphics g) {
		// TODO Auto-generated method stub
		g.setColor(Color.WHITE);
		g.fillRect(0,0,WIDTH,HEIGTH);设计验证码图片的背景颜色和颜色填充的大小
	}

}
jsp页面 :
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   <script type="text/javascript">function  ChangeImage(img){
   img.src = img.src+"?"+new Date().getTime();
   }<!--创建changeimage的方法-->
   </script>
    
    <title>注册页面</title>
 
  </head>
  
  <body>
  <form>
  <table>
  <tr>
  <td>
  id:<input type = "text" ><br/>
  </td>
  </tr>
  <tr>
  <td>
  密码:<input type = "password"><br/>
  
  </td>
  </tr>
  <tr>
  <td>
  验证码:<input type = "text"> <img src = "/note/servlet/Checkpic" onclick = "ChangeImage (this)"  alt = "换一张" style = "cursor:hand"><!--在图片上单击刷新图片验证码,并且将鼠标的箭头在图片上的状态改成手的形状-->
  <br/>
  </td>
  </tr>
  <tr>
  <td>
  <input type = "submit" value = "提交">
  <input type = "reset" value = "重置"><br/>
  </td>
  </tr>
  </table>
  </form>
    
  </body>
</html>
<img width="783" height="733" style="width: 634px; height: 552px;" src="https://img-blog.csdn.net/20160805192809368?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值