1、struts1.0以ActionServlet为核心控制器;用户发送请求时,将被核心控制器拦截,ActionServlet根据请求决定是否调用业务控制器处理用户请求(业务控制器还是控制器,调用模型来处理用户请求),处理完请求,处理结果通过jsp显示给用户。核心控制器是Struts1提供,业务控制器是开发者自定义的Action类。
2、struts的三中角色
模型层:由业务逻辑组件充当,主要实现业务逻辑方法以及数据库访问等。模型层不是由简单的javabean所能完成的,有可能是一个或多个EJB组件或者WebService。struts1不为模型层提供任何支持。
视图层:struts1的视图层采用jsp实现。struts1也提供了丰富标签库,有利于代码的维护。同时标签可以输出控制层处理的结果,减少脚本的使用。
控制层:ActionServlet继承了HttpServlet,将请求转发给Action处理,或者直接转向请求的jsp页面。
提示:对于任何的mvc框架而言,其实只是实现了控制器层,但它负责调用业务逻辑组件,并且负责控制器与视图技术(jsp)的整合。
3、struts1的缺点
1)支持的表示层技术单一
ActionServlet得到处理器返回的ActionForword,实际上是一个逻辑视图名,在struts-config.xml中寻找与之对应的实际视图资源。但是它没有提供与更多视图技术的支持 (比如FreeMarker、Velocity)。
2)与servlet API严重耦合,难于测试
execute方法里面有request,response,这些都是servlet api(web服务器自带)中的类,严重依赖web服务器,一旦脱离很难测试。
3)严重依赖struts1 api,侵入式设计
上面可以看到的Action,ActionMapping,ActionForm严重依赖struts1 api,一旦代码重构,这些action侵入设计将导致较低的代码复用