Struts2 的基本工作流程
Struts2框架是由3个本分组成:
-
核心控制器FilterDispatcher
-
业务控制器
-
用户实现的业务逻辑组件
下面来分别介绍这3个部分:
-
核心控制器FilterDistpatcher, 负责拦截所有的用户请求,是作为一个Filter运行在Web应用中,在web.xml中配置。 当用户请求到达时,该Filter会过滤用户的请求,请求要是以action结尾,该请求就会被转到Struts2框架来处理。
-
Struts2处理请求的action的时候,会到sturts.xml中去找相应的Action实例,其实并不是用户实现的Action实例,而是一个Action的代理——因为用户实现的业务控制器没有直接和Servlet API相关连,是无法处理用户请求的。所以在这里,Struts2使用了AOP技术,动态代理来定义一些拦截器,这些拦截器负责将HttpServletRequest请求中的参数解析出来,传到Action中,并回调Action实例中的execute方法来处理用户的请求。
-
用户自己实现的业务逻辑组件,只是一个代理目标,它包含了对用户请求的处理。用户请求的参数还是包含在HttpServletRequest对象里,而用户自己定义的Action类是不能直接反问HttpServletRequest对象的。拦截器会负责将HttpServletRequest里的请求的数据解析出来,交给用户实现的业务逻辑组件。
知道了上面的原理,接下来就好办了。例如 模型驱动的实现原理就清楚多了(这里只是我自己的理解)
-
首先,要使用模型驱动,就要在Action的类中实现ModelDriven接口,实现ModelDriven接口就必须要实现getModel的方法
-
接下来,就要看struts-default.xml的配置,里面有许多的拦截器,在驱动这一块有属性驱动的拦截器,还有模型 驱动的拦截器,属性拦截器为params,模型驱动的拦截器为modelDriven,而ModelDriven拦截器就负责将参数传刚模型的属性。其他的都和上面的一样,只不过多执行了个ModelDriven拦截器的处理而已而已。