Struts1的核心是控制器(核心控制器和业务逻辑控制器),核心~就是ActionsServlet,由struts1框架提供;业务逻辑~是用户自定义的Action,由应用开发者提供。
拿MVC来说,Model部分主要由底层的业务逻辑组件充当,这些组件封装了底层数据库访问、业务逻辑方法实现(但其实对于一个成熟的企业应用而言,Model部分可能是一个或多个EJB组件,或者是一个WebService服务,而不是一个简单的JavaBean所能完成的)。即整个业务逻辑部分并不是由Struts1提供的,Struts1也没为Model组件提供任何支持。
View部分采用JSP实现。Struts1提供了丰富的标签库,可以因此最大限度的减少脚本的使用,但与Ties框架整合后的Struts1所支持的表现层技术非常单一:既不支持FreeMarker、Velocity等模板技术,也不支持JasperReports等报表技术。Controller部分(ActionServlet核心控制器和业务逻辑控制器),其中ActionServlet继承自HttpServlet,负责拦截所以Http请求,根据用户请求是否需要调用业务逻辑控制器,再请求Action处理或者请求道JSP页面。业务逻辑控制器本身其实并不具有处理能力,而是调用Model来完成用户请求的处理的。
其实,对于任何的MVC框架而言,只实现了C(控制器)部分,但它负责用控制器调用业务逻辑组件,并负责控制器与视图技术(Jsp,FreeMarker和Velocity等)的整合。 但Struts1不支持FreeMarker、Velocity等模板技术,就造成了表现层技术的单一,只靠Jsp作为表现层技术是有一定制约性的。其次,Struts1与Servlet API严重耦合,在其逻辑控制器内,充满了大量的Servlet API(如execute方法中的HttpServletRequest和HttpServletResponse),严重依赖于Web容器,难于测试。还有Struts1 API (如:Action基类的继承,以及其中的ActionMapping、ActionForm、ActionForward类等),一旦系统需要重构,这些Action类将完全没用。
Struts2使用了WebWork的设计核心,是WebWork的升级,是一次平滑的过渡,而不是Struts1的设计核心,所以2与1有相当大的区别。Struts2大量使用拦截器来处理用户请求,从而允许用户的业务逻辑与Servlet API分离。