验证码总是无法显示!!验证码代码:
package hu.net.util;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;
public class randomCodeAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private HttpServletResponse response;
//设置验证码图片高度
private int height = 60;
//设置验证码图片宽度
private int width = 20;
private char[] Codesequences = {'A','B','C','D','E','F','G','H','I','J','K'};
public String execute() throws Exception{
BufferedImage buffImg = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//创建一个随机数生成器类
Random random = new Random();
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
//创建字体,字体的大小应该根据图片的高度来定
Font font = new Font("宋体",Font.BOLD,20);
//设置字体
g.setFont(font);
//画边框
g.setColor(Color.BLACK);
g.drawRect(0, 0, width = 1, height = 1);
//RandomCode用于保存随机生成的验证码
StringBuffer randomCode = new StringBuffer();
int red =0,green = 0,blue = 0;
//随机产生4位数字验证码
for(int i=0;i<4;i++) {
//得到随机产生的验证码数字
String strRand = String.valueOf(Codesequences[random.nextInt()]);
//产生随机的颜色量来构成颜色值,这样输出的每位验证码的颜色都不同
red = random.nextInt(50);
green = random.nextInt(50);
blue = random.nextInt(50);
//用随机产生的颜色验证码绘制到图像中
g.setColor(new Color(red,green,blue));
g.drawString(strRand, 13 * i + 6, 16);
//将产生的四个随机数组合到一起
randomCode.append(strRand);
}
//将4位数字验证码保存到SESSION中
HttpSession session = request.getSession();
session.setAttribute("randonCode", randomCode.toString());
//禁止图形缓存
response.setHeader("pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//图像输出到Servlet输出流中
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(buffImg, "jepg", sos);
sos.close();
return null;
} public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
} public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response = response;
}
}struts.xml配置:
<action name="randomImg" class="hu.net.util.randomCodeAction">
</action>验证码显示页面代码:
<tr>
<td class="formelem">用户名:</td>
<td class="formelem2"><s:textfield name="userName" /></td>
</tr>
<tr>
<td class="formelem">密码:</td>
<td class="formelem2"><s:password name="password" /></td>
</tr>
<tr>
<td class="formelem">用户类型:</td>
<td class="formelem2">
<s:select name="roleId" list="#{1:'admin',2:'stu'}" headkey="0" headvalue="---请选择---"/>
</td>
</tr>
<tr>
<td class="formelem">验证码:</td>
<td class="formelem2">
<s:textfield name="randomCode"/>
<img src="randomImg.action">
</td>
</tr>struts2验证码图片
package hu.net.util;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;
public class randomCodeAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private HttpServletResponse response;
//设置验证码图片高度
private int height = 60;
//设置验证码图片宽度
private int width = 20;
private char[] Codesequences = {'A','B','C','D','E','F','G','H','I','J','K'};
public String execute() throws Exception{
BufferedImage buffImg = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//创建一个随机数生成器类
Random random = new Random();
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
//创建字体,字体的大小应该根据图片的高度来定
Font font = new Font("宋体",Font.BOLD,20);
//设置字体
g.setFont(font);
//画边框
g.setColor(Color.BLACK);
g.drawRect(0, 0, width = 1, height = 1);
//RandomCode用于保存随机生成的验证码
StringBuffer randomCode = new StringBuffer();
int red =0,green = 0,blue = 0;
//随机产生4位数字验证码
for(int i=0;i<4;i++) {
//得到随机产生的验证码数字
String strRand = String.valueOf(Codesequences[random.nextInt()]);
//产生随机的颜色量来构成颜色值,这样输出的每位验证码的颜色都不同
red = random.nextInt(50);
green = random.nextInt(50);
blue = random.nextInt(50);
//用随机产生的颜色验证码绘制到图像中
g.setColor(new Color(red,green,blue));
g.drawString(strRand, 13 * i + 6, 16);
//将产生的四个随机数组合到一起
randomCode.append(strRand);
}
//将4位数字验证码保存到SESSION中
HttpSession session = request.getSession();
session.setAttribute("randonCode", randomCode.toString());
//禁止图形缓存
response.setHeader("pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//图像输出到Servlet输出流中
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(buffImg, "jepg", sos);
sos.close();
return null;
} public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request = request;
} public void setServletResponse(HttpServletResponse response) {
// TODO Auto-generated method stub
this.response = response;
}
}struts.xml配置:
<action name="randomImg" class="hu.net.util.randomCodeAction">
</action>验证码显示页面代码:
<tr>
<td class="formelem">用户名:</td>
<td class="formelem2"><s:textfield name="userName" /></td>
</tr>
<tr>
<td class="formelem">密码:</td>
<td class="formelem2"><s:password name="password" /></td>
</tr>
<tr>
<td class="formelem">用户类型:</td>
<td class="formelem2">
<s:select name="roleId" list="#{1:'admin',2:'stu'}" headkey="0" headvalue="---请选择---"/>
</td>
</tr>
<tr>
<td class="formelem">验证码:</td>
<td class="formelem2">
<s:textfield name="randomCode"/>
<img src="randomImg.action">
</td>
</tr>struts2验证码图片
解决方案 »
- 请教Spring AOP问题
- 求几款可以动态编辑的java web图形报表
- 不知道这个JSP网站,大家能访问到不
- 我想知道Struts 和Spring框架在什么时候该用 什么时候不用
- 字段截取
- String literal is not properly closed by a double-quote求助
- 关于VC开发socket客户端和用java开发的socket服务器端通信的问题!
- 求救!为什么我的servlet提交给自己会出错!
- jsp服务端软件
- JSTL如何获取一行的值
- 关于java web应用中的如何用程序控制session的生命周期
- 关于javaWeb项目中遇到的难点(数据锁定)
路径换一下试试
好像提示数组越界错误,非常感谢,请问我要怎么解决它?
java.lang.ArrayIndexOutOfBoundsException: -99788319
hu.net.util.randomCodeAction.execute(randomCodeAction.java:61)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
所以你最好把它改为:
random.nextInt(Codesequences.length)