Struts2-配置文件result元素-自定义验证码结果类型

result 元素

作用:

为动作指定结果视图

属性:

name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。

type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher转发。

result中type的取值:

result中type的取值有四种类型 :

type解释
dispatcher(默认值)使用请求转发,转向一个页面。
redirect使用重定向,转向一个页面。
chain转发到另一个相同名称空间的动作;转发到不同名称空间的动作
redirectAction重定向到另一个相同名称空间的动作;重定向到不同名称空间的动作

type的默认取值是dispatcher
type属性的取值在struts-default.xml中定义着

defaule.xml

result元素中param子元素

1.在转发或者重定向到不同包下的动作时,都用到了result元素的子元素param。
2.param元素的作用:依赖注入(Dependence Injection)思想
3.我们通过struts-default.xml中的resultTypes元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的。
4.而param元素就是将配置的参数,注入到该类中
5.调用的是对应类的setter方法进行注入的

自定义结果类型

1.其实结果类型就是一个类,这些类都实现com.opensymphony.xwork2.Result接口。
2.或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport。
3.这些类都有一个doExecute方法,用于执行结果视图。【查看源码各种结果类型的类结构】
4.struts的内部实现就是Servlet

输出CAPTCHA图像的结果类型

第一步:写一个类继承StrutsResultSupport或者实现Result接口

CaptchaResult.java

第二步:重写doExecute方法,给结果类添加widthheight的属性和get/set访求 (`更加灵活的设置验证码的宽度和高度)

package com.wxy97.web.result;

import cn.dsna.util.images.ValidateCode;
import com.opensymphony.xwork2.ActionInvocation;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;

import javax.servlet.http.HttpServletResponse;

/**
 * Created by WXY on 2019/2/28 0028 下午 3:26
 */
public class CaptchaResult extends StrutsResultSupport {
    //验证码宽度
    private int width;
    //验证码高度
    private int height;

    public int getWidth() {
        return width;
    }

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

    public int getHeight() {
        return height;
    }

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

    @Override
    protected void doExecute(String s, ActionInvocation actionInvocation) throws Exception {

        //创建验证码
        ValidateCode code =new ValidateCode(width,height,4,50);

        //获取respone对象
        HttpServletResponse response = ServletActionContext.getResponse();

        //响应给客户端
        code.write(response.getOutputStream());
    }


}

第三步:配置struts.xml文件,通过param注入

struts.xml

<struts>
    <package name="p1" extends="struts-default" >
        <!--声明自定义结果类型-->
        <result-types>
            <result-type name="captcha" class="com.wxy97.web.result.CaptchaResult"></result-type>
        </result-types>

        <action name="code">
            <result name="success" type="captcha">
                <param name="width">120</param>
                <param name="height">20</param>
            </result>
        </action>
     </package>
</struts>  

第四步:演示效果


验证码

最后修改:2019 年 02 月 28 日 04 : 32 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论

2 条评论

  1. abcdhw

    快递单号 顺丰单号 申通单号 中通单号,一单一用,不降权单号网www.danhw.com

  2. WRZ

    教程真不错!学习了!