问题:利用struts自带的json机制,期望从后台获取json数据失败,求帮助
##############################################################
struts 2.3.20
struts.xml
<package name="json" extends="json-default" namespace="/test">
<action name="AjaxJson" class="test.AjaxJsonAction">
<result type="json">
<param name="root">dataMap</param>
</result>
</action>
</package>
##############################################################
java code
public class AjaxJsonAction extends ActionSupport {
private static final long serialVersionUID = 1L;
//将会被Struts2序列化为JSON字符串的对象
private Map dataMap;
public Map getDataMap() {
return dataMap;
}
public String execute() throws Exception
{
dataMap = new HashMap();
dataMap.put("success", true);
System.out.println("Debug - AjaxJsonAction - execute");
return SUCCESS;
}
public void validate() {
System.out.println("Debug - AjaxJsonAction - validate");
}
}
##############################################################
url:http://localhost:8080/SSHBasic/AjaxJson //访问不成功;服务器后台能收到Firefox前台的访问请求,action的execute函数也执行了,可状态码是302,?Firefox前台看到网页是被重定向到index.jsp了
server控制台输出:
Debug - AjaxJsonAction - validate
Debug - AjaxJsonAction - execute
firefox控制台输出:
请求网址: http://localhost:8080/SSHBasic/AjaxJson
状态码:HTTP/1.1 302 Found
响应头 - Location: http://localhost:8080/SSHBasic/index.jsp
分析
302 no found / redirect; 服务器端能收到客户端的请求,并且也在AjaxJsonAction里处理完毕,于是struts.xml是重点怀疑对象。 检查struts.xml。
发现有这么一行包含‘redirect’
怀疑点
index.jsp
struts.xml 全文
<?xml version="1.0" encoding="UTF-8" ?>
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.multipart.maxSize" value="15000000"></constant>
<package name="struts2" extends="struts-default">
<action name="*_*" class="test.{1}Action" method="{2}">
<result name="success" type="redirect">index.jsp</result>
<result name="error">index.jsp</result>
<result name="ADD">index.jsp</result>
<result name="DELETE">index.jsp</result>
<result name="REGISTER">login.jsp</result>
</action>
<action name="UploadFile" class="test.UploadFileAction">
<result name="success">index.jsp</result>
<result name="input">uploadFile.jsp</result>
<param name="savePath">/images</param>
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<param name="maximumSize">15000000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</action>
</package>
<package name="json" extends="json-default">
<action name="AjaxJson_1"
class="test.AjaxJsonAction" method="testByAction">
<result type="json">
<param name="root">dataMap</param>
</result>
</action>
</package>
修改 index.jsp为 (即删除 type="redirect") index.jsp验证解决办法上面的方法竟然解决问题了,在客户端能拿到json格式的返回数据了。可是,就这方法就能解决?按理说,不同的package,不同的action,这样修改怎么能解决问题;可的的确确我就是只改了这里。更改后,发现原来的问题不见了,不得其解,留待将来对struts
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。