自己编写Struts2 的Result

本文分析了Struts2框架中PlainTextResult类的工作原理,该类继承自StrutsResultSupport并实现了doExecute方法。文章详细介绍了如何通过ActionInvocation获取HTTP响应对象,并设置响应类型及内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看struts2的源代码

public class PlainTextResult extends StrutsResultSupport ...{
        ..........
        
protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception ...{

        ..........
        HttpServletResponse response 
= (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
        ServletContext servletContext 
= (ServletContext) invocation.getInvocationContext().get(SERVLET_CONTEXT);


        
if (charset != null...{
            response.setContentType(
"text/plain; charset="+charSet);
        }

        
else ...{
            response.setContentType(
"text/plain");
        }

        response.setHeader(
"Content-Disposition""inline");


        PrintWriter writer 
= response.getWriter();
        InputStreamReader reader 
= null;
        
try ...{
            
if (charset != null...{
                reader 
= new InputStreamReader(servletContext.getResourceAsStream(finalLocation), charset);
            }

            
else ...{
                reader 
= new InputStreamReader(servletContext.getResourceAsStream(finalLocation));
            }

            
if (reader == null...{
                _log.warn(
"resource at location ["+finalLocation+"] cannot be obtained (return null) from ServletContext !!! ");
            }

            
else ...{
                
char[] buffer = new char[BUFFER_SIZE];
                
int charRead = 0;
                
while((charRead = reader.read(buffer)) != -1...{
                    writer.write(buffer, 
0, charRead);
                }

            }

        }

        
finally ...{
            
if (reader != null)
                reader.close();
            
if (writer != null...{
                writer.flush();
                writer.close();
            }

        }

    }

}

 PlainTextResult继承了StrutsResultSupport,实现了doExecute()方法,这个方法传入的两个参数,一个是location,这是一个默认参数,即result中配置的URL,另一个是ActionInvocation,执行上下文。学习PlainTextResult这个例子,我们可以很容易的编写自己的Result。

只需继承StrutsResultSupport类,实现doExecute方法即可。通过ActionInvocation可以得到response,输出你想要的结果就可以。

如果自定义的Result需要传入多个参数,可以参考ServletActionRedirectDispater,也是很容易就可以实现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值