验证码图片生成及刷新方法2(JSP生成)
来源:互联网 发布:雅思背单词软件 编辑:程序博客网 时间:2024/05/17 10:07
生成图片的类代码如下:
package com.lqh.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class RandImageCreater {
HttpServletResponse response ;
public static final int WIDTH = 60;
public static final int HEIGHT = 20;
public static Random random = new Random();
public RandImageCreater(HttpServletResponse response) {
this.response = response;
}
public String createImage() {
char[] codes = createCodes();
try {
BufferedImage bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
drawBackground(g);
drawCodes(g, codes);
g.dispose();
//通过构造方法拿到JSP页面的Response对象,输出图片
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(response.getOutputStream());
en.encode(bi);
} catch (ImageFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return new String(codes);
}
private char[] createCodes() {
String codeSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] codes = new char[4];
for(int i=0; i<codes.length; i++) {
codes[i] = codeSet.charAt(random.nextInt(62));
}
return codes;
}
public void drawCodes(Graphics g, char[] codes) {
Color c = g.getColor();
g.setColor(Color.black);
g.setFont(new Font(Font.DIALOG, Font.BOLD, 15));
g.drawString("" + codes[0], 1, 17);
g.drawString("" + codes[1], 16, 15);
g.drawString("" + codes[2], 31, 18);
g.drawString("" + codes[3], 46, 16);
g.setColor(c);
//System.out.println(codes);
}
public void drawBackground(Graphics g) {
Color cc = g.getColor();
g.setColor(Color.red);
g.fillRect(0, 0, WIDTH, HEIGHT);
for(int i=0; i<100; i++) {
int x = random.nextInt(WIDTH);
int y = random.nextInt(HEIGHT);
int r = random.nextInt(255);
int gg = random.nextInt(255);
int b = random.nextInt(255);
Color c = new Color(r, gg, b);
g.setColor(c);
g.fillOval(x, y, 5, 5);
}
g.setColor(cc);
}
}
生成图片的Jsp页面代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ page import="com.lqh.util.*, java.io.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
response.setHeader("pragma","No-cache");
response.setHeader("Cache-Control", "No-store");
response.setHeader("Expires","0");
RandImageCreater rc = new RandImageCreater(response);
String rand = rc.createImage();
session.setAttribute("rand",rand);
%>
<%
out.clear();
out = pageContext.pushBody();
//不能省略,否则会提示getOutputStream() has already been called for this response 错误。原因是JSP默认的输出流为PrintWriter ,即<% %>以外的东西所默认的输出方式,如果你尝试在JSP中使用ServletOutputStream就会引起错误
%>
登陆的页面代码如下:
<script type="text/javascript">
function change() {
document.getElementById("code").src = "image.jsp?t=" + Math.random();
//同样,后面的随机数不能省略
}
</script>
</head>
<body>
<center>
<h2>管理员登陆</h2>
<br />
<br />
输入用户名: <input type="text" name="username" />
<br />
<br />
输入密码: <input type="password" name="password"/>
<br />
<br />
验证码:
<a href="javascript:change()">
<img id="code" alt="看不清楚换一个" src="image.jsp" /> </a>
</center>
</body>
- 验证码图片生成及刷新方法2(JSP生成)
- 验证码图片生成以及刷新的方法1(Servlet生成)
- JSP生成图片验证码
- JSP生成图片验证码
- jsp 生成 图片验证码
- Jsp生成图片验证码
- JSP验证码图片生成
- jsp生成图片验证码
- jsp验证码生成以及刷新
- Servlet生成验证码在JSP页面显示,单击验证码图片可刷新
- 生成图片验证码方法
- JSP页面的验证码生成及调用方法
- Jsp-图片验证码及刷新
- 转贴:Jsp中生成验证码图片
- jsp随机验证码图片生成
- JSP生成中文图片验证码
- JSP中生成验证码图片
- JSP生成中文图片验证码
- 视觉营销VMD-让转化率如此彪悍
- 使用Jquery进行ajax提交时候遇到的问题
- jquery ajax请求的异步属性
- 作为Web开发人员,我为什么喜欢Google Chrome浏览器
- 调用现有程序的接口(分享),发送和保存消息; 卸载程序的代码收藏
- 验证码图片生成及刷新方法2(JSP生成)
- 我对Makefile理解
- Lesson6: 菜单编程
- AIX查看硬件配置的若干命令
- 精确计算
- y4m文件转换成yuv
- Lesson7: 对话框编程
- 名侦探柯南
- Lesson9: 定制应用程序的外观