`

jsp、struts 生成验证码

    博客分类:
  • jsp
阅读更多

一、servlet实现验证码的生成:

第一步:

web.xml配置

01.<servlet>      
02.    <servlet-name>image</servlet-name>      
03.    <servlet-class>org.test.web.AuthImage</servlet-class>      
04.</servlet>      
05.     
06.<servlet-mapping>      
07.    <servlet-name>image</servlet-name>      
08. <url-pattern>/authImage</url-pattern>      
09.</servlet-mapping>    

 第二步:

servlet配置:

01.public class AuthImage extends HttpServlet      
02.{      
03.     
04.    private static final String CONTENT_TYPE = "text/html; charset=gb2312";      
05.    //设置字母的大小,大小      
06.    private Font mFont = new Font("Times New Roman", Font.PLAIN, 17);      
07.    public void init() throws ServletException      
08.    {      
09.        super.init();      
10.    }      
11.    Color getRandColor(int fc,int bc)      
12.    {      
13.        Random random = new Random();      
14.        if(fc>255) fc=255;      
15.        if(bc>255) bc=255;      
16.        int r=fc+random.nextInt(bc-fc);      
17.        int g=fc+random.nextInt(bc-fc);      
18.        int b=fc+random.nextInt(bc-fc);      
19.        return new Color(r,g,b);      
20.    }      
21.     
22.    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException      
23.    {      
24.        response.setHeader("Pragma","No-cache");      
25.        response.setHeader("Cache-Control","no-cache");      
26.        response.setDateHeader("Expires", 0);      
27.        //表明生成的响应是图片      
28.        response.setContentType("image/jpeg");      
29.              
30.        int width=100, height=18;      
31.        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);      
32.              
33.        Graphics g = image.getGraphics();      
34.        Random random = new Random();      
35.        g.setColor(getRandColor(200,250));      
36.        g.fillRect(1, 1, width-1, height-1);      
37.        g.setColor(new Color(102,102,102));      
38.        g.drawRect(0, 0, width-1, height-1);      
39.        g.setFont(mFont);      
40.     
41.        g.setColor(getRandColor(160,200));      
42.     
43.        //画随机线      
44.        for (int i=0;i<155;i++)      
45.        {      
46.            int x = random.nextInt(width - 1);      
47.            int y = random.nextInt(height - 1);      
48.            int xl = random.nextInt(6) + 1;      
49.            int yl = random.nextInt(12) + 1;      
50.            g.drawLine(x,y,x + xl,y + yl);      
51.        }      
52.     
53.        //从另一方向画随机线      
54.        for (int i = 0;i < 70;i++)      
55.        {      
56.            int x = random.nextInt(width - 1);      
57.            int y = random.nextInt(height - 1);      
58.            int xl = random.nextInt(12) + 1;      
59.            int yl = random.nextInt(6) + 1;      
60.            g.drawLine(x,y,x - xl,y - yl);      
61.        }      
62.     
63.        //生成随机数,并将随机数字转换为字母      
64.        String sRand="";      
65.        for (int i=0;i<6;i++)      
66.        {      
67.            int itmp = random.nextInt(26) + 65;      
68.            char ctmp = (char)itmp;      
69.            sRand += String.valueOf(ctmp);      
70.            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));      
71.            g.drawString(String.valueOf(ctmp),15*i+10,16);      
72.        }      
73.     
74.        HttpSession session = request.getSession(true);      
75.        session.setAttribute("rand",sRand);      
76.        g.dispose();      
77.        ImageIO.write(image, "JPEG", response.getOutputStream());      
78.    }      
79.    public void destroy()      
80.    {      
81.    }      
82.}    

 第三步:

页面访问:

01.<img src="authImage"/>   

  二、纯jsp实现验证码的生产

第一步:

jsp代码:

01.<%@ page language="java" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"    
02.     contentType="image/jpeg" pageEncoding="UTF-8"%>   
03.  
04.  
05.<%  //设置页面不缓存   
06.   response.setHeader("Pragma","No-cache");   
07.   response.setHeader("Cahce-Control","no-cache");   
08.   response.setDateHeader("Expires",0);   
09.   //在内存中创建图片   
10.   int width=60,height=20;   
11.   BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);   
12.   //获取图形上下文   
13.   Graphics g= image.getGraphics();   
14.   //生成随机类   
15.   Random random= new Random();   
16.   //设置背景颜色   
17.   g.setColor(new Color(160,200,100));   
18.   g.fillRect(0,0,width,height);   
19.   //设置字体   
20.   g.setFont(new Font("Times New Roman",Font.PLAIN,18));   
21.   //随机产生50条干扰线,使图形中的验证码不易被其他的程序探测到   
22.    g.setColor(new Color(160,200,200));   
23.   for(int i=0;i<50;i++)   
24.   {   
25.     int x=random.nextInt(width);   
26.     int y=random.nextInt(height);   
27.     int x1=random.nextInt(width);   
28.     int y1=random.nextInt(height);   
29.     g.drawLine(x,y,x+x1,y+y1);   
30.   }   
31.   //随机产生验证码(6位数字)   
32.   String sRand="";   
33.   for(int i=0;i<6;i++)   
34.   {   
35.     String rand=String.valueOf(random.nextInt(10));   
36.     sRand+=rand;   
37.     //将验证码显示到图象   
38.     g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));   
39.     g.drawString(rand,13*i+6,16);   
40.   }   
41.   session.setAttribute("rand",sRand);  //////将产生的验证码存储到sesson中   
42.   g.dispose();   
43.   ImageIO.write(image,"JPEG",response.getOutputStream());   
44.   out.clear(); //***********   
45.   out=pageContext.pushBody();//**********   
46. %>    

第二步:

页面访问:

01.<img src="xxx.jsp"/>   

 三、struts实现验证码生成:

第一步:

工具类RandomNumUtil 代码:

01.package com.cn.hospital.util;   
02.  
03.import java.awt.Color;      
04.import java.awt.Font;      
05.import java.awt.Graphics;      
06.import java.awt.image.BufferedImage;      
07.import java.io.ByteArrayInputStream;      
08.import java.io.ByteArrayOutputStream;      
09.import java.util.Random;      
10.import javax.imageio.ImageIO;      
11.import javax.imageio.stream.ImageOutputStream;      
12.  
13.public class RandomNumUtil {   
14.  
15.    private ByteArrayInputStream image;//图像       
16.    private String str;//验证码       
17.         
18.    private RandomNumUtil(){       
19.    init();//初始化属性       
20.    }       
21.    /*     
22.    * 取得RandomNumUtil实例     
23.    */       
24.    public static RandomNumUtil Instance(){       
25.    return new RandomNumUtil();       
26.    }       
27.    /*     
28.    * 取得验证码图片     
29.    */       
30.    public ByteArrayInputStream getImage(){       
31.    return this.image;       
32.    }       
33.    /*     
34.    * 取得图片的验证码     
35.    */       
36.    public String getString(){       
37.    return this.str;       
38.    }       
39.         
40.    private void init() {       
41.    // 在内存中创建图象       
42.    int width=85, height=20;       
43.    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);       
44.    // 获取图形上下文       
45.    Graphics g = image.getGraphics();       
46.    // 生成随机类       
47.    Random random = new Random();       
48.    // 设定背景色       
49.    g.setColor(getRandColor(200,250));       
50.    g.fillRect(0, 0, width, height);       
51.    // 设定字体       
52.    g.setFont(new Font("Times New Roman",Font.PLAIN,18));       
53.    // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到       
54.    g.setColor(getRandColor(160,200));       
55.    for (int i=0;i<155;i++)       
56.    {       
57.    int x = random.nextInt(width);       
58.    int y = random.nextInt(height);       
59.    int xl = random.nextInt(12);       
60.    int yl = random.nextInt(12);       
61.    g.drawLine(x,y,x+xl,y+yl);       
62.    }       
63.    // 取随机产生的认证码(6位数字)       
64.    String sRand="";       
65.    for (int i=0;i<6;i++){       
66.    String rand=String.valueOf(random.nextInt(10));       
67.    sRand+=rand;       
68.    // 将认证码显示到图象中       
69.    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));       
70.    // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成       
71.    g.drawString(rand,13*i+6,16);       
72.    }      
73.    //赋值验证码      
74.    this.str=sRand;       
75.         
76.    //图象生效       
77.    g.dispose();       
78.    ByteArrayInputStream input=null;       
79.    ByteArrayOutputStream output = new ByteArrayOutputStream();       
80.    try{       
81.    ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);       
82.    ImageIO.write(image, "JPEG", imageOut);       
83.    imageOut.close();       
84.    input = new ByteArrayInputStream(output.toByteArray());       
85.    }catch(Exception e){       
86.    System.out.println("验证码图片产生出现错误:"+e.toString());       
87.    }       
88.         
89.    this.image=input;/* 赋值图像 */       
90.    }       
91.    /*     
92.    * 给定范围获得随机颜色     
93.    */       
94.    private Color getRandColor(int fc,int bc){       
95.    Random random = new Random();       
96.    if(fc>255) fc=255;       
97.    if(bc>255) bc=255;       
98.    int r=fc+random.nextInt(bc-fc);       
99.    int g=fc+random.nextInt(bc-fc);       
100.    int b=fc+random.nextInt(bc-fc);       
101.    return new Color(r,g,b);       
102.    }      
103.} 

  第二步:

验证码输出action

01.package com.cn.hospital.action; 
02. 
03.import java.io.ByteArrayInputStream; 
04.import java.io.ByteArrayOutputStream; 
05. 
06.import org.springframework.context.annotation.Scope; 
07.import org.springframework.stereotype.Controller; 
08. 
09.import com.cn.hospital.util.RandomCharUtil; 
10.import com.cn.hospital.util.RandomNumUtil; 
11.import com.opensymphony.xwork2.ActionContext; 
12.import com.opensymphony.xwork2.ActionSupport; 
13. 
14.@Controller("utilAction") 
15.@Scope("prototype") 
16.public class UtilAction extends ActionSupport{ 
17. 
18. private static final long serialVersionUID = -7193209177116825032L; 
19. private ByteArrayInputStream inputStream; 
20. 
21. private int width; 
22. private int height; 
23. private int fontSize; 
24. private int codeLength; 
25. private int disturbType; 
26. 
27. public String validNumGenerate() throws Exception{ 
28. RandomNumUtil rdnu=RandomNumUtil.Instance(); 
29. this.setInputStream(rdnu.getImage());//取得带有随机字符串的图片 
30. ActionContext.getContext().getSession().put("random", rdnu.getString());//取得随机字符串放入HttpSession 
31. return SUCCESS; 
32. } 
33. 
34. 
35. public void setInputStream(ByteArrayInputStream inputStream) { 
36. this.inputStream = inputStream; 
37. } 
38. 
39. public ByteArrayInputStream getInputStream() { 
40. return inputStream; 
41. } 
42. 
43. 
44.} 

 

 

 第三步:

struts.xml配置

01.<!-- 产生随机验证码 -->   
02.        <action name="randNum" class="utilAction" method="validNumGenerate">         
03.           <result name="success" type="stream">         
04.                <param name="contentType">image/jpeg</param>         
05.                <param name="inputName">inputStream</param>         
06.           </result>      
07.        </action>    

第四步:

页面访问:

01.<img src="randNum"/>   

 

分享到:
评论

相关推荐

    java登录验证码生成代码

    一个登录验证生成验证码用struts 后台生成验证码在jsp页面输出生成图片

    在JSP页面中动态生成图片验证码的方法实例

    在JSP页面中动态生成图片验证码 &lt;&#37;@ page language=java pageEncoding=UTF-8%&gt; &lt;&#37;@ page import=java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.* %&gt; &lt;&#37;@ taglib ...

    使用struts2.0实现的验证码功能

    一个使用struts使用struts2.0实现的验证码功能的登录页面,可以方便的生成验证码

    ajax+struts+jsp的用户名验证

    里面包括用户名验证和用户验证码生成两部分.注意STRUTS-CONFIG.XML

    Ajax+Struts2实现验证码验证功能实例代码

    这里命名为01_image.jsp,这类的主要功能就是生成验证码,里面是各种画线条,随机数字等,我这里设置的是5个数字的验证,如果你想要改成其他的也可以,大致思路就是在生成数字的那个循环那里加上字母就可以了。...

    随即数字验证码的生成(源码)

    本人用java语言编写的《随即数字验证码的生成》源码,希望能给大家带来帮助,更多的了解java的编程思想,祝初学者成功!!!

    jsp获取action传来的session和session清空以及判断.docx

    jsp获取action传来的session和session清空以及判断 jsp获取action传来的session是jsp开发中的一种常见需求,Session是Web应用...* 实现生成登录验证码 等等。Session的使用可以提高jsp应用程序的灵活性和可扩展性。

    JspRun!社区论坛系统 v6.0 bulid 090424 GBK 安装版.rar

    10、修复了生成验证码的访问路径 11、修复了主题操作在某些条件下会出错 12、修复了个人空间显示效果,包括文集、昵称、收藏版块、主题图标等 13、修复了上传图片时如果图片是动画为该图片生成缩略图和水印图片 ...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    10、修复了生成验证码的访问路径 11、修复了主题操作在某些条件下会出错 12、修复了个人空间显示效果,包括文集、昵称、收藏版块、主题图标等 13、修复了上传图片时如果图片是动画为该图片生成缩略图和水印图片 ...

    FreeMarke实例代码

    模板用servlet提供的数据动态地生成 HTML。...FreeMarker同样可以应用于非Web应用程序环境 FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库 FreeMarker是免费的

    Struts 成功测试

    \web\WebRoot\index.jsp 首页 =================================================================== D:\web\WebRoot\include\CSS.CSS D:\web\WebRoot\include\image.jsp 生成验证码的jsp ============...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip

    系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...

    JAVA程序开发大全---上半部分

    20.5.4 生成随机验证码的imgNum类 358 20.5.5 用户登录页面index.jsp 359 20.5.6 验证用户登录信息的Servlet类login 360 20.6 显示宠物信息模块的实现 363 20.6.1 对应宠物的实体类User 363 20.6.2 定义对宠物信息...

    struts2.1.8+JPA3.0(hibernate实现)+spring2.5+extjs3.2中型BBS项目

    支持上传图片和文件,文件作为附件可以下载,图片可直接在JSP页面中显示 支持回帖,并在主楼中显示 答辩用PPT 选做部分: 帖子搜索 用户查找 管理员对帖子加精、置顶 根据浏览量,自动在首页生成热门帖子列表...

    当当网全套源码(附带邮箱验证功能)

    struts.xml (struts主配置文件) struts-user.xml(用户模块配置文件) struts-main.xml(浏览模块配置文件) struts-order.xml(订单模块配置文件) struts-cart.xml(购物车模块配置文件) 4)WebRoot文件...

    收集的常见的专业问题解决办法.rar

    2009-03-10 17:37 462569 194709 常见的专业问题解决办法\JSP实例:动态生成验证码.mht 2009-03-10 17:52 185677 39758 常见的专业问题解决办法\jsp数字验证码代码详解 - 我爱跑IT---技术专区.mht 2009-03-10 17:22 ...

    JAVA WEB典型模块与项目实战大全

    第23章 在线音乐管理系统(ajax+jsp+struts 2.x)  23.1 在线音乐管理系统简述  23.2 在线音乐管理系统前期准备  23.3 在线音乐管理系统具体实现——超级管理员操作  23.4 在线音乐管理系统具体实现——注册...

    达内Java培训项目(当当网/通用电子商务系统)

    技术实现:Struts2、JSP、MySQL、Jquery、Javascript、Ajax 、Json、JUnit 项目描述: 本项目主要实现了用户管理模块、商品分类展示模块、购物车模块、订单模块。 用户管理模块实现了用户注册、实时验证、用户登录...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip

    系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的有效分离,提高了层次结构的清晰度,提高了复用的粒度降低了开发代价和维护代价,同时保证了软件的质量使其更具有鲁棒性和可维护性。...

Global site tag (gtag.js) - Google Analytics