眾所周知,驗證碼在我們的生活中都是非常常見的,很多公司都在各種折騰各種各樣的驗證碼,這里簡要的用一個小案例來實現驗證碼的功能(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="看不清,換一張" onclick="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構建一幅內存圖片BufferedImage
BufferedImage 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");
~~~
好吧,基本上說完了,將以上知識整個起來就可以實現你的一個項目的功能了,快去試試吧!
- 前言
- 內存溢出的解決方案
- 安卓消息推送解決方案
- 語言識別和聊天機器人的實現
- 抽屜效果的實現(DrawerLayout和SlidingMenu的對比)
- 植物大戰僵尸經典開發步驟
- 屏幕適配全攻略
- 安卓圖像處理入門教程
- android開發常用工具箱
- java基礎知識總結
- 剖析軟件外包項目
- java基礎知識——網絡編程、IO流
- 安卓性能優化手冊
- 電商活動中刮刮卡的實現
- Android系統的安全設計與架構
- AsnycTask的內部的實現機制
- Android應用UI設計流程
- 數據結構與算法,每日一道
- html5全解析
- 深入解讀XML解析
- 新聞客戶端案例開發
- 細說Http協議
- win10+ubuntu雙系統安裝方案
- 隨機驗證碼實現案例
- 動態數組的實現案例
- 猜拳游戲案例
- 商業級項目——基金客戶端的架構設計與開發(上)