最近在做项目的时候,涉及到一个大页面数组参数传递到后台的问题,
    具体问题如下:
    软件系统环境:JDK1.5+Tomcat 5.5.9
    我们在页面上列出了几千个供用户选取的选项,我通过FORM将用户选取的SELECTBOX的值传入后台,现在系统在用户选取的记录值小的时候300多个的时候没有出现什么问题,但2000多个都选的时候,传递到后台TOMCAT上过了一会,提示JAVA HEAP EXCEPTION,内存溢出,
不知道在实现这样大的数组页面传递的时候,有没有什么比较好的方法呀?
谢谢!

解决方案 »

  1.   

    request.setAttribute()试下可以吗?整个封到一个类里再set
      

  2.   

    cache设置多大?可以调大些,但是如果数据量很大的话也没有用,建议不要用这种方式,socket可以试试
      

  3.   

    可以做一些client的优化
    比如几千个checkbox具有某种联系比如树状结构,选中了上层,就默认选中下层,这样,只传递上层一个节点,就可以表示很多节点另外method要用post可以用javascript做一下优化,减少传递的值的大小
    比如param=1&param=2可以优化为:param=1,2最后,我觉得你的问题并不是说传值的问题
    觉得传到server并没有问题问题出在你后台处理这2000多个数据的时候,
    也就是你的后台的程序性能不高,造成很大的内存消耗
    个人感觉罢了。你可以debug一下,看看是不是传到后台了。
    如果2000多个值都传给后台了,那就是你后台处理程序有问题
      

  4.   

    这个问题我刚刚才遇到,我的解决办法是,把那个页面做成是分页形式的,提交完后,page++;把page作为参数重定向到本页,一直循环到最后一页。不知我这个办法适不适用你的情况。
      

  5.   

    我之前也是采用javascript做拼装字符串的处理,然后提交到后台,然后在后台再进行处理成数组处理。现在为了优化后台部分的程序,所以改成直接用request.getParameterValue()来获取字符串数组。
    form的定义方法:
    <form name="dbFileCreateQueryForm" method="post" action="/TZSH/StoreFileCreate.do" enctype="multipart/form-data">为了增加jsp页面缓冲,在Jsp页面中有
    <%@ page buffer="2048kb" %>我现在把我后台的程序处理部分都屏蔽了,还是出现在传递传递到Action类处理的时候Java Heap溢出的错误
      

  6.   

    你用javascript拼装,压力给了client,
    会好很多的,你改成request.getParameterValue(),我觉得不是优化,相反,效率降低了。服务端直接解析一下,消耗空间很小,消耗的时间也是毫秒级别,
    如果你直接在服务端用request.getParameterValue(),效果不一定好
    我以前做ldap的时候,觉得对enum的操作非常消耗时间,所以最好考虑一下后台的优化比如给数据库的时候一次提交,在数据层接口处理等等,
    减少数据的传输,减少缓存的消耗。你这个还是单用户的情况吧?
    如果现在靠buffer等来解决了,并发的时候你怎么办?2000多个数据不算多。
      

  7.   

    我做的项目里面画一棵树,一次传上千个节点,传递的数据大多了。
    跑起来一样很流畅。主要还是server端的优化,要想办法降低server的压力,比如把压力分散给client
    这样并发的情况下,效率才可能好