众所周知,Servlet 为各自的请求 使用单独的线程,这提高了服务器的效率。 而在 struts2 框架中,每个映射的 Action-Class 都有自己的对象,这些对象是为各自的请求创建的。
现在,与普通 servlet 中的线程相比,在 struts2 中拥有单独的对象是一种(优化的)好习惯吗?我们为什么不只使用 servlet!?
最佳答案
当请求进入 Web 容器时,容器会从线程池中获取一个线程来执行请求。处理完请求后,线程会返回到池中以供后续请求使用。多个请求可以并行处理,因为池中有多个线程可用。
您在 Web 应用程序中声明的每个 servlet 仅由 Web 容器实例化一次。因此,多个并发线程使用每个 servlet 的单个实例。这就是为什么您的 servlet 必须是线程安全的。
Struts 对上述内容没有任何改变。它的作用是定义一个处理所有 请求的 servlet 或过滤器。对于每个针对给定操作路径的请求,都会创建一个新的 Struts Action 实例。这是带有 servlet 的模型的不同之处。一个 servlet 是一个单例(所有请求只有一个实例),而一个新的 Struts Action 是为每个请求实例化的。
优点是操作不需要是线程安全的,因为它只被一个线程使用,然后被丢弃。它可以包含中间状态而不需要任何同步。缺点是创建了许多实例。但由于 Java 垃圾收集器在回收 Struts 操作等短期对象时速度非常快,因此在实践中不会造成任何问题。
关于java - servlet的使用比struts2中的action-classes好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13203731/