1.Struts2体系介绍

Struts2的体系和Struts1体系差别很大,因为Struts2使用了WebWork的设计核心,而不是使用Struts1的设计核心。Struts2大量使用连接器来处理用户请求,从而允许用户的业务逻辑控制与Servlet API分离。

Struts2的框架

Struts2使用拦截器作为处理用户的业务逻辑,通过控制器代理负责处理用户请求,处理用户请求时回调业务控制器的execute方法。

Struts2框架处理流程:

1.浏览器发送请求

2.核心控制器FilterDispatcher根据请求决定调用合适的Action

3.Struts2的拦截器链自动对请求应用通用功能

4.回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作

5.Action的execute方法处理结果信息将被输出到浏览器

核心控制器FilterDispatcher

该控制器作为一个Filter运行在Web应用中,负责拦截所有用户请求,当用户请求达到时,该Filter会过滤用户请求。如果用户请求以action结尾,则请求被转入Struts2框架处理。

Struts2应用的Action被定义在struts.xml文件中,该文件中定义Action时,定义该Action的name属性和class属性。

Struts2处理用户请求的Action实例,不是用户实现的业务控制器,而是Action代理,因为用户实现的业务控制器没有与Servlet API耦合。

Struts2提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中请求参数解析并传入Action,并回调Action的execute方法来处理用户请求。

业务控制器

业务控制器组件就是用户实现Action类的实例,Action类包含execute方法,该方法返回一个字符串—— 该字符串就是一个逻辑视图名,当业务控制器处理完用户请求后,根据处理结果不同,execute方法返回不同的字符串。

每个Action都要处理一个用户请求,而用户请求总是包含指定URL,当FilterDispatcher拦截到用户请求后,根据请求的URL和Action处理URL之间的对应关系来处理转发。

Struts2的视图组件

当Struts2的控制器返回逻辑视图名时,不仅需要指定Action的name属性和class属性,还要为Action指定系列<result../>元素,每个<result../>元素顶一个个逻辑视图和物理视图之间的映射。

Struts2的配置文件

Struts2配置文件有两份:

1.配置Action的struts.xml文件

2.配置Struts2的全局属性的struts.properties文件

struts.xml文件定义了Struts2的Action,定义Action,指定Action实现类和定义该Action处理结果与视图资源之间的映射关系。

/pages/Logon.jsp
Welcome
MainMenu
ChangePassword
Welcome

定义Action时,不仅定义了Action的实现类,而且在定义Action时处理结果使,指定了多个<result/>,<result/>元素指定execute方法返回值和视图资源之间的映射关系。

定义result元素时,指定两个属性:type和name,其中name制定了execute方法返回的字符串,而type指定转向的资源类型,转向的资源可以是JSP、FreeMarker,甚至是另一个Action等。

Struts2标签库

名字
年龄
性别

Struts2的控制器组件

Struts2的控制器组件是Struts2的核心,其实所有MVC框架的核心都是控制器组件。实际上,Struts2应用中起作用的业务控制器不是用户定义的Action,而是系统生成的Action代理,但Action代理是以用户定义的Action为目标。

public class LoginAction {    private String username;    private String password;    public String execute() throws Exception {        return "success";    }}

实际上,Struts2的Action就是一个包含execute方法的而普通Java类。

2.Struts2的配置

任何MVC框架都需要与Web应用整合,则不得不借助web.xml文件,只有配置在web.xml文件中servlet才会被加载。

对于Struts2框架,Web应用需要加载FilterDispatcher,只要Web应用负责加载FilterDispatcher,FilterDispatcher会加载应用的Struts2框架,因此将Struts2的核心控制器设计成Filter,而不是一个Servlet。

安装Struts2

Struts2必须需要依赖于XWork,lib依赖包:struts2-core-2.jar、xwork-2.jar和ognl-2.jar等必须类库。

web.xml配置文件

struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
*.action
struts2
*.jsp

Action用户请求

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>      My JSP 'MyJsp.jsp' starting page        
名字
年龄
性别

这个页面没有任何动态内容,完全是一个静态的HTML页面,但注意该表单的action属性:login.action,当表单提交时,Struts2的FilterDispatcher将用户请求转发东对应的Struts2的Action。

Struts2的Action默认拦截器所有后缀为.action的请求。

说明:笔记内容摘自《Struts2权威指南》

关联: