📄 validatecode.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 + -