【问题标题】:How does JSP process concurrent requests?JSP 如何处理并发请求?
【发布时间】:2011-03-22 20:16:18
【问题描述】:

我想我的问题是,一个 JSP 被编译成一个服务于多个请求的 servlet 实例。我如何使它成为线程安全的?

【问题讨论】:

    标签: java jsp jsp-tags


    【解决方案1】:

    Servlet 是不可变的。要么在方法调用之外不存在任何状态(servlet 是无状态的),要么任何此类状态永远不会改变(因此每个线程看到的状态始终相同)。

    编写线程安全的 servlet 非常简单:从不使用实例变量。使用方法局部变量。

    【讨论】:

      【解决方案2】:

      只是不要将特定于请求/会话的数据分配为全局/静态变量。因此,只要您不使用 scriptlet 声明 <%! %> 分配请求/会话特定数据并且您不将请求/会话数据放在应用程序范围内(即作为 @987654324 的属性@),那么你就安全了。

      另见:

      【讨论】:

        【解决方案3】:

        试试这个:

        【讨论】:

        • 这是默认设置,它不会使页面成为ThreadSafe,它向容器表明它可以安全地处理并发请求......
        • 感谢您为我澄清这一点。
        【解决方案4】:

        JSP 被编译成 servlet。所有 JSP 变量都是方法本地(堆栈)变量,因此它们是线程安全的。

        如果你直接将线程不安全属性添加到 servlet 类,它将不再是线程安全的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-11
          • 2018-12-31
          • 1970-01-01
          • 2021-04-22
          • 2018-08-24
          • 2011-11-09
          相关资源
          最近更新 更多