java setattribute_java – HttpSession setAttribute并不总是插入新对象「建议收藏」
我正在从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.cn/183723.html原文链接:https://javaforall.cn
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- Java 异常错误 (Ljava/lang/String;)L java/lang/String;「建议收藏」
- java用什么编译器_Java用Java编译「建议收藏」
- java对象组声明_如何在Java中声明对象数组?
- java数组反转,Java数组反转
- Java中一维数组和二维数组初始化 对象数组初始化「建议收藏」
- java 取余 小数_Java小数取余问题求助「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- c++和java哪个好学_c++语言和Java语言,初学者该如何选择?「建议收藏」
- java常量有哪些_JAVA常量介绍「建议收藏」
- java技术介绍_Java技术汇总
- java用正则表达式大全_Java 正则表达式 大全「建议收藏」
- Java后台接收参数出现java.lang.Integer cannot be cast to java.lang.Double错误(已解决)[通俗易懂]
- java获取服务器路径_JAVA获取服务器路径的方法「建议收藏」
- java dom4j生成xml格式化_Java DOM4J方式生成XML的方法「建议收藏」
- java对象转换工具类_java json字符串转对象
- java验证手机号正则表达式_Java使用正则表达式验证手机号和电话号码的方法「建议收藏」
- JAVA对象转map_java处理字符串类型的map
- java 文件上传到服务器_Java上传文件到服务器端的方法「建议收藏」
- java数组 初始化_用Java初始化数组「建议收藏」
- JAVA生成uuid_java接口default方法
- java查找字符的方法_Java字符串查找(3种方法)
- Java的对象初始化过程详解编程语言
- 深入Linux环境下Java应用调试实践(linux调试java)