Struts2的操作与Servlets相比如何?一个动作可以作为一个servlet吗?
答案 0 :(得分:10)
Struts(Struts1 / Struts经典)动作更多地依赖于servlet。在Struts2中,情况完全不同。 Struts2动作只是一个POJO(普通Java类),完全与Servlet API分离。这种解耦可以简化测试。
在Struts2 webapp的典型工作流程中,将为每个请求实例化一个操作,并将与Servlet相关联(如果需要知道此关联,它可以实现ServletAware
接口;通常这没有必要也不可取)。
与Servlets(以及Struts操作)的一个重要概念差异是Struts2操作不会被重用于不同的请求,因此是线程安全的:比如说,可能会发生三个http请求(同时或不同时) servlet实例;但在这种情况下,我们仍然会有三个不同的Struts2动作实例,每个请求一个。
答案 1 :(得分:1)
Struts是一个在vanilla java servlet之上的抽象层。动作本身由程序员定义,并在命中URL时由struts框架调用(您配置哪些url映射到哪个动作)。因此它们并不真正与servlet“比较”,它们是servlet提供的功能的抽象。使用动作执行的一个典型操作是输出jsp,它等同于servlet。所以会发生什么 a)请求进来,映射到动作 b)动作加载一些数据 c)action渲染一个jsp,将加载的数据传递给jsp。
如果这是您想要的,行动可以直接输出到请求/响应,但在大多数情况下可能不是一个好习惯。
答案 2 :(得分:0)
Struts2是基于Java EE技术的MVC框架实现。