随机验证码实现案例
眾所周知,驗證碼在我們的生活中都是非常常見的,很多公司都在各種折騰各種各樣的驗證碼,這里簡要的用一個小案例來實現驗證碼的功能(ps:其實我挺討厭驗證碼這個東西的)。
? ?建立一個javaweb工程,新建login.html,在里面主要是寫界面,代碼實現如下,寫在body區就可以了,來一個表單驗證
<body><form action="">username:<input/><br/>password:<input/><br/>驗證碼:<input name="code"/><img id="image1" src="/day08_response/servlet/responseDemo4"/><input type="button" value="看不清,換一張" οnclick="change()"/><br/><input type="submit" value="登陸"/></form><script type="text/javascript">function change(){var imageObj = document.getElementById("image1");//地址一樣,瀏覽器不會發出請求imageObj.src="/day08_response/servlet/responseDemo4?time="+new Date().getTime();}</script></body>然后我們需要新建一個servlet類,實現驗證碼我們可以有兩種方式,一種是自己寫,如下:顏色可以直接配置就好,好吧,鑒于我的審美觀有限,貌似這種顏色搭配起來挺丑的。
private void test1(HttpServletResponse response) throws IOException {int width=110;int height=25;//1構建一幅內存圖片BufferedImageBufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);//3.圖片上的畫筆Graphics g=bi.getGraphics();g.setColor(Color.green);g.drawRect(0, 0, width, height); //畫矩形邊線//4填充背景色g.setColor(Color.gray);g.fillRect(1, 1, width, height);//5干擾線g.setColor(Color.yellow);Random r=new Random();for(int i=0;i<20;i++)g.drawLine(r.nextInt(width), r.nextInt(height),r.nextInt(width), r.nextInt(height));//6數字驗證碼g.setColor(Color.BLACK);g.setFont(new Font("宋體",Font.BOLD|Font.ITALIC,13));//加粗傾斜int x=20;for(int i=0;i<4;i++){g.drawString(r.nextInt(10)+"",x,20);x+=20;} //2輸出響應對象的字節流輸出流ImageIO.write(bi, "jpg", response.getOutputStream());}還有一種方法可以使用,開源框架validate.jar,導入這個jar包,兩行代碼就可以搞定,當然了,如果你想要更好的效果,你可以自己寫或者看里面的.class中的源碼,自己進行修改,這里就不在多廢話了。 //開源框架實現ValidateCode vc=new ValidateCode(110, 25, 4, 30);//第一個參數是寬,第二個是高,第三個是驗證碼的數目,第四個是干擾線的條數vc.write(response.getOutputStream());
最后,我們還需要清除一下瀏覽器的緩存,我們都知道,清除緩存當然是用那三種方法啦。 //清除緩存response.setIntHeader("Expires", -1);response.setHeader("Cache-Control", "no-cache");response.setHeader("Pragma", "no-cache");
哦?你還不滿意,好吧,那我們再加一個定時刷新的功能吧!
第一種刷新方式是直接刷新:
private void test1(HttpServletResponse response) throws IOException {response.setIntHeader("Refresh", 1);//單位是秒Random r = new Random();response.getWriter().write(r.nextInt()+"");}當然,我們還可以來那種倒計時幾秒鐘就跳轉到其他頁面的這種效果, //刷新到別處private void test2(HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=UTF-8");response.getWriter().write("注冊成功!2秒后自動轉向登陸頁面。");response.setHeader("Refresh", "2;URL=/day08_response/login.html");//單位是秒}下面再來說一下控制瀏覽器緩存時間的實現方法: response.setDateHeader("Expires", System.currentTimeMillis()+1*60*60*1000);//取值是一個毫秒值。如果該值小于當前時間,則不緩存。//如果大于當前時間,緩存的時間是:值-當前時間。response.getWriter().write("hello");好吧,基本上說完了,將以上知識整個起來就可以實現你的一個項目的功能了,快去試試吧!
轉載于:https://www.cnblogs.com/sdksdk0/p/5585071.html
總結
- 上一篇: 睡觉梦到蜈蚣是什么意思
- 下一篇: 梦到一群狗是什么意思