最近在做项目的时候,涉及到一个大页面数组参数传递到后台的问题,
具体问题如下:
软件系统环境:JDK1.5+Tomcat 5.5.9
我们在页面上列出了几千个供用户选取的选项,我通过FORM将用户选取的SELECTBOX的值传入后台,现在系统在用户选取的记录值小的时候300多个的时候没有出现什么问题,但2000多个都选的时候,传递到后台TOMCAT上过了一会,提示JAVA HEAP EXCEPTION,内存溢出,
不知道在实现这样大的数组页面传递的时候,有没有什么比较好的方法呀?
谢谢!
具体问题如下:
软件系统环境:JDK1.5+Tomcat 5.5.9
我们在页面上列出了几千个供用户选取的选项,我通过FORM将用户选取的SELECTBOX的值传入后台,现在系统在用户选取的记录值小的时候300多个的时候没有出现什么问题,但2000多个都选的时候,传递到后台TOMCAT上过了一会,提示JAVA HEAP EXCEPTION,内存溢出,
不知道在实现这样大的数组页面传递的时候,有没有什么比较好的方法呀?
谢谢!
比如几千个checkbox具有某种联系比如树状结构,选中了上层,就默认选中下层,这样,只传递上层一个节点,就可以表示很多节点另外method要用post可以用javascript做一下优化,减少传递的值的大小
比如param=1¶m=2可以优化为:param=1,2最后,我觉得你的问题并不是说传值的问题
觉得传到server并没有问题问题出在你后台处理这2000多个数据的时候,
也就是你的后台的程序性能不高,造成很大的内存消耗
个人感觉罢了。你可以debug一下,看看是不是传到后台了。
如果2000多个值都传给后台了,那就是你后台处理程序有问题
form的定义方法:
<form name="dbFileCreateQueryForm" method="post" action="/TZSH/StoreFileCreate.do" enctype="multipart/form-data">为了增加jsp页面缓冲,在Jsp页面中有
<%@ page buffer="2048kb" %>我现在把我后台的程序处理部分都屏蔽了,还是出现在传递传递到Action类处理的时候Java Heap溢出的错误
会好很多的,你改成request.getParameterValue(),我觉得不是优化,相反,效率降低了。服务端直接解析一下,消耗空间很小,消耗的时间也是毫秒级别,
如果你直接在服务端用request.getParameterValue(),效果不一定好
我以前做ldap的时候,觉得对enum的操作非常消耗时间,所以最好考虑一下后台的优化比如给数据库的时候一次提交,在数据层接口处理等等,
减少数据的传输,减少缓存的消耗。你这个还是单用户的情况吧?
如果现在靠buffer等来解决了,并发的时候你怎么办?2000多个数据不算多。
跑起来一样很流畅。主要还是server端的优化,要想办法降低server的压力,比如把压力分散给client
这样并发的情况下,效率才可能好