【发布时间】:2012-05-21 20:49:58
【问题描述】:
前端控制器是一个 Servlet,但在 Struts2 中,它是一个过滤器。将其更改为过滤器的可能原因是什么?
【问题讨论】:
-
很高兴您接受答案。
标签: java model-view-controller struts2 struts-1
前端控制器是一个 Servlet,但在 Struts2 中,它是一个过滤器。将其更改为过滤器的可能原因是什么?
【问题讨论】:
标签: java model-view-controller struts2 struts-1
(这是意见,您需要询问 WebWork 的原始作者。)
IMO 将请求包装在过滤器中会更直观一些,因为过滤器就是为此而设计的。
关于从过滤器中提供资源的有效性一直存在争议。规范指出:
过滤器通常不会像 servlet 那样创建响应或响应请求, 相反,他们修改或调整对资源的请求,并修改或 调整来自资源的响应。
有些人声称(特别是一些 WebSphere 支持票证,有时我自己在 email thread on the Struts User mailing list 期间重新阅读规范之前)该规范不允许使用 Struts 2 的过滤器,但很明显没有什么不允许以这种方式使用它们。
通过使用<filter> 配置下的<dispatch> 元素,过滤器可以更灵活地处理其他类型的请求(转发、包含和容器错误)。
请注意,它最初是 WebWork 中的一个 servlet——你可以查看提交日志以找出发生更改的原因,但那是很久以前的事了,大约 7 年以上。
【讨论】:
因为 struts2 中引入了拦截器。 Struts2 贡献者有必要从前面拥有主控制器,这样用户就不会破坏 Java EE 模式中的威胁。然而 Struts2 调度器构建在 servlet 层次结构的顶部,但从安全角度来看,它减少了很多工作。
原因:
【讨论】:
Strtus2中filter被指定为前端控制器的三种可能
作为前端控制器的 Servlet 需要开发者提供 正确的值让框架初始化许多重要的 容器启动时的方面(即 struts 配置文件)。在 缺少框架仅作为第一个初始化 request hits.Struts2 通过提供 前端控制器作为过滤器,本质上是 web.xml 中的过滤器 在容器启动时自动初始化。没有 需要这样的加载启动标签。
第二个但重要的 也就是在Struts2框架中引入Interceptors。它不是 只是减少我们的编码工作,但帮助我们编写任何我们需要的代码 会使用过滤器进行编码和必要的更改 web.xml 而不是 Struts1.So 现在任何更适合的代码 过滤器现在可以移动到拦截器(更可控 比过滤器),所有配置都可以在struts.xml中控制 文件,无需触摸 web.xml 文件。
前控制器 作为一个过滤器也有助于实现 Struts 的新特性,即 UI 主题。主题中的所有静态资源现在都通过 过滤器
【讨论】: