场景:基于 Apache Wicket 的 Web 应用程序在 Tomcat 服务器上运行。
用户在浏览器中打开 URL,创建 session 并在浏览器中显示简单的主页,用户单击按钮并调用 AJAX 调用。应用程序获取请求并做一些准备响应的事情。同时,浏览器中的用户或 JavaScript 调用另一个 AJAX 调用——第二个请求在应用程序中的另一个线程中处理,因为应用程序的大部分部分是特定于 session 的并且不是线程安全的(因为一名用户 = 一次 session ),抛出异常。
可能的解决方案:
使所有应用程序类都是线程安全的(非常昂贵)
调整 GUI,这样就不会在一个 session 中同时运行两个 AJAX 调用(由于浏览器 GUI 的性质,这是不可能的)
在 Wicket 或 Tomcat 级别同步一个 session 中的所有请求(但如何同步?)
另一种练习或技巧???
谢谢
最佳答案
对同一 PageMap 中的页面或组件的请求 单个 session 已经是同步的——一次只有一个线程。请求资源,例如 图像、javascript、css 文件等都是异步处理的。 (不同客户 永远不会互相阻塞,因为每个客户端都有自己的 Session 和 PageMap)。
但是,我认为,对 session 本身中的项目的访问并未显式同步。
顺便说一句,从不是请求线程的线程访问 session /页面并不是一个好主意,因为容器可以在请求之间自由地对 session /页面执行任何操作 - 例如将其写入磁盘等。
关于java - Wicket:如何在 session 内同步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840109/