0

我想知道为什么 Struts2 和 Spring MVC 的 web.xml 不同。

在我的理解中,这两个框架都使用“前端控制器”MVC 模式,但是 Struts2 使用过滤器,而 Spring MVC 在 web.xml 中使用 servlet 的直接声明?

Struts 不也使用 servlet 吗?如果确实如此,那么如何在 web.xml 中没有像 Spring 那样声明该 servlet?

春季MVC:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Struts2:

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
4

1 回答 1

0

Struts 不也使用 servlet 吗?如果确实如此,那么如何在 web.xml 中没有像 Spring 那样声明该 servlet?

Struts2 使用:

  • Actions而不是 Servlet(它们是 ThreadLocal,因此是线程安全的,并且每个请求创建一次)作为控制器来处理表示层;
  • 用于处理正交、横切关注点 (抱歉,等待取消删除)的拦截器,例如日志记录、事务管理、参数解析、验证等……;
  • StrutsPrepareAndExecuteFilter来处理调度过程。

因此,即使在 Struts2 应用程序中可以使用 Servlet(通过声明排除模式)……不,Struts2 根本不使用 Servlet

Struts2 也将值放在 ValueStack 中,而不是在请求中推送它们,这使其成为唯一主流的Pull-MVC框架(而 Spring MVC、Struts1 等都是Push-MVC框架)

于 2015-11-30T13:14:05.017 回答