结果集类型 Result
一、自定义结果集处理类型
dispatcher
MyDispatcher:
package cn.hcx.c_resulttype;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import com.opensymphony.xwork2.ActionInvocation;
public class MyDispatcher extends StrutsResultSupport{
@Override
//参数1 要转发的路径
//参数2 小蜜:ActionInvocation
protected void doExecute(String path, ActionInvocation ai)
throws Exception {
//1 获得request对象
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse resp = ServletActionContext.getResponse();
//2 调用request转发方法
req.getRequestDispatcher(path).forward(req, resp);
}
}
<package name="resulttype" namespace="/resulttype" extends="struts-default" >
<result-types>
<!-- 自定义结果处理类 -->
<result-type name="dispatcher2" class="cn.hcx.c_resulttype.MyDispatcher"></result-type>
</result-types>
<!-- 转发 -->
<action name="Demo1Action" class="cn.hcx.c_resulttype.Demo1Action" method="execute" >
<result name="success" type="dispatcher2" >/index.jsp</result>
</action>
<!-- 重定向 -->
<action name="Demo2Action" class="cn.hcx.c_resulttype.Demo2Action" method="execute" >
<result name="success" type="redirect" >/index.jsp</result>
</action>
plainText
<!-- 纯文本 -->
<action name="Demo3Action" class="cn.hcx.c_resulttype.Demo3Action" method="execute" >
<result name="success" type="plainText" >
<!-- 参数注入 -->
<param name="charSet">UTF-8</param>
<param name="location">/index.jsp</param>
</result>
</action>
stream
struts.xml:
action:
<action name="Demo4Action" class="cn.hcx.c_resulttype.Demo4Action" method="execute" >
<result name="success" type="stream">
<param name="contentType">application/zip</param> <!-- 告诉浏览器,提供的文件的map类型 -->
<param name="inputName">zip</param>
<!-- 填写一个流的名称,该流的名称需要在action中提供出对应的get方法 ,从action中取出这个流 -->
<param name="contentDisposition">attachment;filename="apache-tomcat-6.0.35.zip"</param> <param name="bufferSize">10240</param> </result></action>
action:
package cn.hcx.c_resulttype;
import java.io.InputStream;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class Demo4Action extends ActionSupport{
public InputStream getZip(){
//1读取文件流
//需要servletContext
ServletContext sc = ServletActionContext.getServletContext();
InputStream is = sc.getResourceAsStream("/WEB-INF/apache-tomcat-6.0.35.zip");
//2 返回
return is;
}
public String execute(){
return SUCCESS;
}
}
redirectAction:
action:
package cn.hcx.c_resulttype;
import java.io.InputStream;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class Demo5Action extends ActionSupport{
public String execute(){
return SUCCESS;
}
}
struts.xml:
<!-- 重定向到指定Action -->
<action name="Demo5Action" class="cn.hcx.c_resulttype.Demo5Action" method="execute" >
<result name="success" type="redirectAction">
<param name="actionName">Demo3Action</param>
<param name="namespace">/resulttype</param>
</result>
</action>