【问题标题】:Is the use of servlet better than the action-classes in struts2?使用servlet 是否比struts2 中的action-classes 更好?
【发布时间】:2012-10-23 14:43:56
【问题描述】:

众所周知,Servlet 为各自的请求 使用单独的线程,这提高了服务器的效率。 然而,在 struts2 框架中,每个映射的 Action-Class 都为各自的 requests 创建了自己的对象。

现在,与普通 servlet 中的线程相比,在 struts2 中拥有单独的对象是一种好的做法(优化)吗?为什么我们不只有 servlet!?

【问题讨论】:

    标签: java multithreading jakarta-ee servlets struts2


    【解决方案1】:

    当请求进入 Web 容器时,容器会从池中获取一个线程来执行请求。处理请求后,线程将返回池以用于后续请求。多个请求可以并行处理,因为池中有多个线程可用。

    您在 Web 应用程序中声明的每个 servlet 仅由 Web 容器实例化一次。因此,多个并发线程使用每个 servlet 的单个实例。这就是为什么您的 servlet 必须是线程安全的。

    Struts 对上述内容没有任何改变。它的作用是定义一个处理所有请求的 servlet 或过滤器。对于针对给定动作路径的每个请求,都会创建一个新的 Struts Action 实例。这就是带有 servlet 的模型不同的地方。 servlet 是一个单例(所有请求只有一个实例),而新的 Struts 操作会为每个请求实例化。

    优点是动作不需要是线程安全的,因为它只被一个线程使用,然后被丢弃。它可以包含中间状态而不需要任何同步。缺点是创建了许多实例。但是由于 Java 垃圾收集器在回收像 Struts 操作这样的短期对象方面非常快,因此在实践中不会造成任何问题。

    【讨论】:

    • +1 It can contain intermediary state without any need for synchronization
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多