直接响应
response.getWriter().write("main.jsp");
间接响应
转发 request.getRequestDispatcher("main.jsp").forward(request,response);
重定向 response.sendRedirect("main.jsp") ;
自定义响应类型
- 自定义响应类 implements Result 接口,重写方法
void execute(ActionInvocation var1){
//编写具体的响应代码
}
public class MyResult implements Result {
private int b ;
public void setB(int b) {
this.b = b;
}
@Override
public void execute(ActionInvocation actionInvocation) throws Exception {
//直接响应
System.out.println("-------->"+b);
HttpServletResponse resp = ServletActionContext.getResponse() ;
/*
人为的要求,将希望响应的内容,写在一个action.message属性中,并提供getMessage()方法
*/
Object action = actionInvocation.getAction() ;
Class c = action.getClass() ;
String result = "" ;//装载直接响应的文本
try{
Method m = c.getMethod("getMessage") ;
result = (String) m.invoke(action);// action.getMessage() ;
}catch(NoSuchMethodException e){
//业务程序员虽然想直接响应,但没有提供直接响应的内容,响应空串(默认)
}
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write(result);
}
}
- 在struts.xml的<package>中声明响应类型
<result-types>
<result-type name="result1" class="com.util.MyResult"></result-type>
</result-types>
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.action.extension" value="action,,do" />
<constant name="struts.configuration.xml.reload" value="true" />
<package name="dmc" extends="json-default" namespace="/">
<result-types>
<result-type name="result1" class="com.util.MyResult"> </result-type>
</result-types>
<action name="test4" class="com.action.TestAction1" method="t4" >
<result name="success" type="result1" >
<param name="b" >200</param>
</result>
</action>
</package>
</struts>
- 在<action>响应时,<result type="result1"> 使用指定的响应类型
<action name="test4" class="com.action.TestAction1" method="t4" >
<result name="success" type="result1" ></result>
</action>
扩展:
响应类型也可以传递初始化参数,在声明或使用时,通过<param>子标签指定参数,在MyResult类对象中定义与参数同名的属性并实现set方法。
<result name="success" type="result1" >
<param name="b" >200</param>
</result>
package com.action;
public class TestAction1 {
private int b;
public void setB(int b) {
this.b= b;
}
public String t4(){
System.out.println("-------------t4------------");
message = "main.jsp" ;
return "success" ;
}
return "success" ;
}
}
返回类型为json
struts提供了一个插件工具,可以将响应数据转换成json格式,并响应struts2-json-plugin.jar
- 引入插件依赖
- 在struts.xml中设置<package extends="json-default" >
- <result type="json" >
<action name="test5" class="com.action.TestAction1" method="t5">
<result name="success" type="json"></result>
</action>
转换机制:
jsonResult对象在处理响应时,会(通过ActionInvocation)获得action对象,通过action对象的所有get方法,获得相应返回值,将这些返回值及其属性名成对存入map集合。
private List<Car> cars ;
public List<Car> getCars(){ return cars ;}
map.put( "cars" , action.getCars() );
将装载好数据的map集合转换成json,并直接响应
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="dmc" extends="json-default" namespace="/">
<result-types>
<result-type name="result1" class="com.util.MyResult"> </result-type>
</result-types>
<action name="test5" class="com.action.TestAction1" method="t5">
<result name="success" type="json"></result>
</action>
</package>
</struts>
网友评论