该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-12-08
现在项目里面的做法是,把这些可能出错回来还要显示的数据都塞到session里面。然后每个function都有一个functionID号,在每个function 的init的时候会remove掉所有以这个functionId相关的session中的值,(当然这个是在框架里面封装了,只要调用removeAllfuncationVariable()方法就可以了)。但是这样会使用户的session迅速膨胀。用户如果能按照正常流程跑还行,因为每个function结束后都会把用户带到这个这个function的init 方法去清session的,但是用户如果在中途退出我们就没有办法控制了! 另外公司里面有些其它项目就禁止使用session,所有的东西都是放到resquest里面然后每次出错什么的都是重新到数据库里面再捞一次数据。不知道各位在项目里面是怎么做的?有没有个平衡点的?有没有什么心得可以共享的 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-12-08
把大量数据放进session里面? 我没看错把...
|
|
返回顶楼 | |
发表时间:2005-12-08
是的!目前的做法就是这样,但是框架提供了清session的方法,在这个每个功能结束的时候调用。
|
|
返回顶楼 | |
发表时间:2005-12-08
lingcm 写道 我现在所在的项目就有这样的问题,数据从数据库里面取出来的数据很多情况都是放在session里面的!主要原因是一般的功能都有XXXXinput.jsp , XXXXdetail.jsp , XXXXconfirm.jsp , XXXXack.jsp 因为上面的页面都有可能出错,所以很多list如果放到request里面出错后将会丢失(需要重新到数据库里面去捞)
现在项目里面的做法是,把这些可能出错回来还要显示的数据都塞到session里面。然后每个function都有一个functionID号,在每个function 的init的时候会remove掉所有以这个functionId相关的session中的值,(当然这个是在框架里面封装了,只要调用removeAllfuncationVariable()方法就可以了)。但是这样会使用户的session迅速膨胀。用户如果能按照正常流程跑还行,因为每个function结束后都会把用户带到这个这个function的init 方法去清session的,但是用户如果在中途退出我们就没有办法控制了! 另外公司里面有些其它项目就禁止使用session,所有的东西都是放到resquest里面然后每次出错什么的都是重新到数据库里面再捞一次数据。不知道各位在项目里面是怎么做的?有没有个平衡点的?有没有什么心得可以共享的 这样用法,负载一大,应用服务器就得out of memory。根据我多个项目调优和解决性能故障的经验,session里面除了放用户登陆信息之外,其他什么都不应该放。就像Tapestry那样在session中保持状态都放得太多了,做群集的时候很容易出问题。 至于你说的什么request出错,那是解决方法不对,不是request不行。 |
|
返回顶楼 | |
发表时间:2005-12-08
谢谢robbin的回复,我刚才并不是说放到request里面会出错!我的意思是如果出错后回到上一个页面的时候,上一个页面里面的数据(指以前放到request里面的数据)需要重新到数据库里面load出来。这样举例说明一下吧
我的页面的流程: pageA.jsp -> pageB.jsp ->pageC.jsp 如果我再pageA.jsp里面有需要用户输入的信息,也有一部分是从数据库里面load出来给用户选择的信息(比如Dropdown List)后面这部分信息如果开始是放到request里面那出错后再回到pageA.jsp的时候这些信息就没有了!需要重新到数据库里面取一遍,不过我现在所在的项目里面是把这些信息都放到session里面,等一个功能结束后在调用remove方法清session。不过这样有我上面说的问题用户中途终止推出,这个session里面的信息就会一直存在! |
|
返回顶楼 | |
发表时间:2005-12-08
lingcm 写道 我现在所在的项目就有这样的问题,数据从数据库里面取出来的数据很多情况都是放在session里面的!主要原因是一般的功能都有XXXXinput.jsp , XXXXdetail.jsp , XXXXconfirm.jsp , XXXXack.jsp 因为上面的页面都有可能出错,所以很多list如果放到request里面出错后将会丢失(需要重新到数据库里面去捞)
现在项目里面的做法是,把这些可能出错回来还要显示的数据都塞到session里面。然后每个function都有一个functionID号,在每个function 的init的时候会remove掉所有以这个functionId相关的session中的值,(当然这个是在框架里面封装了,只要调用removeAllfuncationVariable()方法就可以了)。但是这样会使用户的session迅速膨胀。用户如果能按照正常流程跑还行,因为每个function结束后都会把用户带到这个这个function的init 方法去清session的,但是用户如果在中途退出我们就没有办法控制了! 另外公司里面有些其它项目就禁止使用session,所有的东西都是放到resquest里面然后每次出错什么的都是重新到数据库里面再捞一次数据。不知道各位在项目里面是怎么做的?有没有个平衡点的?有没有什么心得可以共享的 web应用中很难避免一些长用户类型的事务, 比如新建某个东西要经历若干个页面,类似于app中的wizard, 面对这样的问题,也很难不用session来存放数据, 原则是尽量避免这样的长事务,尽量避免往session里塞东西, 无法避免的话就要注意好管理这些数据。 多说无益,建议你看一下atleap里面的的BaseAction,参考一下它的存取session的数据并使用。 另外虽然对session数据的使用要分外小心,但是并不说明session的使用只能局限于用户登陆信息 |
|
返回顶楼 | |
发表时间:2005-12-08
nod,session的数据应尽量少!
至于用户输入出错返回时,数据回显用request就可以了!具体的,你的项目中怎么做还要再看了! |
|
返回顶楼 | |
发表时间:2005-12-08
还有一点要抗议的就是我在发这个帖子的时候先在论坛里面search了一下更本就没有找到这方面的帖子,search出来的都是hibernate 中session的应用,查询条件再增加就什么也找不到了。我才发了帖子!不清楚刚才斑竹看了没有就直接进回收站了。再次谢谢robbin^_^
|
|
返回顶楼 | |
发表时间:2005-12-08
项目里面几乎每个function都有4个页面,之间差不多都要有数据需要共享。所以才困惑了。。。。
|
|
返回顶楼 | |
发表时间:2005-12-08
nkoffee 写道 lingcm 写道 我现在所在的项目就有这样的问题,数据从数据库里面取出来的数据很多情况都是放在session里面的!主要原因是一般的功能都有XXXXinput.jsp , XXXXdetail.jsp , XXXXconfirm.jsp , XXXXack.jsp 因为上面的页面都有可能出错,所以很多list如果放到request里面出错后将会丢失(需要重新到数据库里面去捞)
现在项目里面的做法是,把这些可能出错回来还要显示的数据都塞到session里面。然后每个function都有一个functionID号,在每个function 的init的时候会remove掉所有以这个functionId相关的session中的值,(当然这个是在框架里面封装了,只要调用removeAllfuncationVariable()方法就可以了)。但是这样会使用户的session迅速膨胀。用户如果能按照正常流程跑还行,因为每个function结束后都会把用户带到这个这个function的init 方法去清session的,但是用户如果在中途退出我们就没有办法控制了! 另外公司里面有些其它项目就禁止使用session,所有的东西都是放到resquest里面然后每次出错什么的都是重新到数据库里面再捞一次数据。不知道各位在项目里面是怎么做的?有没有个平衡点的?有没有什么心得可以共享的 web应用中很难避免一些长用户类型的事务, 比如新建某个东西要经历若干个页面,类似于app中的wizard, 面对这样的问题,也很难不用session来存放数据, 原则是尽量避免这样的长事务,尽量避免往session里塞东西, 无法避免的话就要注意好管理这些数据。 多说无益,建议你看一下atleap里面的的BaseAction,参考一下它的存取session的数据并使用。 另外虽然对session数据的使用要分外小心,但是并不说明session的使用只能局限于用户登陆信息 经历多个页面导航的情况实际上就是pageflow了,应该采用标准的pageflow方案去解决。 为什么说session里面最好只放登陆信息,不要放别的?这个话题说来就话长了,涉及到应用服务器的session管理机制。总之,根据我多个大项目解决内存问题,和做群集的经验,session是最容易出问题的地方,切记!除非万不得已,绝对不要操作session。 |
|
返回顶楼 | |