Struts是一个稳定成熟的MVC框架,MVC架构的核心思想是:将程序分成相对独立,而又能协同工作的三个部分,这样可以降低模块之间的耦合,提供应用的可扩展性,并且MVC中的每个组件只关心组件内的逻辑,不与其他组件的逻辑混合。
Struts只是MVC的一种实现方式,不使用Struts也可以使用MVC,因为MVC是一种模式,而Struts则是一种实现,程序使用MVC之后会让程序的代码模块之间降低了耦合性,提高可维护性和可重用性。然而,只使用MVC的模式的程序代码量是非常大的,使用架构之后就会减少代码量,让程序开发更加规范、统一。
Struts作为MVC模式的典型实现,对Model、View和Controller都提供了对于实现的组件,如Struts框架结构图:
1. Model层
Struts的Model层是由ActionForm和JavaBean组成,其中ActionForm封装用户请求参数,所有的用户请参数由系统自动封装成ActionForm对象,该对象被ActionServlet转发给Action,然后Action根据ActionForm里的请求参数处理用户请求。
JavaBean封装了底层的业务逻辑,包括数据库访问等,在更复杂的应用中,可能是EJB组件或者其他业务逻辑组件。
2. View层
Struts的View层采用JSP实现,Struts提供了丰富的标签库,通过这些标签库可以最大限度的减少脚本的使用,这些自定义的标签库可以实现和Model的有效交互,并增加了显示的功能。
整个应用由客户端请求驱动,当客户请求被ActionServlet拦截时,ActionServlet根据请求决定是否需要调用Model处理用户请求,当用户请求处理完成后,其处理结果通过JSP呈献给用户。
3. Controller层
Struts的Controller主要有两部分:系统核心控制器和业务逻辑控制器
核心控制器负责拦截用户请求,系统核心控制器就是对应ActionServlet,该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成一个标准的Servlet,该控制器负责拦截所有Http请求,然后根据用户请求决定是否需要调用业务逻辑控制器,如果需要调用业务逻辑控制器则转发给Action处理,否则直接转向请求的JSP页面。
为了让核心控制器ActionServlet能够拦截到所有用户的请求,应使用模式匹配的Struts的核心控制器Servlet的URL,在web.xml中配置ActionServlet。
业务逻辑控制器负责处理用户请求,单业务逻辑控制器本身并不是具有处理能力,而是调用Model来完成处理,业务逻辑控制器对应的是Action。