以企业端ActQryPre.do为例,菜单导航栏触发
Menu ActQry 2 PActQry,ActQryPre.do
tomcat 解析web.xml标签 读取<listener>和<context-param>两个结点创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。tomcat将<context-param>转换为键值对,并交给servletContext。 并创建<listener>中的类实例,创建监听器。
// ServletContext -> context-param -> listener -> filter -> servlet。 <display-name>powerengine dispatcher</display-name> <servlet-name>Dispatcher1</servlet-name> <servlet-class>com.csii.pe.channel.http.servlet.MainServlet</servlet-class>
MainServlet组合 multipartResolver multipart解析器、localeResolver locale解析器、viewResolver 视图解析器、mainController 主控制器。主要是解耦给MainController处理,并处理视图
protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { private void initController() throws BeansException { try { this.controller = (Controller)this.getWebApplicationContext().getBean("mainController"); model = this.controller.process(request, response, locale);
MainController组合 idResolver transactionId解析器、contextResolver 上下文解析器、exceptionHandler 异常处理、coreController 逻辑处理,责任链入口。主要是解耦给coreController,这里的上下文解析器将请求转换到context,transactionId找到template,模板走注入的chain
chain 就是责任链模式,最后处理的是DelegateCommand。requestCheckCommand UGC(用户提交内容)和谐,防止XSS、loginControlCommand 防撞库、tokenControlCommand 防重复提交,防CSRF(跨站请求伪造)、tokenControlVercodeCommand 图形验证码校验、phoneTokenControlCommand 短信验证码校验、ValidationCommand:执行系统级的基于Style的有效性检查、DelegateCommand:每一个Chain必须有一个而且仅限于一个DelegateComand
MainServlet–>MainController–>CoreController–>Chain–>Template–>Action。流程最终到了我们自己写的action处理后,返回dopost等一套类似的逻辑。