StrutsResultSupport的使用

在有特殊情况时;如果没有异常信息,但是有错误并且有错误信息等内容;此时也需要进行友好的错误处理的话,那么可以借助StrutsResultSupport 返回结果类型来实现特定处理。此种方式先需要继承StrutsResultSupport ,然后可以在子类中获取本次请求的相关信息,再根据相关信息进行结果处理:

package commons.struts2;
import <a href="http://lib.csdn.net/base/java" class=‘replace_word‘ title="Java 知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>Java</a>.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import com.opensymphony.xwork2.ActionInvocation;
/**
 * result type for output string in action
 *
 * @author songwei,yaolei <b>Example:</b>
 *
 * <pre>
 * <!-- START SNIPPET: example -->
 * <result name="success" type="string">
 *   <param name="stringName">stringName</param>
 * </result>
 * <!-- END SNIPPET: example -->
 * </pre>
 *
 */
public class StringResultType extends StrutsResultSupport {
    private static final long serialVersionUID = 1L;
    private String contentTypeName;
    private String stringName = "";
    public StringResultType() {
        super();
    }
    public StringResultType(String location) {
        super(location);
    }
    protected void doExecute(String finalLocation, ActionInvocation invocation)
            throws Exception {
        HttpServletResponse response = (HttpServletResponse) invocation
                .getInvocationContext().get(HTTP_RESPONSE);
        // String contentType = (String)
        // invocation.getStack().findValue(conditionalParse(contentTypeName,
        // invocation));
        String contentType = conditionalParse(contentTypeName, invocation);
        if (contentType == null) {
            contentType = "text/plain; charset=UTF-8";
        }
        response.setContentType(contentType);
        PrintWriter out = response.getWriter();
        // String result = conditionalParse(stringName, invocation);
        String result = (String) invocation.getStack().findValue(stringName);
        out.println(result);
        out.flush();
        out.close();
    }
    public String getContentTypeName() {
        return contentTypeName;
    }
    public void setContentTypeName(String contentTypeName) {
        this.contentTypeName = contentTypeName;
    }
    public String getStringName() {
        return stringName;
    }
    public void setStringName(String stringName) {
        this.stringName = stringName;
    }
} 
package test;
import com.opensymphony.xwork2.ActionSupport;
public class MyAction extends ActionSupport{
    String  result="abc";
    public String ajax() {
        return "ajaxResponse";
    }
    // getter && setter
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }  

} 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="test" extends="struts-default">
        <result-types>
            <result-type name="string" class="test.StringResultType"></result-type>
        </result-types>  

        <action name="myAction" class="test.MyAction" >
            <result name="ajaxResponse" type="string">
                <param name="stringName">result</param>
            </result>
        </action>
    </package>
</struts> 

这里定义返回Action的String  result变量,即“abc”。

时间: 2024-10-09 17:32:50

StrutsResultSupport的使用的相关文章

扩展struts2的结果集StrutsResultSupport 自定义Result处理JSON

以前在采用Struts2开发的项目中,对JSON的处理一直都在Action里处理的,在Action中直接Response,最近研读了一下Struts2的源码,发现了一个更加优雅的解决办法,自己定义一个ResultType, 首先大家先看下Struts2中的源码 包com.opensymphony.xwork2下的DefaultActionInvocation 472行 [java] view plaincopyprint? /** * Save the result to be used lat

SSH系列:(15)自定义Result返回类型(StrutsResultSupport)

总的来说,写一个自定义的Result Type有三个步骤: (1)写一个实现了Result接口的类 (2)对该类进行注册 (3)使用该类 下面分成两个部分:第1个部分,只要是侧重于项目上的使用方式,第2部分是整理自Sturcts In Action书上的自定义返回Json类型的Result Tye. 1.对错误的特殊处理(项目中) 在有些特殊情况下,如果没有异常信息,但是有错误,并且有错误信息等内容,此时也需要进行友好的错误处理的话,那么可以借助StrutsResultSupport 返回结果类

Beetl2.2使用说明书20151201

李家智<[email protected]> Table of Contents 1. 什么是Beetl 2. 基本用法 2.1. 从GroupTemplate开始 2.2. 模板基础配置 2.3. 模板资源加载器 2.4. 定界符与占位符号 2.5. 注释 2.6. 临时变量定义 2.7. 全局变量定义 2.8. 共享变量 2.9. 模板变量 2.10. 引用属性 2.11. 算数表达式 2.12. 逻辑表达式 2.13. 循环语句 2.14. 条件语句 2.15. try-catch 2.

struts2的结果类型

1.从struts-default.xml入手,得到结果类型列表以及对应的处理类: <result-types> <!-- 转发到action --> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <!-- 转发到jsp --> <result-type name="dispatcher&quo

Struts2(result 流 )下载

jsp: <body> <a href="stream.action?fileName=psb.jpg">psb</a> <br> </body> action: public class StreamAction { private String fileName; public String execute(){ return Action.SUCCESS; } public InputStream getInputStr

Struts2自定义返回Json类型result

本来Struts2有自己的json类型的返回结果,并提供了插件,但是它有一个问题,那就是它会将所有序列化的字段都返回,如果想要制定返回Action的某一个属性,则需要在配置result时,配置参数(这里只是举个例子): <param name="root">responseMap</param> 配置了这个参数,返回结果就会从Action中的responseMap为根进行返回. 但是如果自定义结果类型,就可以自己控制了,而且不需要struts2-json-res

Struts2漏洞之S2-016漏洞分析与exp编写

 1.概述 S2-016是13年7月爆出的,那时候的我还没涉及Web安全研究.这次迟到的分析也算是对过去的补充.这个漏洞影响了Struts 2.3.15.1之前的所有版本.问题主要出在对于特殊URL处理中,redirect与redirectAction后面跟上Ognl表达式会被服务器执行. 2.漏洞分析 分析开源框架的漏洞还是从其源码入手,问题出在了DefaultActiionMapper上,这个类主要是用来处理一些灵活的URL调用,比如处理Action中动态调用方法的形式,如: http:

Result实现类

package org.apache.struts2.dispatcher; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.Result; import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.TextParseUtil.ParsedValueEvaluator;

框架: Struts2 讲解 1

一.框架概述 1.框架的意义与作用: 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面. 特点:封装了很多细节,程序员在使用的时候会非常简单. 2.三大框架: Struts2,Hibernate,Spring 3.学好框架: 由于框架中细节很多,知识点比较零散,课后总结和做好笔记就变得尤为重要. 二.关于三层架构 Struts2 : MVC框架. Hibernate:持久层框架(DAO,与数据库打交道).   Spring :IoC(控制反转