Struts2+Hibernate+Spring下json格式数据问题

最近项目中运用了s2sh架构开发项目,部分页面运用了jquery的ajax方式查询数据,返回格式为json,结果经常出现堆溢出的问题!

 

报的错误是:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572)
at java.lang.StringBuilder.append(StringBuilder.java:203)
at com.googlecode.jsonplugin.JSONWriter.add(JSONWriter.java:500)
at com.googlecode.jsonplugin.JSONWriter.string(JSONWriter.java:458)
at com.googlecode.jsonplugin.JSONWriter.process(JSONWriter.java:141)

 

郁闷了好几天,后来发现是action类里面由于注入了service接口的get方法导致。

      public UserSerivce getUserService(){

               return this.userService;

      }

最后将其去除,程序正常。

       原来当你的项目使用json格式返回的时候你的action类里面所有的的属性具有get方法都会被自动以json格式返回给页面。所以我们以后的项目应该在使用ajax的时候最好单独的写一个Ajax的类。单独写一个针对ajax的struts配置文件。例如:struts-ajax.xml文件内容

<struts>

     <package name="ajax" namespace="/ajax" extends="json-default">

           <action name="query" class="AjaxAction" method="query">

                   <result type="json"/>

           </action>

     </package>
</struts>

页面写法如下:

$.ajax({
                url:"ajax/query.action",
                type:"GET",
                datatype:"json",
                data:'userId='+document.getElementById("uid").value,
                success:function(value){
                    var json = eval( "("+value+")" );
                    var num = eval(json.map.num);
                    if(num!="0")
                    {
                        jQuery('#pNum').text(num);
                    }
                },
                error:function(json){
                    //alert("error");
                }

});

 

你可能感兴趣的:(java,spring,json,Hibernate,Ajax)