在pe框架简介3--MainServlet中,我们已经通过MainServlet调起了mainController.process();
下面我们来分析下mainController.process()的源码,其中的关键步骤如下图:
1、var4 = ((ExtendedContextResolver)this.char).resolveContext(var1, var2, var3,this.void,this.else);
其中,this.char :
1、private ContextResolver char = new DefaultExtendedContextResolver();(默认值)
2、CEBClientWAPContextResolver (根据如下配置可知,程序中用的是这个)
我们找到resolveContext ()方法,关键代码:
LocalServletContext var10= new LocalServletContext(var7, var1, var3, var5, var2);
进入构造方法:this.Inner(var1, var3);
关键操作:setUser()、setDataMap()、setData()------------注:此处是否在为context赋值留口子??
可知,该方法是在为context赋值,var4 为context。
另外,通过log.debug打印日志:Transaction Id: prelogin appended map: {} 可以看出 var7=prelogin var6 为空
2、this.goto.execute(var4); 将LocalServletContext 类型 的var4传入goto.execute ()中,
其中 : 通过 public void setCoreController(CoreController var1) { this.goto = var1;}
<bean id="mainController" class="com.csii.pe.channel.http.servlet.MainController" >
<param name="loginView">login</param>
coreController
<ref name="constantsMap">constantsMap</ref></bean>
可知:this.goto 为coreController ,也就是说调用coreController .execute ()。
coreController对应实现类<coreController id="coreController" class="com.csii.pe.core.CoreControllerImpl" />,
对coreController的具体分析详见 pe框架简介5--CoreController。
3、String var6 =this.resolveViewName(var4); 所有的action执行完后,开始加载相应的jsp页面