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


相关推荐

  • Ubuntu18.04 修改gcc/g++版本

    Ubuntu18.04 修改gcc/g++版本

    2020年11月8日
    171
  • native ascii_编码转换在线

    native ascii_编码转换在线1、获取native2ascii:安装了jdk后,假如你是在windows上安装,那么在jdk的安装目录下,会有一个bin目录,其中native2ascii.exe正是。2、native2ascii的命令行的命名格式:native2ascii-[options][inputfile[outputfile]]说明:-[options]:表示命令开关,有两个选项可供选择-r…

    2025年10月31日
    2
  • keyvaluepair_【转】KeyValuePair用法「建议收藏」

    keyvaluepair_【转】KeyValuePair用法「建议收藏」KeyValuePair用法(转)C#KeyValuePair的用法。结构体,定义可设置或检索的键/值对。也就是说我们可以通过它记录一个键/值对这样的值。比如我们想定义一个ID(int类型)和Name(string类型)这样的键/值对,那么可以这样使用。//////设置键/值对//////privateKeyValuePairSetKeyValuePair(){intintKey…

    2022年7月26日
    6
  • JQuery安装与下载教程(efficiency)

    JQuery安装与下载教程(efficiency)一.认识(1)jQuery文件有两个常用版本:一个是1.x版本,另一个是3.x版本。3.x版本是目前的最新版本,与1.x版本有着相同的API。1.x版本兼容IE6、IE7和IE8,而3.x版本不兼容IE6、IE7和IE8。在实际开发中,我们建议使用1.x版本,而不是3.x版本,原因有两个:1.现在很多网站还是要考虑兼容IE6~IE8;2.大多数jQuery插件不支持3.x版本,只支持1.x版本。不管是1.x版本,还是3.x版本

    2022年6月5日
    29
  • 火星坐标系统_怎样算自己的上升星座

    火星坐标系统_怎样算自己的上升星座其原理是这样的:保密局开发了一个系统,能将实际的坐标转换成虚拟的坐标。所有在中国销售的数字地图必须使用这个系统进行坐标转换之后方可上市。这是生产环节,这种电子地图被称为火星地图。在使用环节,GPS终端

    2022年8月2日
    5
  • centos搭建python环境_centos安装python

    centos搭建python环境_centos安装pythoncentos安装python环境查看系统自带版本查看系统自带版本位置下面介绍安装Python3的方法下载python包解压安装包创建软链接升级pip测试python3由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。查看系统自带版本输入Python命令,查看可以得知是Python2.7.5版本查看系统自带版本位置whichpython一般是位于/usr/bin/python目录下。下面介绍安装Python3的方法

    2022年4月20日
    46

发表回复

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

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