Struts由客户端Client、MVC设计模式、业务逻辑组成。其中的MVC设计模式由视图View、模型Model、控制器Action组成。
客户端的功能是:发送HTTP请求和接收HTTP响应。
视图是一个JSP文件,即没有业务逻辑,也不保存系统状态信息,而只是通过标签把数据展现出来。标签库主要有HTML Tags,Bean Tags,Logic Tags等。
模型分成系统内部状态和业务逻辑两部分。内部状态由一组ActionForm表示,ActionForm封装了HTTP请求数据。ActionForm是抽像类,其实现类分别对应HTML输入表单。配置文件structs-config.xml保存了HTML请求表单与ActionForm类的实同类的映射关系。
业务逻辑:Servlet在接收到请求后,会根据配置文件的映射关系,把请求转给指定的Action类处理。Action类采用适配器模式,只对业务逻辑进行包装。业务逻辑的具体实现由Java类或EJB的session bean实现。
控制器主要包括ActionServlet类和RequestProcessor类。ActionServlet类是Struts框架的核心部分,负责接收用户请求,从”模型”中获取用户所需数据,再选择合适的视图响应用户请求。ActionServlet采用命令设计模式实现。请求处理则由RequestProcessor.process()方法处理,其采用模板设计模式。
RequestProcessor.process()的处理流程为:processPath()获取ActionMapping路径、processMapping()获取ActionMapping对象、processRoles()认证ActionMapping访问权限、processValidate()、processActionCreate()得到Action类名并返回其实例、processActionPerform()调用Action.execute()方法实现业务逻辑,注意Action类并非线程安全。
Structs框架的优点是:提供页面导航功能使其结构清晰,提供表单验证功能增强代码健壮性,提供数据库连接池管理、异常处理机制、国际化。
Structs框架的缺点是:
Action并非线程安全需要对Action类用到的资源进行同步。
Action与Web层紧耦合导致其非常依赖Web容器不便于测试。
部署麻烦,每个表示层需要单独配置forward,目录、文件变更后需要重修改forward,Tomcat服务器需要重启。
Struts必需依赖Servlet的ServletRequest和ServletResponse类。