日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2中jsp页面上验证码的生成

發布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2中jsp页面上验证码的生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何在jsp頁面中顯示驗證碼:

?

  • 驗證碼:<img?class="yzm_img"?align="middle"?id="validateImage"?src="p_w_picpathCode.action"?width="150"?height="40"?οnclick="this.src='p_w_picpathCode.action?time-'+(new?Date()).getTime();"/>?
  • 自動發送p_w_picpathCode.action請求,struts2配置文件如下所寫:

    ?

  • <!--?驗證碼圖片?-->?
  • ????????<action?name="p_w_picpathCode"?class="org.tarena.action.user.ImageAction">?
  • ????????????<result?name="success"?type="stream">?
  • ????????????????<param?name="inputName">p_w_picpathStream</param>?
  • ????????????????<param?name="bufferSize">2048</param>?
  • ????????????</result>?
  • ????????</action>?
  • 相應的action如下:

    ?

  • public?class?ImageAction?{ ?
  • ????private?InputStream?p_w_picpathStream; ?
  • ???? ?
  • ????public?InputStream?getImageStream()?{ ?
  • ????????return?p_w_picpathStream; ?
  • ????} ?
  • ?
  • ????public?void?setImageStream(InputStream?p_w_picpathStream)?{ ?
  • ????????this.p_w_picpathStream?=?p_w_picpathStream; ?
  • ????} ?
  • ?
  • ????public?String?execute(){ ?
  • ????????Map<String,BufferedImage>?map?=?ImageUtil.getImage(); ?
  • ????????//獲取驗證圖片上的字符,保存到session ?
  • ????????String?key?=?map.keySet().iterator().next(); ?
  • ????????Map<String,Object>?session?=?ActionContext.getContext().getSession(); ?
  • ????????session.put("code",?key); ?
  • ????????//獲取驗證圖片,以stream方式響應 ?
  • ????????BufferedImage?p_w_picpath?=?map.get(key); ?
  • ????????ByteArrayOutputStream?bos?=?new?ByteArrayOutputStream(); ?
  • ????????JPEGImageEncoder?jpeg?=?JPEGCodec.createJPEGEncoder(bos); ?
  • ????????try?{ ?
  • ????????????jpeg.encode(p_w_picpath); ?
  • ????????????byte[]?bts?=?bos.toByteArray(); ?
  • ????????????p_w_picpathStream?=?new?ByteArrayInputStream(bts); ?
  • ????????????return?"success"; ?
  • ????????}?catch?(IOException?e)?{ ?
  • ????????????e.printStackTrace(); ?
  • ????????????return?"error"; ?
  • ????????} ?
  • ????} ?
  • }?
  • 其中ImageUtil類如下:

    ?

  • public?final?class?ImageUtil?{ ?
  • ????private?static?final?String[]?chars?=?{?"2",?"3",?"4",?"5",?"6", ?
  • ????????????"7",?"8",?"9",?"a",?"b",?"c",?"d",?"e",?"f",?"g",?"h"?}; ?
  • ????private?static?final?int?SIZE?=?5; ?
  • ????private?static?final?int?LINES?=?20; ?
  • ????private?static?final?int?WIDTH?=?200; ?
  • ????private?static?final?int?HEIGHT?=?100; ?
  • ????private?static?final?int?FONT_SIZE?=?60; ?
  • ???? ?
  • ????public?static?Map<String,BufferedImage>?getImage()?{ ?
  • ????????StringBuffer?sb?=?new?StringBuffer(); ?
  • ????????BufferedImage?p_w_picpath?=?new?BufferedImage(WIDTH,?HEIGHT, ?
  • ????????????????BufferedImage.TYPE_INT_RGB); ?
  • ????????Graphics?graphic?=?p_w_picpath.getGraphics(); ?
  • ????????graphic.setColor(Color.LIGHT_GRAY); ?
  • ????????graphic.fillRect(0,?0,?WIDTH,?HEIGHT); ?
  • ????????Random?ran?=?new?Random(); ?
  • ????????//������?� ?
  • ????????for(int?i=1;i<=SIZE;i++){ ?
  • ???????????? ?
  • ????????????int?r?=?ran.nextInt(chars.length); ?
  • ????????????graphic.setColor(getRandomColor()); ?
  • ????????????graphic.setFont(new?Font(null,Font.BOLD+Font.ITALIC,FONT_SIZE)); ?
  • ????????????graphic.drawString(chars[r],(i-1)*WIDTH/SIZE?,?HEIGHT/2); ?
  • ????????????sb.append(chars[r]);//���?�棬����Session ?
  • ????????} ?
  • ????????//�������� ?
  • ????????for(int?i=1;i<=LINES;i++){ ?
  • ????????????graphic.setColor(getRandomColor()); ?
  • ????????????graphic.drawLine(ran.nextInt(WIDTH),?ran.nextInt(HEIGHT),?ran.nextInt(WIDTH),ran.nextInt(HEIGHT)); ?
  • ????????} ?
  • ????????Map<String,BufferedImage>?map?=?new?HashMap<String,BufferedImage>(); ?
  • ????????map.put(sb.toString(),?p_w_picpath); ?
  • ????????return?map; ?
  • ????} ?
  • ???? ?
  • ????private?static?Color?getRandomColor(){ ?
  • ????????Random?ran?=?new?Random(); ?
  • ????????Color?color?=?new?Color(ran.nextInt(256),ran.nextInt(256),ran.nextInt(256)); ?
  • ????????return?color; ?
  • ????} ?
  • } ?
  • 這樣action就返回一個流文件到img標簽所在的位置,并直接顯示出來。

    如果想增加“看不清楚換一張的功能”,那就重新再走一遍action,每走一次生成的驗證碼圖片都是隨機的。

    如何驗證填寫的驗證碼是正確的呢?如下:

    在頁面中使用jquery

    ?

  • $(function(){ ?
  • ???//驗證碼校驗 ?
  • ????????$("#validateCode").blur(function(){ ?
  • ????????????flag.validateCode=false; ?
  • ????????????var?txt?=?$(this).val(); ?
  • ????????????if(txt==""){ ?
  • ????????????????$("#msg").html("<img?src='../p_w_picpaths/right.gif'/>不能為空!");//生成警告圖片 ?
  • ????????????}else{ ?
  • ????????????????$.post( ?
  • ????????????????????"valid.action?dt="+new?Date().getTime(), ?
  • ????????????????????{"code":txt}, ?
  • ????????????????????function(data){ ?
  • ????????????????????????if(data.ok){ ?
  • ????????????????????????????$("#numberInfo").html("<img?src='../p_w_picpaths/right.gif'/>驗證碼正確!"); ?
  • ????????????????????????????flag.validateCode=true; ?
  • ????????????????????????}else{ ?
  • ????????????????????????????$("#numberInfo").html("<img?src='../p_w_picpaths/wrong.gif'/>驗證碼不正確!"); ?
  • ????????????????????????} ?
  • ????????????????????}, ?
  • ????????????????????"json"?
  • ????????????????); ?
  • ????????????} ?
  • ????????}); ?
  • ?
  • });?
  • 使用了ajax局部刷新,里面的#msg,#numberInfo這都是一些div塊的id,這就不用多說了,下面再寫一下valid.action所指向的action:

    struts2配置文件中如下所寫:

    ?

  • <!--?Ajax請求校驗驗證碼?-->?
  • ????<action?name="valid"?class="org.tarena.action.user.ValidImageAction">?
  • ????????<result?name="success"?type="json"></result>?
  • ????</action>?
  • 則所指向的action為ValidImageAction:

    ?

  • public?class?ValidImageAction?{ ?
  • ????private?String?code?=?""; ?
  • ????private?boolean?ok?=?false; ?
  • ???? ?
  • ????public?boolean?isOk()?{ ?
  • ????????return?ok; ?
  • ????} ?
  • ?
  • ????public?void?setOk(boolean?ok)?{ ?
  • ????????this.ok?=?ok; ?
  • ????} ?
  • ?
  • ????public?String?execute(){ ?
  • ????????Map<String,Object>?session?=?ActionContext.getContext().getSession(); ?
  • ????????//HttpServletRequest?request=ServletActionContext.getRequest(); ?
  • ????????String?scode?=?(String)session.get("code"); ?
  • ????????if(code.equals(scode)){ ?
  • ????????????ok?=?true; ?
  • ????????}else{ ?
  • ????????????ok?=?false; ?
  • ????????} ?
  • ????????return?"success"; ?
  • ????} ?
  • ?
  • ????@JSON(serialize=false)//防止code值參與json串行化返回 ?
  • ????public?String?getCode()?{ ?
  • ????????return?code; ?
  • ????} ?
  • ?
  • ????public?void?setCode(String?code)?{ ?
  • ????????this.code?=?code; ?
  • ????} ?
  • ???? ?
  • }?
  • 以上使用的是struts2做控制器,如果是servlet或者struts也一樣,稍微改動一下

    轉載于:https://blog.51cto.com/4045060/765285

    總結

    以上是生活随笔為你收集整理的struts2中jsp页面上验证码的生成的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。