Struts2的工作流程和容易忽略的问题
工作流程:
1,客户端提交一个HttpServletRequest请求
2,请求经过一系列的Filter的处理(ActionCleapUp,FilterDispatcher);
3, FilterDispatcher是Struts2的核心控制器,通常这是最后一个过滤器;
4, 请求到FilterDispatcher后,将询问ActionMapper是否调用一个Action来处理这个Request
5, 如果ActionMapper决定调用一个Action,FilterDispatcher把请求交给ActionProxy,进行处理;
6 ActionProxy通过Configuration Manager访问struts.xml;
7 ActionProxy 创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(注意调用前会加载相关的所有Interceptor)
8,Action执行完毕,返回给result字符串,此时再按相反的方向通过Interceptor拦截器
9,最后ActionInvacation负责根据struts.xml配置的result元素,找到返回值相应的result,决定返回的视图;
设计模式的角度:MVC的思想相似与观察者模式;在观察模式中,观察者和被观察者是两个对等的对象;在MVC思想中,被观察者往往只是数据体,而观察者是视图;
注意;经典的MVC与Web应用中的MVC也有差别,主要原因是web应用时一种基于HTPP请求/响应模式的,对于http的请求响应,如果用户不对应用发出请求,视图无法自动更新。
MVC架构的底层机制是:核心Servlet或Filter接受到用户请求后,通常会对用户进行简单的预处理(解析,封装参数)然后通过反射创建Action实例,并调用Action指定的方法来处理用户的请求,但是如果Servlet或者Filter拦截了用户的请求,就会通过下面的两种方式创建Action实例;
a: 通过配置文件,可以配置login.action对应使用LoginAction类《这样MVC架构就能创建对象;
b:利用约定:例如:核心控制器收到regist.action请求后,将调用Action类来处理请求。