欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼

 更新時間:2016年06月02日 14:17:52   作者:meaijojo  
這篇文章主要介紹了Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下

 一、基本流程:

產(chǎn)生一個驗證碼頁面(很?。度氲奖韱沃小c擊可以刷新頁面→表單提交時驗證。

二、方法:

1、定義TestAction,實現(xiàn)畫圖方法

package com.zhuguang.action; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.util.Map; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.struts2.interceptor.ServletResponseAware; 
import org.apache.struts2.interceptor.SessionAware; 
import com.opensymphony.xwork2.ActionSupport; 
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 
public class TestAction extends ActionSupport implements SessionAware,ServletResponseAware 
{ 
private Map<String, Object> session; 
private HttpServletResponse response; 
private static final long serialVersionUID = 1L; 
private String chknumber; 
@Override 
public String execute() throws Exception 
{ 
response.setHeader("Cache-Control", "no-cache"); 
int width=50; //圖片寬度 
int height=20; //圖片高度 
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); 
Graphics graphics=image.createGraphics(); 
graphics.setColor(this.getColor()); //背景顏色 
graphics.fillRect(0, 0, width, height); 
graphics.setFont(new Font("Arial",Font.BOLD,18)); 
graphics.setColor(this.getColor()); //字的顏色 
String number=String.valueOf(System.currentTimeMillis()%9000+1000); //生成四位隨機數(shù) 
session.put("randomCode", number); //寫入session中 
graphics.drawString(number, (int)(width*0.1), (int)(height*0.8)); 
graphics.dispose(); 
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(response.getOutputStream()); 
encoder.encode(image); 
response.getOutputStream().flush(); //刷新到頁面生成圖片 
response.getOutputStream().close(); //關(guān)閉writer 
return null; 
} 
private Color getColor(){ 
int red=(int)(Math.random()*1000%256); 
int green=(int)(Math.random()*1000%256); 
int blue=(int)(Math.random()*1000%256); 
return new Color(red,green,blue); 
} 
public String getChknumber() 
{ 
return chknumber; 
} 
public void setChknumber(String chknumber) 
{ 
this.chknumber = chknumber; 
} 
@Override 
public void setSession(Map<String, Object> session) 
{ 
// TODO Auto-generated method stub 
this.session = session; 
} 
@Override 
public void setServletResponse(HttpServletResponse response) 
{ 
// TODO Auto-generated method stub 
this.response = response; 
} 
} 

注意用到session和response

2、在struts.xml文件中注冊:

<action name="randomCode" class="com.zhuguang.action.TestAction"> 
</action> 

其中不返回任何信息,這樣就不會跳轉(zhuǎn)頁面

3、jsp頁面編寫

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<%@taglib uri="/struts-tags" prefix="s" %> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<script type="text/javascript"> 
<!-- 
function reloadcode(obj,base){ 
var rand=new Date().getTime(); //這里用當(dāng)前時間作為參數(shù)加到url中,是為了使URL發(fā)生變化,這樣驗證碼才會動態(tài)加載, 
//只是一個干擾作用,無確實意義,但卻又非常巧妙,呵呵 
obj.src=base+"randomCode.action?abc="+rand; //其實服務(wù)器端是沒有abc的字段的。 
} 
//--> 
</script> 
<title>測試頁面</title> 
</head> 
<body> 
<form action="testLogin" method="post"> 
Username<input type="text" name="name"><br> 
Password<input type="text" name="password"><br> 
驗證碼:<input type="text" name="chknumber" id="chknumber" maxlength="4" class="chknumber_input"> 
<img title="看不清楚請點擊這里" width="50" height="20" src="<%=basePath%>randomCode.action" id="safecode" onclick="reloadcode(this,'<%=basePath%>')" /><br> 
<input type="submit" value="Loginin"> 
</form> 
</body> 
</html> 

4、驗證

(1)在Action中添加一個驗證方法

public String testLogin() 
{ 
if(session.get("randomCode").equals(chknumber)) 
{ 
return SUCCESS; 
} 
else 
{ 
return ERROR; 
} 
} 

(2)在struts.xml中進行注冊

<action name="testLogin" class="com.zhuguang.action.TestAction" method="testLogin">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>

以上所述是小編給大家介紹的Struts2實現(xiàn)生成動態(tài)驗證碼并驗證實例代碼,希望對大家有所幫助!

相關(guān)文章

  • Java設(shè)計模式之建造者模式的示例詳解

    Java設(shè)計模式之建造者模式的示例詳解

    建造者模式,是一種對象構(gòu)建模式 它可以將復(fù)雜對象的建造過程抽象出來,使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下
    2022-02-02
  • 詳細分析JVM類加載機制

    詳細分析JVM類加載機制

    JVM將class文件字節(jié)碼文件加載到內(nèi)存中,?并將這些靜態(tài)數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運行時數(shù)據(jù)結(jié)構(gòu),在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個代表這個類的java.lang.Class?對象,作為方法區(qū)類數(shù)據(jù)的訪問入口,接下來將詳細講解JVM類加載機制
    2022-04-04
  • java實現(xiàn)簡易聊天功能

    java實現(xiàn)簡易聊天功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡易聊天功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 詳解Java如何利用反射提高代碼的靈活性

    詳解Java如何利用反射提高代碼的靈活性

    反射是Java語言的一種特性,它允許程序在運行時動態(tài)地獲取類的信息并操作類的屬性、方法和構(gòu)造函數(shù),使得我們的代碼更加靈活和可擴展,下面就來看看Java中反射機制的具體操作吧
    2023-05-05
  • swing登錄注冊界面設(shè)計

    swing登錄注冊界面設(shè)計

    這篇文章主要為大家詳細介紹了swing登錄注冊界面的設(shè)計方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java實現(xiàn)List去重的幾種方法總結(jié)

    Java實現(xiàn)List去重的幾種方法總結(jié)

    這篇文章主要為大家詳細介紹了Java中List去重的幾種常用方法總結(jié),文中的示例代碼講解詳細,具有一定的學(xué)習(xí)和參考價值,需要的小伙伴可以了解一下
    2023-09-09
  • Java 抽象類與接口的對比

    Java 抽象類與接口的對比

    這篇文章主要介紹了Java 抽象類與接口的對比,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • 一文帶你快速了解java中的static關(guān)鍵詞

    一文帶你快速了解java中的static關(guān)鍵詞

    這篇文章主要給大家介紹了關(guān)于java中static關(guān)鍵詞的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • JPA如何使用findBy方法自定義查詢

    JPA如何使用findBy方法自定義查詢

    這篇文章主要介紹了JPA如何使用findBy方法自定義查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot+VUE實現(xiàn)數(shù)據(jù)表格的實戰(zhàn)

    SpringBoot+VUE實現(xiàn)數(shù)據(jù)表格的實戰(zhàn)

    本文將使用VUE+SpringBoot+MybatisPlus,以前后端分離的形式來實現(xiàn)數(shù)據(jù)表格在前端的渲染,具有一定的參考價值,感興趣的可以了解一下
    2021-08-08

最新評論