java - Wicket:如何在 session 内同步请求

标签 java javascript ajax thread-safety wicket

场景:基于 Apache Wicket 的 Web 应用程序在 Tomcat 服务器上运行。

用户在浏览器中打开 URL,创建 session 并在浏览器中显示简单的主页,用户单击按钮并调用 AJAX 调用。应用程序获取请求并做一些准备响应的事情。同时,浏览器中的用户或 JavaScript 调用另一个 AJAX 调用——第二个请求在应用程序中的另一个线程中处理,因为应用程序的大部分部分是特定于 session 的并且不是线程安全的(因为一名用户 = 一次 session ),抛出异常

可能的解决方案:

  1. 使所有应用程序类都是线程安全的(非常昂贵)

  2. 调整 GUI,这样就不会在一个 session 中同时运行两个 AJAX 调用(由于浏览器 GUI 的性质,这是不可能的)

  3. 在 Wicket 或 Tomcat 级别同步一个 session 中的所有请求(但如何同步?)

  4. 另一种练习或技巧???

谢谢

最佳答案

对同一 PageMap 中的页面或组件的请求 单个 session 已经是同步的——一次只有一个线程。请求资源,例如 图像、javascript、css 文件等都是异步处理的。 (不同客户 永远不会互相阻塞,因为每个客户端都有自己的 Session 和 PageMap)。

但是,我认为,对 session 本身中的项目的访问并未显式同步。

顺便说一句,从不是请求线程的线程访问 session /页面并不是一个好主意,因为容器可以在请求之间自由地对 session /页面执行任何操作 - 例如将其写入磁盘等。

关于java - Wicket:如何在 session 内同步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840109/

相关文章:

php - Ratchet 服务器与长轮询

jquery - HTML/JQuery -> Python

php - 使用PHP+Ajax+jQuery可编辑数据库表

java - Android 上解密数据库的临时存储

javascript - jQuery 从 PHP 循环内部更改/切换按钮之间的类

java - 无法使用 BroadcastReceiver 接收位置更新

javascript - 使用 jQuery 查找选择选项乘以输入字段的总和

javascript - 为什么 jQuery 在 jSfiddle 中有效但在站点中无效?

java - 在 Java 中查找共享可变数据错误的工具

java - Apache HttpClient : how to send headers along with CONNECT request