1. 程式人生 > >Struts2生成隨機驗證碼圖片(自定義結果集StrutsResultSupport)

Struts2生成隨機驗證碼圖片(自定義結果集StrutsResultSupport)

1.工程資料夾如下:

2. HelloAction.java程式碼如下。StrutsResultSupport是struts的自定義結果集。我們的HelloAction類只要繼承StrutsResultSupport抽象類並實現doExecute方法,就可以把doExecute方法裡面的驗證碼圖片code傳到呼叫這個HelloAction類的jsp頁面啦~~ 下面是用get和set注入的方法從struts.xml裡面為驗證碼圖片的高和寬賦值。

package com.itheima.web.action;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;

import cn.dsna.util.images.ValidateCode;

import com.opensymphony.xwork2.ActionInvocation;

public class HelloAction extends StrutsResultSupport{
	
	private int width;
	public int getWidth() {
		return width;
	}

	public void setWidth(int width) {
		this.width = width;
	}

	private int height;
	
	public int getHeight() {
		return height;
	}

	public void setHeight(int height) {
		this.height = height;
	}

	@Override
	protected void doExecute(String arg0, ActionInvocation arg1)
			throws Exception {
		ValidateCode code = new ValidateCode(240,40,4,10);
		HttpServletResponse respone = ServletActionContext.getResponse();
		code.write(respone.getOutputStream());
	}
}

3.struts.xml程式碼如下。<package name="p2" extends="struts-default" abstract="true"> abstract用來定義包為抽象的,也就是不能包含Action的定義,但是抽象包可以被其他包繼承,因此裡面可以定義其他包需要的元素,比如ResultType、Interceptor等等。比如下面p2包繼承了struts-default抽象包,它定義為抽象包。就可以 引用自定義返回結果型別的<result-type>標籤了。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">  <!-- 照抄的,dtd說明了才能用struts標籤 -->
	<struts>
		<constant name="struts.action.extension" value="do" ></constant>
		<constant name="struts.configuration.xml.reload" value="true"></constant>  <!--每次不用重啟 -->  
		<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- 允許動態呼叫 -->
		<package name="p2" extends="struts-default" abstract="true"> 
		<result-types>
		<result-type name="myValidate" class="com.itheima.web.action.HelloAction">
			</result-type>
		</result-types>
		<!-- 全域性檢視:前後端都可以識別的引數 -->
		<global-results>
			<result name="success" type="myValidate">
				<param name="width">200</param>
				<param name="height">60</param>
			</result> 
		</global-results>
		</package>
		
		<package name="p3" extends="p2" >
			<action name="valicoderTest"></action>
		</package>
	</struts>

4.jsp頁面。<img src="valicoderTest.do" />直接輸出驗證碼圖片。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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">
<title>Insert title here</title>
</head>
<body>
	<form action="" method="post">
		使用者名稱:<input type="text" name="username"><br><br>
		密碼:<input type="password" name="pwk"><br>
		註冊碼:<input type="text" name="username"><img src="valicoderTest.do" /><br>
		<input type="submit" value="註冊"><br>
	</form>
</body>
</html>

結果: