3

我们的代码 - 没有改变,在 JavaEE1.4 中的行为与 1.6 中关于 HttpServletRequest 属性和参数的行为不同。然而,这种不同的行为并不(总是)一致。我们还使用 BEA Weblogic 10(与仍然有效的版本 8 相比)。

例如:在某些情况下,当我们执行“request.setAttribute(name, value)”并稍后执行“request.getAttribute(name)”时 - 请求中似乎根本没有这样的“名称” - 如如果我们从未设置它。我已经在 8v3 和 Ja11 中通过我们的 Eclipse 调试器运行了这个,我确实在 8v3 中看到了这个属性,但在 Ja11 中找不到它,这与代码的行为方式是一致的。

我们的代码至少在一种情况下始终失败,其中“name”和“value”的值都被定义为“public final static String;”。

我已经通过“request.getPathInfo”获取我需要的信息来围绕这个特定的实例行进行编码,但是我怀疑在我们的代码中的其他地方发生了相同或类似的问题 - 但在另一个这样的实例中,它完全是零星的在调试模式下(甚至在放置 Sysout 语句)时,我无法重新创建它,因此无法捕获问题所在的行。在另一种情况下,也是我无法明确捕获的情况-我相信即使该“名称”确实存在于带有数据的jsp表单上,也没有返回任何内容的request.getParameter(name)。

(请注意,我在某种程度上简化了我们的代码实际上的样子,因为我们有一个完整的 RequestContext 类,它实现了可序列化并封装了 HttpServlet 的一个请求周期的所有相关数据和方法 - 即 HttpServletRequest、HttpServletResponse、HttpSession、HttpServlet

无论如何,我听说 Java Servlet 规范在 1.6 中发生了一些变化——但它是否在某个地方明确说明了这些差异是什么,或者我真的必须在它旁边拉起 1.4 规范并自己进行比较???

诚然,我并不精通 HttpServeltRequest,但这段代码多年来一直运行良好 - 很难相信像 get/setAttribute 和 getParameter 这样基本/常见的东西会改变......

4

1 回答 1

0

Servlet 不是线程安全的,并且不会根据请求重新创建。所有请求都由同一个 servlet 对象提供服务。您是否将变量存储在 servlet 类的公共静态最终字段中?

于 2013-01-16T00:12:24.560 回答