最近学习网站开发,做到注册时希望提高网站安全性,故给网站做了验证码。

    首先给出一个可运行的验证码图片生成程序,以applet形式呈现。后面附上代码下载链接,在此不研究程序具体实现。

    验证码生成大概步骤是:

    1.获得随机字符

    2.将字符绘制到图片上

    3.添加干扰线

    4.添加燥点

    5.将图片以BufferedImage形式返回。

    程序结果如图:

java生成验证码图片并应用在struts2程序上_第1张图片

 

    现在说明它如何在struts2中实现并如何显示在页面上。

    产生在action中新建一个方法getCheckCode();

public String getCheckCode() {
// 获取验证码字符。
code = CheckCodeUtils.getCheckCodeString();
// 将验证码写在图片上,返回BufferedImage对象
BufferedImage p_w_picpath = CheckCodeUtils.getCheckCodeImage(code);
ServletActionContext.getRequest().setAttribute("registerCode", code);
//      // 方法1
//      HttpServletResponse response = ServletActionContext.getResponse();
//      ServletActionContext.getResponse().setContentType("p_w_picpath/jpeg");
//      try {
//          ServletOutputStream out = response.getOutputStream();
//          ImageIO.write(p_w_picpath, "jpeg", out);
//          out.flush();
//          out.close();
//      } catch (IOException e) {
//          e.printStackTrace();
//      }
//      return null;
//      方法2
//      将图片转换为流
inputStream=CheckCodeUtils.trimToInputStream(p_w_picpath);
return "CODE";
}

    其中code是验证码的具体内容,而它相应的图片则被封装成图片流输出到页面上,CheckCodeUtils是上面讲的java形式的验证码生成程序,我已经做了封装,后面会给出代码。

    jsp中:

 






看不清?换一张

注意    以上jsp代码只是大概代码,并不保证能够运行,所以不能直接复制。各位只要看

里面的内容和javascript里面的内容就可以了(这两个是一定能执行的)。

    struts2.xm



p_w_picpath/jpeg
inputStream
2048

    由于在action方法getCheckCode()中给出了两个方法,其中第二个方法有一个返回结果,所以配置了一个stream类型的result。(注意第一个方法是不需要result,但写上去也没关系)  

  最终程序结果如图:

wKiom1L52cjhH5JJAABlSyLzP8o026.jpg