gpt4 book ai didi

java - 解决JSP中的并发问题

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:56 26 4
gpt4 key购买 nike

我最近在技术测试中被问到这个问题,并且一直想知道什么是一个好的答案,以防它再次出现。

基本上,假设在 JSP 中发现了多个竞争条件(由于实例变量和 scriptlet 代码的广泛使用),那么在不重写代码的情况下解决所出现的并发问题的好方法是什么?

我的回答是这样的:利用Spring bean来访问实例变量,以避免在访问变量时创建多个对象(因为默认情况下,Spring bean在设计上是单例的)。不过,我很想听到其他解释或答案。

最佳答案

当第一次请求 JSP 或 Web 应用程序启动时,Servlet 容器会将其编译为扩展 HttpServlet 的类,并在 Web 应用程序的生命周期内使用它 ( source )。

JSP 有一个页面指令属性。您可以在 specification 中查看。

具体来说,您可以在页面上更改一个属性:

<%@ page isThreadSafe="false" %>

该属性指示页面中实现的线程安全级别。

  • 如果 false 那么 JSP 容器将分派(dispatch)多个未完成的任务客户请求,一次一个,按照收到的顺序,用于处理的页面实现。
  • 如果true,那么 JSP 容器可能会选择同时向页面分派(dispatch)多个未完成的客户端请求。

使用 true 的页面作者必须确保他们正确同步访问页面的共享状态。默认值为true。请注意,即使 isThreadSafe 属性为 false,JSP页面作者必须确保对任何共享对象的访问已正确同步。这些对象可以在以下位置共享ServletContextHttpSession

因此,如果您将 isThreadSafe 属性设置为 false(这样生成的 servlet 应实现 SingleThreadModel),并且确保您的 scriplet 不使用 ServletContextHttpSession 中共享的对象,那么这可能是解决并发问题的好方法。

关于java - 解决JSP中的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47967800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com