Html页面:
<!DOCTYPEhtmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert titlehere</title>
<scripttype="text/javascript">
function changeimage(img){
img.src=img.src+"?"+new Date().getTime();/*之所以不用img.src=img.src,是因为浏览器会因为缓存问题
再次使用原来的图片,而不再问服务器请求。*/
}
</script>
</head>
<body>
<formaction="">
用户名:<inputtype="text"name="username"><br>
密码:<inputtype="text"name="password"><br>
验证码:<inputtype="text">
<imgsrc="/text/demo2"onclick="changeimage(this)"alt="换一张"style="cursor:hand"><br>
<inputtype="submit"value="注册">
</form>
</body>
</html>
//实现验证码图片
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.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.sun.org.apache.bcel.internal.generic.Type;
/**
*Servlet implementation class demo1
*/
public class demo2 extends HttpServlet {
publicstatic int WIDTH=140,HEIGHT=30;
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
/*OutputStreamoutput=response.getOutputStream();*/
BufferedImageimage=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphicsg=image.getGraphics();
fillimageColor(g);
drawimageRect(g);
drawimageLine(g);
drawimageString((Graphics2D)g);
response.setHeader("refresh","3");//定时刷新,3秒
//发头控制浏览器不要缓存
response.setDateHeader("expries",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setContentType("image/jpeg");
ImageIO.write(image,"jpg", response.getOutputStream());
}
privatevoid drawimageString(Graphics2D g) {
Stringstr="\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f";
Strings=null;
intk=0,n=10;
g.setColor(Color.BLUE);
g.setFont(newFont("宋体",Font.BOLD,20));
for(inti=0;i<4;i++){
k=newRandom().nextInt(str.length());
s=str.substring(k,k+1);
intdegree=new Random().nextInt()%30;//余数可能是正30或者是-30
g.rotate(degree*Math.PI/180,n,20);//旋转
g.drawString(s,n,20);
g.rotate(-degree*Math.PI/180,n,20);
n+=30;
}
intdegree=new Random().nextInt(30);
}
privatevoid drawimageLine(Graphics g) {
g.setColor(Color.green);
for(inti=0;i<8;i++)
g.drawLine((newRandom()).nextInt(150), (new Random()).nextInt(30), (newRandom()).nextInt(150), (new Random()).nextInt(30));
}
privatevoid drawimageRect(Graphics g) {
g.setColor(Color.BLUE);
g.drawRect(1,1, WIDTH-2, HEIGHT-2);
}
privatevoid fillimageColor(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0,0, WIDTH, HEIGHT);
}
protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
doGet(request,response);
}
}