前端控制器是一个 Servlet,但在 Struts2 中,它是一个过滤器。将其更改为过滤器的可能原因是什么?
3 回答
(这是意见,您需要询问 WebWork 的原始作者。)
IMO 将请求包装在过滤器中会更直观一些,因为这就是过滤器的设计目的。
关于从过滤器中提供资源的有效性一直存在争议。该规范指出:
过滤器通常不会像 servlet 那样创建响应或响应请求,而是修改或调整对资源的请求,并修改或调整来自资源的响应。
有些人声称(特别是一些 WebSphere 支持票,有时我自己在Struts 用户邮件列表上的电子邮件线程期间重新阅读规范之前)该规范不允许使用 Struts 2 的过滤器,但很明显,没有什么不允许以这种方式使用它们.
<dispatch>
通过使用配置中的元素,过滤器可以更灵活地处理其他类型的请求(转发、包含和容器错误)<filter>
。
请注意,最初它是WebWork 中的一个 servlet——您可以查看提交日志以找出发生更改的原因,但那是很久以前的事了,大约 7 年多。
因为struts2中引入了拦截器。Struts2 贡献者有必要从前端拥有主控制器,这样用户就不会破坏 Java EE 模式中的威胁。然而,Struts2 调度程序建立在 servlet 层次结构的顶部,但从安全的角度来看,它减少了很多工作量。
原因:
- 为框架提供集中式控制器。
- 拥有可以在您的手指上跳舞的拦截器和上下文。
Strtus2中filter被指定为前端控制器的三种可能
作为前端控制器的 Servlet 需要开发人员提供一个正确的值,让框架在容器启动时初始化许多重要方面(即 struts 配置文件)。如果没有它,框架只会在第一个请求命中时被初始化。Struts2 通过提供前端控制器作为过滤器使我们的生活变得轻松,并且本质上,web.xml 中的过滤器在容器启动时自动初始化。不需要这种加载时启动标签。
第二个但重要的是,在 Struts2 框架中引入了拦截器。它不仅减少了我们的编码工作,而且帮助我们编写了任何我们会使用过滤器进行编码的代码,以及与 Struts1 不同的 web.xml 中的必要更改。所以现在任何更适合过滤器的代码现在都可以移动到拦截器(比过滤器更可控),所有配置都可以在struts.xml文件中进行控制,无需接触web.xml文件。
作为过滤器的前端控制器也有助于实现 Struts 的新功能,即 UI 主题。主题中的所有静态资源现在都通过过滤器提供服务