初学structs2,结果类型简单示例

一、自定义结果处理类,structs.xml中package节点下加result-types节点,在result-types节点下配置result-type的属性。然后在配置的action中的result属性type为resul-type的name属性值

如,自定义服务端重定向Dispatcher类

structs.xml配置:

<structs>

<package name="resulttype" namespace="/resulttype" extends="structs-default">

<result-types>

<result-type name="MyDispathcer" class="cn.hjp.resulttypes.MyDispatcher"></result-type>

</result-types>

<action name="HelloAction" class="cn.hjp.action.HelloAction">

<result name="Success" type="MyDispathcer">/Index.jsp</result>

</action>

</package>

</structs>

java中的实现代码为:

//自定义服务端页面跳转类

public class MyDispatcher extends StrutsResultSupport {



    @Override

    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {

        // TODO Auto-generated method stub

        HttpServletRequest request = ServletActionContext.getRequest();

        HttpServletResponse response = ServletActionContext.getResponse();

        request.getRequestDispatcher(finalLocation).forward(request, response);

    }

}



//cn.hjp.action下的类

public class HelloAction implements Action {

    @Override

    public String execute() throws Exception {

        System.out.println("自定义服务端页面重定向测试");

        return "Success";

    }

}

二、配置result节点type属性为dispatcher,实现页面在服务端重定向

<structs>

<package name="hello" namespace="/aaa" extends="structs-default">

<action name="HelloAction" class="cn.hjp.action.HelloAction">

<result name="success" type="dispatcher">/Index.jsp</result>

</action>

</package>

</structs>

java代码:

//cn.hjp.action下的类

public class HelloAction implements Action {

    @Override

    public String execute() throws Exception {

        System.out.println("服务端页面重定向测试");

        return SUCCESS;

    }

}

三、配置result节点type属性为redirect,实现页面在客户端重定向

<structs>

<package name="hello" namespace="/aaa" extends="structs-default">

<action name="HelloAction" class="cn.hjp.action.HelloAction">

<result name="success" type="redirect">/Index.jsp</result>

</action>

</package>

</structs>

java代码:

//cn.hjp.action下的类

public class HelloAction implements Action {

    @Override

    public String execute() throws Exception {

        System.out.println("客户端页面重定向测试");

        return SUCCESS;

    }

}

 四、配置result节点type属性为plainText,显示纯文本,及参数注入

<structs>

<package name="hello" namespace="/aaa" extends="structs-default">

<action name="HelloAction" class="cn.hjp.action.HelloAction">

<result name="success" type="plainText">

<!--参数注入,其中的参数属性为plainText对应的类及其父类中属性-->

<param name="location">/Index.jsp</param>

<!--编码不一致会乱码-->

<param name="charSet">UTF-8</param>

</result>

</action>

</package>

</structs>

java代码:

//cn.hjp.action下的类

public class HelloAction implements Action {

    @Override

    public String execute() throws Exception {

        System.out.println("纯文本测试");

        return SUCCESS;

    }

}

五、配置result节点type属性为stream,实现文件下载

<structs>

<package name="hello" namespace="/aaa" extends="structs-default">

<action name="HelloAction" class="cn.hjp.action.HelloAction">

<result name="success" type="stream">

<param name="contentType">application/zip</param>

<!--如下zip,此处大小写不区分,但是对应action中的getZip()方法,返回InputStream类型-->

<param name="inputName">zip</param>

<!--filename自定义下载文件名-->

<param name="contentDisposition">attachment;filename="Mapping123.zip"</param>

<param name="bufferSize">1024</param>

</result>

</action>

</package>

</structs>

java代码:

public class HelloAction extends ActionSupport {

    public InputStream getZip() {

        // 读取文件流

        ServletContext context = ServletActionContext.getServletContext();

                //在WebContent下新建文件夹file,里面有Mapping.zip文件

        InputStream inputStream = context.getResourceAsStream("/file/Mapping.zip");

        return inputStream;

    }



}

调用方式:http://localhost:8080/structs2-demo1/aaa/HelloAction.action。直接下载文件

 六、配置result节点type属性为redirectAction,实现重定向到指定Action。其实该方式是对type="redirect"变相重写,通过查源码可知,ServletActionRedirectResult继承了ServletRedirectResult类,通过ServletActionRedirectResult中的execute方法执行到ServletRedirectResult中的doexecute方法,实现跳转

<structs>

<package name="hello" namespace="/aaa" extends="structs-default">

<action name="HelloAction1" class="cn.hjp.action.HelloAction1">

<result name="success" type="redirectAction">

<param name="actionName">HelloAction</param>

<!--如果不配置namespace,则默认当前namespace-->

<param name="namespace">/aaa</param>

</result>

</action>

</package>

</structs>

java代码:

public class HelloAction1 extends ActionSupport {



    @Override

    public String execute() throws Exception {

        // TODO Auto-generated method stub

        System.out.println("重定向到指定Action测试");

        return SUCCESS;

    }

}

访问路径:http://localhost:8080/structs2-demo1/aa/HelloAction1.action

你可能感兴趣的:(struct)