java setattribute_java – HttpSession setAttribute并不总是插入新对象「建议收藏」

java setattribute_java – HttpSession setAttribute并不总是插入新对象「建议收藏」我正在从WLS10g和JavaEE6升级到WLS12c和JavaEE7.我注意到HttpSession.setAttribute的工作方式有所不同.在WLS10中,任何已存储在某个键下的对象都将被替换.在WLS12中,如果newObject.equals(oldObject),则不替换该对象.这对我们来说是个问题,因为应用程序有这样的对象:classValueObject{intkey;St…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

我正在从WLS10g和

JavaEE6升级到WLS12c和JavaEE7.

我注意到HttpSession.setAttribute的工作方式有所不同.在WLS10中,任何已存储在某个键下的对象都将被替换.

在WLS12中,如果newObject.equals(oldObject),则不替换该对象.

这对我们来说是个问题,因为应用程序有这样的对象:

class ValueObject {

int key;

String data;

@Override

public int hashCode()

{

return key;

}

boolean equals(Object o) {

if (o == null || (o instanceof ValueObject) == false) {

return false;

}

ValueObject otherObject = (ValueObject)o;

/* Return true if the keys are equal, even though the data may differ */

return key == otherObject.key;

}

}

ValueObject通过跨多个网页的工作流进行修改.中间值存储在HTTPSession中,在工作流结束时,修改后的值将写入数据库.

在servlet中有这样的代码(成员实际上是通过getter / setter修改的,但我正在简化以减少问题中的代码量):

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {

HttpSession session = request.getSession();

ValueObject newValue = new ValueObject();

newValue.key = Integer.parseInt(request.getParameter(“key”));

newValue.data = request.getParameter(“data”);

session.setAttribute(“value”, newValue);

newValue.key未修改,而newValue.data具有新值.

WLS12中HttpSession的修改行为打破了这种模式 – 当从会话中检索对象时,我们从第一步获取数据,因为当我们尝试存储更新版本时,对象未被替换.

我们可以通过更改所有更新来解决此问题:

session.setAttribute(“value”, newValue);

session.removeAttribute(“value”);

session.setAttribute(“value”, newValue);

但是,有超过100个servlet因此需要做很多工作.并且解决方法既丑陋又容易出错,因为程序员在编写代码时需要跟踪另外一件事.

有没有办法配置WLS12c来使用旧的行为,其中对象总是被HttpSession.setAttribute()替换?

更新2015-09-30:

向Oracle提交的错误报告.我尝试过wero建议的过滤器想法.似乎Weblogic期望来自过滤器链的对象属于weblogic.server.internal.ServletRequestImpl类,因为当我将其包装并将包装器发送到过滤器链时,我从内部Weblogic类获得了ClassCastException.

我还检查了Gimby建议的配置选项.我找不到会议的任何适用选项.我们部署到单个服务器并使用内存作为会话持久性设置.

更新2016-02-03:

Oracle已将错误报告关闭为“不是错误”.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183723.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IPv4与IPv6的区别是什么?[通俗易懂]

    IPv4与IPv6的区别是什么?[通俗易懂]IPv4与IPv6的区别是什么?

    2022年4月22日
    36
  • 云服务器和虚拟主机的区别是什么[通俗易懂]

    云服务器和虚拟主机的区别是什么[通俗易懂]通俗易懂一点来说,把云服务器比喻为一套房子,虚拟主机就是这间房子里的一个房间,群英网络建议大家他们两者的具体功能和区别可参考如下几点分析:1.性能不同:云服务器支持弹性扩展,按需付费,虚拟主机不支持,从稳定性和安全性来讲,云服务器要好些;2.权限不同:为防止资源浪费和受到攻击,虚拟主机开放权限较少,云服务器则没有这个问题,但搭建环境要麻烦些;3.配置环境:云服务器需手动配置环境,虚拟主机无需…

    2022年6月25日
    30
  • java中数组初始化方法_java数组初始化赋值

    java中数组初始化方法_java数组初始化赋值java中初始化数组的方式有几种发布时间:2020-06-0116:12:45来源:亿速云阅读:153作者:鸽子三种初始化方式:1、静态初始化:创建+赋值2、动态初始化:先创建再赋值3、默认初始化:创建之后若不赋值则会被赋对应数据类型的默认值我们来看一下具体代码:publicclassTest3{publicstaticvoidmain(String[]args){//1、声明…

    2022年10月19日
    0
  • linux 脚本 ll命令,linux中ll命令的详细解释

    linux 脚本 ll命令,linux中ll命令的详细解释linxu下的ll命令其实是ls-l的一个别名。下面由学习啦小编为大家整理了linux的ll命令的详细解释的相关知识,希望对大家有帮助!一、linux中的ll命令的详细解释ll并不是linux下一个基本的命令,它实际上是ls-l的一个别名。Ubuntu默认不支持命令ll,必须用ls-l,这样使用起来不是很方便。如果要使用此命令,可以作如下修改:打开~/.bashrc找到#aliasll…

    2022年6月16日
    55
  • C语言贪吃蛇代码_c语言贪吃蛇游戏

    C语言贪吃蛇代码_c语言贪吃蛇游戏一、C语言贪吃蛇代码实现前言设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏,也就是实现贪吃蛇的基本功能,比如在地图中,用“↑↓←→”控制移动蛇的方向,吃掉食物之后,蛇身体会变长等等。。。。首先我们得分析,游戏中我们会碰见的一些情况。①蛇的部分,蛇的身子是一节一节的,此时最容易联想到的数据结构就是顺序表,链表,如果把蛇比做顺序表或者链表,在之后吃到食物的时候,身子肯定会变长,

    2022年9月4日
    3
  • linux 虚拟网络_macvlan原理

    linux 虚拟网络_macvlan原理      macvlan是Linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一个变多个,同时要求物理网卡打开混杂模式。针对每个mac地址,都可以设置IP地址,本来是一块物理网卡连接到交换机,现在是多块虚拟网卡连接到交换机。macvlan应该很简单。1.环境准备         假设有一块物理…

    2022年8月10日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号