Struts 2: 核心控制器StrutsPrepareAndExecuteFilter,(需要用户实现)业务(逻辑)控制器,(需要用户实现的)业务逻辑组件
- 3.2.1 核心控制器StrutsPrepareAndExecuteFilter
- 作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求,所以请求都会交给Struts 2框架处理
- Struts 2框架获得了用户请求后,将根据http请求决定调用哪一个业务控制器(Action)
- Struts 2应用中的Action都被定义在struts.xml文件中,定义Action时,指定了Action的name属性【指定处理哪个http请求】和class属性【指定该Action的实现类】
- Struts 2用于处理http请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器没有于Servlet API耦合,显然无法处理用户请求。
- Struts框架提供了系列拦截器,可将HttpServletRequest请求中的请求参数解析出来,传入Action中,并回调Action的execute方法来处理http请求。
- 3.2.2 业务控制器
- Action类通常包含了一个execute方法,该方法返回一个字符串——该字符串就是一个逻辑视图名,当业务控制器处理完用户请求后,根据处理结果不同,execute方法返回不同的字符串。
- Action配置
- Action所处理的URL
- Action组件所对应的实现类
- Action返回的逻辑视图和物理资源的对应关系
- 3.2.3 Struts 2的模型组件
- 模型组件已经超出了MVC框架的覆盖范围。对于Struts 2框架而言,通常没有为模型组件的实现提供太多的帮助。
- Java EE应用里的模型组件,通常指系统的业务逻辑组件。而隐藏在系统的业务逻辑组件下面的,可能还包含了DAO、领域对象等组件
- 通常,MVC框架里的业务控制器会调用模型组件的方法来处理用户请求。
- 当业务控制器需要获得业务逻辑组件的实例时,通常是通过工场模式或利用IoC容器(Spring容器)来管理业务逻辑组件的实例
- 模型组件已经超出了MVC框架的覆盖范围。对于Struts 2框架而言,通常没有为模型组件的实现提供太多的帮助。
- 3.3.4 Struts 2的视图组件
- Struts 2允许使用多种视图技术,如FreeMarker、Velocity和XSLT等。
- 当Struts 2的控制器返回逻辑视图名时,逻辑视图并未与任何的视图技术关联,仅仅是返回一个字符串,该字符串作为逻辑视图名。
- 在struts.xml文件中配置Action时,不仅需要指定Action的name属性和class属性,还要为Action元素指定系列<result.../>子元素,每个<result.../>子元素定义一个逻辑视图和物理视图之间的映射。Struts 2默认使用JSP作为视图资源,使用其他视图技术,要配置<result.../>子元素时要指定type属性
- 3.3.5 Struts 2的运行流程