程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts2完成生成靜態驗證碼並驗證明例代碼

Struts2完成生成靜態驗證碼並驗證明例代碼

編輯:關於JAVA

Struts2完成生成靜態驗證碼並驗證明例代碼。本站提示廣大學習愛好者:(Struts2完成生成靜態驗證碼並驗證明例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是Struts2完成生成靜態驗證碼並驗證明例代碼正文


 1、根本流程:

發生一個驗證碼頁面(很小)→嵌入到表單中→點擊可以刷新頁面→表單提交時驗證。

2、辦法:

1、界說TestAction,完成繪圖辦法

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); //生成四位隨機數 
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(); //封閉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> 

個中不前往任何信息,如許就不會跳轉頁面

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(); //這裡用以後時光作為參數加到url中,是為了使URL產生變更,如許驗證碼才會靜態加載, 
//只是一個攪擾感化,無確切意義,但卻又異常奇妙,呵呵 
obj.src=base+"randomCode.action?abc="+rand; //其實辦事器端是沒有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完成生成靜態驗證碼並驗證明例代碼,願望對年夜家有所贊助!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved