【发布时间】:2010-07-20 16:45:53
【问题描述】:
Struts2 动作与 Servlet 相比如何?动作可以充当 servlet 吗?
【问题讨论】:
Struts2 动作与 Servlet 相比如何?动作可以充当 servlet 吗?
【问题讨论】:
Struts(Struts1/Struts 经典)动作更依赖于 servlet。在 Struts2 中,情况完全不同。 Struts2 操作只是一个 POJO(普通 Java 类),与 Servlet API 完全分离。这种解耦简化了测试。
在 Struts2 webapp 的典型工作流中,每个请求都会实例化一个动作,并与一个 Servlet 关联(如果需要知道这种关联,它可以实现ServletAware 接口;通常这不是必要也不可取)。
与 Servlet(以及与 Struts 动作)的一个重要概念区别是 Struts2 动作不会针对不同的请求重用,因此是线程安全的:例如,可能会发生三个 http 请求(同时或不同时)由一个请求服务小服务程序实例;但在这种情况下,我们仍将拥有三个不同的 Struts2 动作实例,每个请求一个。
【讨论】:
Struts 是 vanilla java servlet 之上的一个抽象层。动作本身是由程序员定义的,并在 URL 被命中时由 struts 框架调用(您可以配置哪个 url 映射到哪个动作)。所以它们并没有真正与 servlet“比较”,它们是围绕 servlet 提供的功能的抽象。您对操作执行的一项典型操作是输出一个 jsp,它相当于一个 servlet。所以会发生什么 a) 请求进来,被映射到动作 b) 动作加载一些数据 c) action 渲染一个jsp,将加载的数据传递给jsp。
一个动作可以直接输出到请求/响应,如果这是你想要的,但在大多数情况下可能不是好的做法。
【讨论】:
Struts2 是一个基于 Java EE 技术的MVC 框架实现。
【讨论】: