<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xhchc

    危波帆墻,笑談只在桃花上;與誰(shuí)共尚,風(fēng)吹萬(wàn)里浪; 相依相偎,不做黃泉想;莫惆悵,碧波潮生,一蕭自狂放……

     

    Struts2實(shí)現(xiàn)的6位數(shù)字的驗(yàn)證碼程序

    1、login.jsp頁(yè)面程序

    Java代碼

     
    1. <script type="text/javascript">    
    2. function changeValidateCode(obj) {    
    3. //獲取當(dāng)前的時(shí)間作為參數(shù),無(wú)具體意義    
    4. var timenow = new Date().getTime();    
    5. //每次請(qǐng)求需要一個(gè)不同的參數(shù),否則可能會(huì)返回同樣的驗(yàn)證碼    
    6. //這和瀏覽器的緩存機(jī)制有關(guān)系,也可以把頁(yè)面設(shè)置為不緩存,這樣就不用這個(gè)參數(shù)了。    
    7. obj.src="rand.action?d="+timenow;    
    8. }    
    9. </script>   
    10.   
    11. 在表單中添加下面這句話:   
    12. <s:text name="random"></s:text>:<s:textfield name="rand" size="5"></s:textfield><img src="rand.action" title="點(diǎn)擊圖片刷新驗(yàn)證碼"/>  

    2、RandomNumUtil.java 生成驗(yàn)證碼的類文件

    Java代碼
    1. import java.awt.Color;   
    2. import java.awt.Font;   
    3. import java.awt.Graphics;   
    4. import java.awt.image.BufferedImage;   
    5. import java.io.ByteArrayInputStream;   
    6. import java.io.ByteArrayOutputStream;   
    7. import java.util.Random;   
    8. import javax.imageio.ImageIO;   
    9. import javax.imageio.stream.ImageOutputStream;   
    10. public class RandomNumUtil {    
    11. private ByteArrayInputStream image;//圖像    
    12. private String str;//驗(yàn)證碼    
    13.   
    14. private RandomNumUtil(){    
    15. init();//初始化屬性    
    16. }    
    17. /*   
    18. * 取得RandomNumUtil實(shí)例   
    19. */    
    20. public static RandomNumUtil Instance(){    
    21. return new RandomNumUtil();    
    22. }    
    23. /*   
    24. * 取得驗(yàn)證碼圖片   
    25. */    
    26. public ByteArrayInputStream getImage(){    
    27. return this.image;    
    28. }    
    29. /*   
    30. * 取得圖片的驗(yàn)證碼   
    31. */    
    32. public String getString(){    
    33. return this.str;    
    34. }    
    35.   
    36. private void init() {    
    37. // 在內(nèi)存中創(chuàng)建圖象    
    38. int width=85, height=20;    
    39. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    
    40. // 獲取圖形上下文    
    41. Graphics g = image.getGraphics();    
    42. // 生成隨機(jī)類    
    43. Random random = new Random();    
    44. // 設(shè)定背景色    
    45. g.setColor(getRandColor(200,250));    
    46. g.fillRect(00, width, height);    
    47. // 設(shè)定字體    
    48. g.setFont(new Font("Times New Roman",Font.PLAIN,18));    
    49. // 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到    
    50. g.setColor(getRandColor(160,200));    
    51. for (int i=0;i<155;i++)    
    52. {    
    53. int x = random.nextInt(width);    
    54. int y = random.nextInt(height);    
    55. int xl = random.nextInt(12);    
    56. int yl = random.nextInt(12);    
    57. g.drawLine(x,y,x+xl,y+yl);    
    58. }    
    59. // 取隨機(jī)產(chǎn)生的認(rèn)證碼(6位數(shù)字)    
    60. String sRand="";    
    61. for (int i=0;i<6;i++){    
    62. String rand=String.valueOf(random.nextInt(10));    
    63. sRand+=rand;    
    64. // 將認(rèn)證碼顯示到圖象中    
    65. g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));    
    66. // 調(diào)用函數(shù)出來(lái)的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成    
    67. g.drawString(rand,13*i+6,16);    
    68. }   
    69. //賦值驗(yàn)證碼   
    70. this.str=sRand;    
    71.   
    72. //圖象生效    
    73. g.dispose();    
    74. ByteArrayInputStream input=null;    
    75. ByteArrayOutputStream output = new ByteArrayOutputStream();    
    76. try{    
    77. ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);    
    78. ImageIO.write(image, "JPEG", imageOut);    
    79. imageOut.close();    
    80. input = new ByteArrayInputStream(output.toByteArray());    
    81. }catch(Exception e){    
    82. System.out.println("驗(yàn)證碼圖片產(chǎn)生出現(xiàn)錯(cuò)誤:"+e.toString());    
    83. }    
    84.   
    85. this.image=input;/* 賦值圖像 */    
    86. }    
    87. /*   
    88. * 給定范圍獲得隨機(jī)顏色   
    89. */    
    90. private Color getRandColor(int fc,int bc){    
    91. Random random = new Random();    
    92. if(fc>255) fc=255;    
    93. if(bc>255) bc=255;    
    94. int r=fc+random.nextInt(bc-fc);    
    95. int g=fc+random.nextInt(bc-fc);    
    96. int b=fc+random.nextInt(bc-fc);    
    97. return new Color(r,g,b);    
    98. }   
    99. }  


    3、RandomAction.java  生成驗(yàn)證碼的action程序

    Java代碼 復(fù)制代碼
    1. import java.io.ByteArrayInputStream;   
    2. import com.mxl.util.RandomNumUtil;   
    3. import com.opensymphony.xwork2.ActionContext;   
    4. import com.opensymphony.xwork2.ActionSupport;   
    5. public class RandomAction extends ActionSupport{    
    6. private ByteArrayInputStream inputStream;    
    7. public String execute() throws Exception{    
    8. RandomNumUtil rdnu=RandomNumUtil.Instance();    
    9. this.setInputStream(rdnu.getImage());//取得帶有隨機(jī)字符串的圖片    
    10. ActionContext.getContext().getSession().put("random", rdnu.getString());//取得隨機(jī)字符串放入HttpSession    
    11. return SUCCESS;    
    12. }    
    13. public void setInputStream(ByteArrayInputStream inputStream) {    
    14. this.inputStream = inputStream;    
    15. }    
    16. public ByteArrayInputStream getInputStream() {    
    17. return inputStream;    
    18. }   
    19. }  


    4、LoginAction.java 驗(yàn)證驗(yàn)證碼的action

    Java代碼 復(fù)制代碼
    1. private String rand; //表單中的rand   
    2. public String getRand() {   
    3. return rand;   
    4. }   
    5. public void setRand(String rand) {   
    6. this.rand = rand;   
    7. }   
    8. //從session中取出RandomAction.java 中生成的驗(yàn)證碼random   
    9. String arandom=(String)(ActionContext.getContext().getSession().get("random"));   
    10.   
    11. //下面就是將session中保存驗(yàn)證碼字符串與客戶輸入的驗(yàn)證碼字符串對(duì)比了   
    12. if(arandom.equals(this.getRand())) {   
    13. ActionContext.getContext().getSession().put("user"this.getUsername());   
    14. return SUCCESS;   
    15. }   
    16. else {   
    17. return ERROR;   
    18. }  

    5、配置struts.xml文件

    Java代碼 復(fù)制代碼
    1. <!-- Random驗(yàn)證碼 -->   
    2. <action name="rand" class="com.mxl.rand.RandomAction">      
    3.        <result type="stream">      
    4.             <param name="contentType">image/jpeg</param>      
    5.             <param name="inputName">inputStream</param>      
    6.        </result>   
    7.    </action>  

    6、生成的驗(yàn)證碼圖片演示(實(shí)現(xiàn)的6位數(shù)字的驗(yàn)證碼)



    說(shuō)明:

    如果想修改驗(yàn)證碼生成的個(gè)數(shù),需要修改以下幾個(gè)地方:

    第一點(diǎn):
    Java代碼 復(fù)制代碼
    1. int width=85, height=20;  


    第二點(diǎn):
    Java代碼 復(fù)制代碼
    1. for (int i=0;i<6;i++)  


    數(shù)字6,修改成你想生成的位數(shù)就可以了~

    posted on 2009-03-04 17:50 chu 閱讀(1626) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: Struts2實(shí)現(xiàn)的6位數(shù)字的驗(yàn)證碼程序 2009-03-09 20:41 CoderDream

    樓主不厚道,轉(zhuǎn)帖既不說(shuō)明,也不給出原文鏈接!

    原文地址:http://www.javaeye.com/topic/300128  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆檔案

    我的鏈接

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区免费观看| 无码国产精品一区二区免费I6| 国产成人无码免费看视频软件| 国产成人一区二区三区免费视频| 亚洲永久精品ww47| 久久久久亚洲国产| 两个人看的www免费| 日美韩电影免费看| 久久亚洲成a人片| 午夜亚洲国产理论片二级港台二级| 女同免费毛片在线播放| 色吊丝永久在线观看最新免费| 国产成人亚洲综合无码精品| 亚洲精品av无码喷奶水糖心| 亚洲精品制服丝袜四区| 国产99在线|亚洲| 13小箩利洗澡无码视频网站免费 | 免费观看一级毛片| 亚洲AV福利天堂一区二区三| 美女羞羞喷液视频免费| 3344免费播放观看视频| 亚洲一区二区精品视频| 亚洲日韩av无码中文| 99久久99久久免费精品小说| 亚洲欧洲精品成人久久奇米网| 国产成人精品日本亚洲直接| 男的把j放进女人下面视频免费| 国产小视频在线免费| 亚洲国产成人手机在线电影bd| 99在线热播精品免费99热| 永久免费视频v片www| 亚洲日韩国产精品无码av| 中文字幕免费在线播放| 国产成人啪精品视频免费网| 亚洲国产精品成人久久久| 国产一精品一AV一免费| 亚洲一区二区三区乱码A| 亚洲老熟女五十路老熟女bbw | 日本特黄a级高清免费大片| 亚洲成a人片在线网站| 欧洲人成在线免费|