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已将错误报告关闭为“不是错误”.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • leetcode 792_leetcode5421编码

    leetcode 792_leetcode5421编码给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输出:true示例 2:输

  • 升级Mac Catalina后OBS录屏软件麦克风和内置声音输出没有声音的问题[通俗易懂]

    升级Mac Catalina后OBS录屏软件麦克风和内置声音输出没有声音的问题[通俗易懂]升级MacCatalina后,OBS录屏软件录制的视频,电脑内置声音输出,以及麦克风输入声音都没有。使用网上搜到的soundflower工具也不行。后来找到如下命令临时解决。在终端输入如下命令:open/Applications/OBS.app/Contents/MacOS/OBS–args-picture每次使用OBS,都需要用上述方法。直接打开OBS的不行,需要等OBS…

  • 记录服务器被入侵病毒:ssh密码被更改登录失败、恶意程序跑满了cpu、jar包启动失败自动kill、一直弹出You have new mail in /var/spool/mail/root

    记录服务器被入侵病毒:ssh密码被更改登录失败、恶意程序跑满了cpu、jar包启动失败自动kill、一直弹出You have new mail in /var/spool/mail/root

  • UDP 协议格式

    UDP 协议格式UDPRFC:https://tools.ietf.org/html/rfc768UDP协议和TCP协议同位于传输层,介于网络层(IP)和应用层之间:UDP数据部分位应用层报文。而UDP报文在IP中承载。UDP报文格式相对于简单,如下图:源端口:端口号0-65535,1-1024保留端口号,为标准的服务端口目的端口:同上UDP长度:header+data总长度UDP校验

  • 关于记忆化搜索

    关于记忆化搜索转载自:http://blog.csdn.net/urecvbnkuhbh_54245df/article/details/5847876记忆化搜索: 算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动

  • clion 2021.4.14 激活码_通用破解码

    clion 2021.4.14 激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

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