⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 validatecode.java

📁 一个用java开发的具有搜索功能的图书管理系统
💻 JAVA
字号:
package library;

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

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ValidateCode extends HttpServlet {

	    
	  /**
	   * bug:在JSP页面刷新时生成很慢,有时甚至刷不出来
	   * 
		 * 在WEB-INF/web.xml中加入:
		 * 
		 <servlet> <servlet-name>ValidateCode</servlet-name>
		 <servlet-class>library.ValidateCode</servlet-class> </servlet>
		  
		 <servlet-mapping> <servlet-name>ValidateCode</servlet-name>
		 <url-pattern>/ValidateCode</url-pattern> </servlet-mapping> 调用方法
		 <img src="http://...../getImg">
		 * 
		 * 原理,在servlet中随机生成一个4位数字1000-9999 然后把这数字写入session 输出一个图片,上面写有这四个数字
		 * 在服务器端根据用户输入的数字和 session中的值比较。
		 * 
		 */
	private static final long serialVersionUID = 1L;
	/**     
	  *   Title:   ValidateCode.java     
	  *   Description:   这个class主要实现随机生成一个4位数的验证码,并写入session,     
	  *   Copyright:   Copyright   (c)   2003     
	  *   Company:   蓝星软件     
	  *   @author   falcon     
	  *   @version   1.1     
	  */     
	    
	private Font mFont = new Font("宋体", Font.BOLD, 18);//设置字体     

	//处理post     
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

	/** 
	* 返回一个随机颜色 
	* @param int fc 随机数 
	* @param int bc 随机数 
	* @param Random random 随机数 
	* @return Color 返回一个新颜色 
	*/ 
	synchronized Color getRandColor(int fc,int bc,Random random)
	{ 
		int r=fc+random.nextInt(bc-fc-6); 
		int g=fc+random.nextInt(bc-fc-4); 
		int b=fc+random.nextInt(bc-fc-8); 
		if(r>255)r%=255;
		if(g>255)g%=255;
		if(b>255)b%=255;
		return new Color(r,g,b); 
	} 

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//取得一个1000-9999的随机数     

		//设置页面不缓存     
		  response.setHeader("Pragma","No-cache");     
		  response.setHeader("Cache-Control","no-cache");     
		  response.setDateHeader("Expires",   0);     

		int intCount = 0;

		intCount = (new Random()).nextInt(9999);//     

		if (intCount < 1000)
		{
			intCount += 1000;
		}

		String s=String.valueOf(intCount);
		HttpSession session = request.getSession(true);			//对session付值。  
		session.setAttribute("ValidateCode", s);
		response.setContentType("image/gif");
		ServletOutputStream out = response.getOutputStream();

		BufferedImage image = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
		Graphics gra = image.getGraphics();
		gra.setColor(Color.orange);					//设置背景色     
		gra.fillRect(1, 1, 59, 19);
		gra.setColor(Color.blue);				//设置字体色     
		gra.setFont(mFont);						//输出数字
		Random random = new Random(); 
		char c;
		
		for (int i = 0; i < 4; i++) {
			gra.setColor(getRandColor(random.nextInt(125),random.nextInt(231), random));
			c = s.charAt(i);
			gra.drawString(String.valueOf(c), i * 12 + 4, 18); //7为宽度,11为上下高度位置     
		}
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(image);
		out.close();

	}     

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -