在Struts2中的结果集类型
在Struts2中,结果集类型为指定的操作返回值(result type)定义了如何呈现响应。Struts2有多种结果集类型,可以满足不同情况下的需求。
常见的结果集类型
以下是Struts2中常见的一些结果集类型:
dispatcher
使用dispatcher
结果集类型可以将请求分派回同一个web服务器上的另一个web资源(例如,jsp页面)。当使用dispatcher
结果集类型时,Struts2将请求对象放进请求作用域,并将响应直接返回给客户端。
<result name="success" type="dispatcher">/views/success.jsp</result>
redirect
使用redirect
结果集类型可以将请求重定向到另一个web资源。当使用redirect
结果集类型时,Struts2将在响应中设置HTTP头以指示客户端请求新的URL。
<result name="success" type="redirect">/index.html</result>
stream
使用stream
结果集类型可以将读入的二进制数据(如文件)作为流发送到客户端。当使用stream
结果集类型时,必须使用contentType
属性来指定Content-Type头部。
<result name="success" type="stream">
<param name="contentType">application/pdf</param>
<param name="inputName">fileStream</param>
</result>
自定义结果集类型
Struts2还允许用户自定义自己的结果集类型。以下是如何创建自定义结果集类型的步骤:
- 继承
org.apache.struts2.dispatcher.StrutsResultSupport
类并实现doExecute
方法。 - 在
struts.xml
中为你的新结果集类型配置一个结果集。 - 在Action类中使用你的新的结果集类型。
下面是创建自定义结果集类型的示例:
public class HelloWorldResultType extends StrutsResultSupport {
private String helloStr;
public void setHelloStr(String helloStr) {
this.helloStr = helloStr;
}
public String getHelloStr() {
return helloStr;
}
@Override
protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
response.getWriter().append(helloStr);
}
}
<result-types>
<result-type name="hello" class="com.example.HelloWorldResultType"/>
</result-types>
<action name="helloWorld" class="com.example.HelloWorldAction">
<result name="success" type="hello">
<param name="helloStr">Hello, World!</param>
</result>
</action>
在上面的示例中,我们定义了一个新的结果集类型hello
,当该结果集类型被调用时,它将在响应对象上输出字符串“Hello, World!”。
另一个示例:在application中存储一些数据,然后使用JSON形式返回给前端:
public class CustomResultType extends StrutsResultSupport {
private String header;
private Map<String, Object> applicationData;
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public Map<String, Object> getApplicationData() {
return applicationData;
}
public void setApplicationData(Map<String, Object> applicationData) {
this.applicationData = applicationData;
}
@Override
protected void doExecute(String resultLocation, ActionInvocation invocation) throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json;charset=UTF-8");
PrintWriter out = response.getWriter();
StringBuilder json = new StringBuilder();
json.append("{");
// 发送header
if (header != null) {
json.append("\"header\":\"" + header + "\",");
}
// 发送application中的数据
for (Map.Entry<String, Object> entry : applicationData.entrySet()) {
json.append("\"" + entry.getKey() + "\" : \"" + entry.getValue() + "\",");
}
json.deleteCharAt(json.length() - 1);//删除最后一个逗号
json.append("}");
out.print(json.toString());
out.flush();
}
}
<result-types>
<result-type name="customResultType" class="com.example.CustomResultType"/>
</result-types>
<action name="helloworld" class="com.example.HelloWorldAction">
<result name="success" type="customResultType">
<param name="header">header</param>
<param name="applicationData">
<map>
<entry key="key1"value="value1"></entry>
<entry key="key2"value="value2"></entry>
</map>
</param>
</result>
</action>
这里定义了一个新的结果集类型customResultType
,当该结果集类型被调用时,它将在响应对象上以JSON格式输出application中存储的数据以及自定义的header。
以上就是在Struts2中结果集类型的攻略,希望可以帮助到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Struts2中的结果集类型 - Python技术站