package servlet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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;
/**
* Servlet implementation class ImageServlet
*/
public class ImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ImageServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response){
try {
createMathCheckCodeImage(68,22,new Color(150, 180, 195),request,response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("验证码生成失败");
}
}
//创建算术验证码图片
private void createMathCheckCodeImage(int width,int height,Color bgColor,HttpServletRequest request,HttpServletResponse response) throws IOException {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.setColor(bgColor);
g.fillRect(0, 0, width, height);
String codeStr = createMathCheckCode(g);
//addRandomLine(g,width,height,5);
ImageIO.write(bi, "JPG", response.getOutputStream());
createCheckCodeSession(request,codeStr);
}
//创建验证码图片
private void createCheckCodeImage(int width,int height,Color bgColor,HttpServletRequest request,HttpServletResponse response) throws IOException {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.setColor(bgColor);
g.fillRect(0, 0, width, height);
String codeStr = createCheckCode(g);
addRandomLine(g,width,height,5);
ImageIO.write(bi, "JPG", response.getOutputStream());
createCheckCodeSession(request,codeStr);
}
//添加干扰线
private void addRandomLine(Graphics g,int width,int height,int numbers) {
Random r = new Random();
for (int i =0; i < numbers; i++) {
int x1 = r.nextInt(width);
int x2 = r.nextInt(width);
int y1 = r.nextInt(height);
int y2 = r.nextInt(height);
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(x1, y1, x2, y2);
}
}
//随机创建验证码
private String createCheckCode(Graphics g) {
char[] code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123466789".toCharArray();
Random r = new Random();
int len = code.length;
StringBuilder sb = new StringBuilder();
for (int i =0; i < 4; i++) {
int index = r.nextInt(len);
//记得在向图片添加验证码前设置验证码的颜色,否则可能会出现有一个验证码看不见的情况
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(code[index]+"", (i*15)+3, 18);
sb.append(code[index]);
}
System.out.println(sb);
return sb.toString();
}
//创建随机算数验证码
private String createMathCheckCode(Graphics g) {
Random r = new Random();
char[] code1 = "0123456789".toCharArray();
char[] code2 = "+-*".toCharArray();
int num1 = Integer.parseInt(code1[r.nextInt(code1.length)] +"");
String operators = code2[r.nextInt(code2.length)] +"";
int num2 = Integer.parseInt(code1[r.nextInt(code1.length)] +"");
String result = calculate(num1,num2,operators) + "";
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(num1+"", 0, 18);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(operators, 20, 18);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(num2+"", 40, 18);
return result;
}
//进行验证码计算
private int calculate(int num1,int num2,String operators) {
int result = 0;
switch(operators) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
}
return result;
}
//把验证码中的数据存储在session,以便来验证登录
private void createCheckCodeSession(HttpServletRequest request,String str) {
request.getSession().setAttribute("code", str);
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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;
/**
* Servlet implementation class ImageServlet
*/
public class ImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ImageServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response){
try {
createMathCheckCodeImage(68,22,new Color(150, 180, 195),request,response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("验证码生成失败");
}
}
//创建算术验证码图片
private void createMathCheckCodeImage(int width,int height,Color bgColor,HttpServletRequest request,HttpServletResponse response) throws IOException {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.setColor(bgColor);
g.fillRect(0, 0, width, height);
String codeStr = createMathCheckCode(g);
//addRandomLine(g,width,height,5);
ImageIO.write(bi, "JPG", response.getOutputStream());
createCheckCodeSession(request,codeStr);
}
//创建验证码图片
private void createCheckCodeImage(int width,int height,Color bgColor,HttpServletRequest request,HttpServletResponse response) throws IOException {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
g.setColor(bgColor);
g.fillRect(0, 0, width, height);
String codeStr = createCheckCode(g);
addRandomLine(g,width,height,5);
ImageIO.write(bi, "JPG", response.getOutputStream());
createCheckCodeSession(request,codeStr);
}
//添加干扰线
private void addRandomLine(Graphics g,int width,int height,int numbers) {
Random r = new Random();
for (int i =0; i < numbers; i++) {
int x1 = r.nextInt(width);
int x2 = r.nextInt(width);
int y1 = r.nextInt(height);
int y2 = r.nextInt(height);
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(x1, y1, x2, y2);
}
}
//随机创建验证码
private String createCheckCode(Graphics g) {
char[] code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123466789".toCharArray();
Random r = new Random();
int len = code.length;
StringBuilder sb = new StringBuilder();
for (int i =0; i < 4; i++) {
int index = r.nextInt(len);
//记得在向图片添加验证码前设置验证码的颜色,否则可能会出现有一个验证码看不见的情况
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(code[index]+"", (i*15)+3, 18);
sb.append(code[index]);
}
System.out.println(sb);
return sb.toString();
}
//创建随机算数验证码
private String createMathCheckCode(Graphics g) {
Random r = new Random();
char[] code1 = "0123456789".toCharArray();
char[] code2 = "+-*".toCharArray();
int num1 = Integer.parseInt(code1[r.nextInt(code1.length)] +"");
String operators = code2[r.nextInt(code2.length)] +"";
int num2 = Integer.parseInt(code1[r.nextInt(code1.length)] +"");
String result = calculate(num1,num2,operators) + "";
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(num1+"", 0, 18);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(operators, 20, 18);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(num2+"", 40, 18);
return result;
}
//进行验证码计算
private int calculate(int num1,int num2,String operators) {
int result = 0;
switch(operators) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
}
return result;
}
//把验证码中的数据存储在session,以便来验证登录
private void createCheckCodeSession(HttpServletRequest request,String str) {
request.getSession().setAttribute("code", str);
}
}