jsp - jsp PageContext 对象的生命周期是什么——它是线程安全的吗?

标签 jsp thread-safety custom-tags sling servlet-container

jsp PageContext 对象是作为 http 请求-响应周期的一部分创建和销毁的,还是在请求之间缓存和重用。

PageContext 具有建议在请求之间重用的生命周期方法。即初始化(),释放()。

如果它们被重用,这可能会造成严重的并发问题:如果两个 http 请求到达,请求同一个 jsp 页面,并且每个请求都由自己的线程处理,但在共享的 PageContext 对象上设置属性,它们将呈现彼此的内容。

任何帮助表示赞赏。顺便说一下,我正在使用嵌入在 Apache Sling 中的 servlet 容器。

最佳答案

PageContext 只能从您的 JSP 页面获得。如果您的请求首先由 servlet 处理,然后转发到 JSP 页面(使用 RequestDispatcher.forward),则 pageContext 仅在此 JSP 页面上可用,但无法从 servlet 访问它(因为还没有 pageContext那时候)。

从 JSP 页面的角度来看,每次调用它都会获得新的 pageContext。页面上下文可以在内部池化,但不能同时由多个 JSP 页面共享。
initializerelease方法有这样的评论:“页面或标签库作者不应使用此方法。”只是忘记他们。

关于jsp - jsp PageContext 对象的生命周期是什么——它是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581227/

相关文章:

c++ - 防止派生析构函数中的 vtable 数据竞争

multithreading - 在多线程Windows http服务器中运行非线程安全的dll

java - XMLHttpRequest.open() 之后不会出现 URL 中的 AJAX 变量

java - JSP 正在下载而不是渲染

python - 当两个异步任务访问同一个可等待对象时是否安全?

javascript - 访问标签元素的上下文以隐藏/显示该元素

Jquery 无法读取 Internet Explorer 上的自定义标记文本

javascript - 使用 STRUTS 禁用自动完成(自动完成 ="off")

jsp - 从JSP页面获取所有参数

java - 无法为 JSP 错误 tomcat、mysql 编译类