struts 2-问题:利用struts自带的json机制,期望从后台获取json数据失败,求帮助

问题描述

问题:利用struts自带的json机制,期望从后台获取json数据失败,求帮助

问题:利用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

解决方案

struts.xml 配置是什么
使用struts的默认json输出extends要配置为json-default并且result type为json 值为为返回的map对象的名称

map

解决方案二:

如:

<package name="josn" extends="json-default" namespace="/">
  <action name="actionname" class="classpath">
        <result type="json">map</result>
    </action>
        </package>

解决方案三:

To K-Magic:
struts.xml的配置如下;发帖的时候复制黏贴不知道为何没了这段

struts 2.3.20

struts.xml

dataMap

解决方案四:

 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>

解决方案五:

这个问题解决了,却不知道原因是什么;特把解决过程记录下来,以便以后大家不再趟雷


分析
302 no found / redirect; 服务器端能收到客户端的请求,并且也在AjaxJsonAction里处理完毕,于是struts.xml是重点怀疑对象。 检查struts.xml。
发现有这么一行包含‘redirect’

怀疑点

 <result name="success" type="redirect">index.jsp</result>

struts.xml 全文

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <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>
</struts>


解决办法

死马当活马医,谁叫你包含"redirect"

修改

 <result name="success" type="redirect">index.jsp</result>

为 (即删除 type="redirect")

 <result name="success">index.jsp</result>

验证解决办法

上面的方法竟然解决问题了,在客户端能拿到json格式的返回数据了。可是,就这方法就能解决?按理说,不同的package,不同的action,这样修改怎么能解决问题;可的的确确我就是只改了这里。更改后,发现原来的问题不见了,不得其解,留待将来对struts更熟悉了再查找原因吧

更改

 <result name="success">index.jsp</result>

成为(恢复type="redirect")

  <result name="success" type="redirect">index.jsp</result>
时间: 2024-10-02 16:50:26

struts 2-问题:利用struts自带的json机制,期望从后台获取json数据失败,求帮助的相关文章

JavaWeb利用struts实现文件下载时改变文件名称_java

先看看效果图: package com.fenghuo.struts.download; import java.net.URLEncoder; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.

利用苹果自带原生app或者推广的app打造标准

文章描述:人们通常认为苹果是靠iphone卓越的外观设计轻松取得5%的移动市场份额和他人望其项背的利润,但老乔自视苹果是一个缔造优质软件的企业.他曾夸口苹果在软件上的水平要领先业界5年.今年ipad2发布的时候 乔布斯还是没免俗的演示自己开发的应用.老乔让两大软件主要负责人 人们通常认为苹果是靠iphone卓越的外观设计轻松取得5%的移动市场份额和他人望其项背的利润,但老乔自视苹果是一个缔造优质软件的企业.他曾夸口苹果在软件上的水平要领先业界5年.今年ipad2发布的时候 乔布斯还是没免俗的演示

Struts 2中的struts.xml配置文件

是使用Struts2主要的配置文件,在这个文件中可以配置action,拦截器,result和reslut类型,视图以及视图类型等. 它是我们使用Sturts2开发工作的重点要关注的配置文件.struts.xml文件要放到在src源文件夹,源文件夹的东西将被编译 到classes文件夹下面.struts.xml文件的内容如程序清单所示. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configurati

将Struts应用迁移到Struts 2(二)

在上篇文章中,我们已经从较高层解释了整个框架的结构,请 求流程的基础,配置方式和Struts2和Struts1的不同之处.了解这 些后从Struts 应用 迁移到 Struts 2 不再是难事. 在这篇文章中,我们将会更详细地讲述如何由Struts 的action 转为Struts 2的action. 一个应用的例子 这个例子选择了大家都熟悉的 - weblog. 简单地介绍下这例子 的功能需求: 增加一个新的日志 察看一个日志 修改一个日志 删除一个日志 列出所有日至 增删修改(CRUD),是

将Struts应用迁移到Struts 2(一)

大多数人都会熟悉Struts, 无论是从项目实战中获得的经验还是从书中了解到的知识.在这一系列文章里,我们将通过一个由Struts迁移到Struts 2的简单应用例子向大家展现Struts 2的所有特征. 在我们开始介绍这个例子之前,你需要去了解一点Struts 2的背景知识.文章的第一部分将介绍Struts 2与Struts的核心架构的不同点,以助于更好地把所有概念联系起来.第二部分将深入探讨两者在actions上的差别.action相关的框架特征和action的配置.在文章最后一部分将会讲述

php-java 利用md5生成带秘钥的哈希值 有相应的函数吗

问题描述 java 利用md5生成带秘钥的哈希值 有相应的函数吗 哪位大牛知道php的 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] ),在java中有对应的函数吗 解决方案 JAVA生成HMAC-SHA1数据签名 解决方案二: 上面的SHA1的,还有HMAC-MD5 算法的java实例和BASE64,MD5,SHA,HMAC加密解决算法 解决方案三: Java实现MD5加密

利用discuz自带通行证整合dedecms的方法以及文件下载_php技巧

整合discuz的通行证:利用discuz自带通行证整合dede的方法以及文件下载 首先感谢柏拉图提供这么好的免费程序在论坛上看到大家很多都想整合discuz.我想柏拉图肯定会弄一个非常完善的dede的通行证.在没有出来之前我们就用discuz自带的通行证吧.个人看了一下还是非常不错的.一:前提准备以及版本:dede版本:3.1 lit版,3.1正式版上测试都通过discuz版本.用的是最新的5.0版本二:主要涉及几个文件1:dede:(1)include/config_passport.php

在asp.net中利用其自带的登陆端,如何删除用户

问题描述 在asp.net中利用其自带的登陆端,如何删除用户 解决方案 解决方案二:希望高手们帮我一下!

利用WIN10自带照片软件达到中间聚焦效果

我们都知道在拍照时如果焦距没有调好照片会比较模糊,有时在我们编辑照片时部分清楚反而能让照片变得更加有个性.今天在这里分享利用WIN10自带照片软件达到中间聚焦效果 利用WIN10系统自带的照片软件打开你要编辑的照片 点击图片部分,显示出隐藏的工具栏,点击"编辑"命令 在WIN10自带照片软件编辑模式的左边点击"效果",在"效果"命令里点击"选择性聚焦" 通过更改选择性聚焦的四个调节点来改变聚集形状,移动这圆的位置来选择聚焦的位