Struts2生成隨機驗證碼圖片(自定義結果集StrutsResultSupport)
阿新 • • 發佈:2018-12-31
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>
結果: