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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • coreseek_coreone

    coreseek_coreoneSQL结构化查询语言(是一种标准,所有的关系型数据库Mysql,sqlserver,oracle)sphinx的使用两种方式:第一种:使用sphinx的API来操作sphinx(常用)sphi

    2022年8月2日
    9
  • Linux chmod命令用法

    Linux chmod命令用法chmod—-改变一个或多个文件的存取模式(mode) chmod[options]modefiles 只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以whoopcodepermission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多个mode,以逗号分开。 options:

    2022年6月24日
    22
  • pycharm安装三方库_pycharm无网络安装第三方库

    pycharm安装三方库_pycharm无网络安装第三方库系统:mac10.15.3软件:2019.3pycharm导入第三方库的方法是1先点击File>OtherSetting>PreferencesforNewProjects2点击红框中的小+3在红线位置搜索要加载的第三方库,然后点击箭头所指的installPackage安装模块,点击后按钮按钮为灰色,等恢复后NumPy模块就已经安装完成了,并且显示在列表中,…

    2022年8月27日
    3
  • Max Script|修改器篇

    Max Script|修改器篇创建一个立方体盒子 并选中并修改其高度宽度长度 box 创建立方体盒子 select box 选中以 box 命名开口的 objecta 将选中的物体赋予给集合 a 以后可以直接操作集合 aa height 60 a width 20 a length 20 高度 60 长宽各 20a heightsegs 10

    2025年9月28日
    4
  • adobe flash cookies可以清理吗(跟踪号码不让对方知道)

    如果你喜欢对自己的浏览内容保密,或许在会话结束之后,你已经清理了你的历史记录和cookies,你的痕迹并没有完全被清理干净。还有一种称为FlashCookies或LocalSharedObjects(LSOs)的cookies还没有被清理。今天,我们将看看如何摆脱这些烦人的文件,更好的保护自己的隐私。它们是什么?FlashCookies或LSOs…

    2022年4月12日
    36
  • 宏基因组注释和可视化神器MEGAN入门

    宏基因组注释和可视化神器MEGAN入门文章目录 MEGAN 宏基因组功能和物种分类 MEGAN 功能简介原理简要示意图 MEGAN 特有文件格式 RMAMEGAN 下载 MEGAN 使用 MEGAN linux 版本安装 MEGAN 使用指南 Linux 提取注释内容 物种和功能 提取物种注释数据 提取功能 Win 版安装和使用 MEGAN 安装 Win 版使用指南 MEGAN 主界面介绍 MEGAN 输入介绍 MEGAN 分析进阶双样本比对 MEGAN 界面可视化 两样本 r

    2025年10月6日
    5

发表回复

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

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