输出随机认证码图片准备工作:建立javaweb工程名为servlet1,在工程下建立包cn.response,在包下建立servlet名为:ResponseDemo3.java ;并在工程下建立loginweb.jsp
1.ResponseDemo3.java 代码如下:
package cn.response;
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.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;
/**
*
* @author 飞鸟
* Date: 2014-2-18
* project_name: servlet1
* file_name: ResponseDemo3.java
* 输出随机认证码图片
*/
public class ResponseDemo3 extends HttpServlet {
public static final int WIDTH=120;
public static final int HEIGHT=25;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//1.设置背景色
setBackGround(g);
//2.设置边框
setBorder(g);
//3.画干扰线
drawRandomLine(g);
//4.写随机数
drawRandomNum((Graphics2D)g);
//5.图形写给浏览器
response.setContentType("image/jpeg");
//发头控制浏览器不要缓存
response.setDateHeader("expries",-1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
}
private void setBackGround(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0,0,WIDTH,HEIGHT);
}
private void setBorder(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
}
private void drawRandomLine(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.GREEN);
for(int i=0;i<5;i++){
int x1=new Random().nextInt(WIDTH);
int y1=new Random().nextInt(HEIGHT);
int x2=new Random().nextInt(WIDTH);
int y2=new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g) {
// TODO Auto-generated method stub
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.ITALIC,20));
String base="\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97"+
"\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66"+
"\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1";
int x=5;
for(int i=0;i<4;i++){
int degree=new Random().nextInt()%30;
String cn= base.charAt(new Random().nextInt(base.length()))+"";
g.rotate(degree*Math.PI/180,x,20);
g.drawString(cn, x, 20);
g.rotate(-degree*Math.PI/180,x,20);
x+=30;
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
2.login.jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript"">
function changeImage(img){
img.src=img.src+"?"+new Date().getTime();
}
</script>
</head>
<body>
<form name="form1" action="dologin.jsp" method="post">
<label>用户名</label><input type="text" name="username"><br/>
<label>密 码</label><input type="password" name="password"><br/>
<label>验证码</label><input type="text" name="checkcode"><img src="/servlet1/ResponseDemo3" οnclick="changeImage(this)" alt="换一张" style="cursor:hand"><br/>
<input type="submit" name="submit" value="提交">
<input type="reset" name="reset" value="清除">
</form>
</body>
</html>