easyjweb请求处理详解

 

 

easyjweb服务启动之后,便可接受请求。当一个请求到达时:

 

一、

过滤器CharsetFilter根据web.xml中配置对编码方式进行转化request.setCharacterEncoding(encoding),若用get方式提交表单,该功能无效,需要在程序中手动处理。

 

二、

中心处理器ActionServlet根据配置处理*.ejf或/ejf/*形式的请求。保存request和response到ActionContext,并设置Local;初始化DefaultRequestProcessor,并执行处理

 

三、

利用PathMappingRulerImpl解析request①;配置国际化,默认资源路径为/WEB-INF/applicationResources/,根据客户设置或者从request中获得local

 

四、

通过webConfig查询module(根据module的name或alias)②;

从request中读取个参数③并创建WebForm(直接实例化WebForm或者根据配置form获得,此处为前者)保存参数;

根据module创建相应的Action(在container中查找,不存在则默认创建,已过时②);

将action,module,form保存于WebInvocationParam对象,以WebInvocatio保存在ActionContext中。

 

五、

执行全局拦截器(配置文件,目前只支持无参方法执行);

执行module的前置拦截器,需要实现BeforeInterceptor接口,实现before(Object target,Method method,Object[] args)方法,其中target为action,method为null,args[0]=WebInvocationParam

处理AutoToken,如果有配置,用于防止重复提交:需从form中提取com.easyjf.easyjweb.token得到令牌,并检测是否合法④

执行action.execute()方法(详见execute详解)并保存form数据到property中,并用addResult保存到resultMap中

执行module的后置拦截器,如果验证出错(Errors.hasError())且模板有配置验证,则查找并返回自动验证页面(name为input的页面,无则是请求页面)

 

六、

根据page的type执行页面跳转:

1、template或string

合成模板⑤,执行回调(用于Ajax调用,Ajax章节详解),然后根据uri执行RequestDispatcher跳转

2、null

 空结果集页面,表示不返回任何结果集

3、action

处理action类型的Page对象,对于该类型对象,会记录已经跳转的次数,并在跳转次数达到框架设置的最大跳转次数后抛出FrameworkException。如果能继续传递该跳转,会根据page的url样式构建一个新的pathRuler对象,并将当前的WebForm和pathRuler对象一起传递给process方法重新执行下一个action。

4、forward

根据page的url直接执行dispatch跳转

5、其他,如html

执行response.sendRedirect(page.getUrl());

 

 

注:

解析请求url核心方法PathMappingRulerImpl:doPathParse

url有3种形式,解析得到module,[cmd,param]

1、/xx.ejf(classic_pettern),去掉后缀即可得module,其余参数由容器解析

2、/module/cmd/param,第一种url的变形

3、/easyajax/ajaxCall,ajax请求形式,解析出module=easyajax,command=ajaxCall

 

代码中由不存在时的判断,则根据url路径生成IWebAction全名(/hello-->默认action路径.HelloAction,/hello/test-->*.Hello_testAction),并初始化module对象。该方法已过时,默认路径下的Action崽初始化的时候也应该被扫描,如注入等操作才能进行

 

 

 

1、有文件上传(contentType.startsWith("multipart/form-data"))且为post方式,先创建临时目录,在

 

 

     
 

2、contentType为text/xml型

   用request.getReader()按行读取,以"xml"名保存在textElement

3、通过request.getParameterNames()获得参数保存在textElement

 

 

检测令牌是否合法,并清空令牌值。判断令牌是否合法 如果Session中保存有令牌并且在提交的请求中令牌和Session中的令牌相等的话,返回true

如果Request中没有Session对象,返回false 如果session中没有token,返回false

如果session中的token和请求中的token不一致,返回false

 

 

合成模板:

1、page的type是string类型且page的content不为空,则利用velocity根据content初始化模板

 否则解析模板名字,查询模板缓存,若不存在则利用velocity初始化模板

2、将form中resultMap、创建上下文所需的全局工具⑥、session、request、errors加载到上下文

3、执行velocity模板合成DefaultPageVender:mergeTemplate

 

创建上下文所需全局工具:HtmlUtil、CommUtil、TagUtil、i18n、lang、html、AUTH、ROLE等,见PageVenderSupport:createUtilContext方法。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyJWeb综述 EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、Struts、JSF、Tapestry等,吸取其优点及精华,是一个完全由来自的中国开源爱好者开发,文档及注释全部为中文的开源框架。 EasyJWeb由主要由四个部分组成: 1、核心MVC。EasyJWeb的核心是一个基于模板技术实现的MVC框架;他能让我们用非常简洁的代码写基于Java的Web应用。 2、容器及通用业务逻辑封装。作为一个旨在让基于Java的Web应用程序开发变得直接、快速、简易的框架,EasyJWeb提供了一个IoC容器,并对企业级应用中的一些通用业务逻辑(如分页、查询、DAO等)进行了抽象及封装,提供了一套可以直接操作、应用企业资源的组件及API。 3、代码生成引擎及工具。仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。如数据库添删改查(CRUD)代码生成、自动页面模版生成、自动配置文件管理等。 4、EasyJWeb插件体系,项目中的各种实用功能的扩展,可以灵活地通过基于插件的形式安装到EasyJWeb中,提供各种针对性的功能。如ajax实用插件、代码生成插件等。
EasyJWeb是基于java技术,用于企业级Java Web应用程序快速开发的MVC框架。框架设计构思来源于国内众多项目实践,框架的设计及实现借鉴当前主要流行的开源Web框架,如Rails、Struts、JSF、Tapestry等,吸取其优点及精华,是一个完全由来自的中国开源爱好者开发,文档及注释全部为中文的开源框架。 EasyJWeb由主要由四个部分组成:   1、核心MVC。EasyJWeb的核心是一个基于模板技术实现的MVC框架;他能让我们用非常简洁的代码写基于Java的Web应用。    2、容器及通用业务逻辑封装。作为一个旨在让基于Java的Web应用程序开发变得直接、快速、简易的框架,EasyJWeb提供了一个IoC容器,并对企业级应用中的一些通用业务逻辑(如分页、查询、DAO等)进行了抽象及封装,提供了一套可以直接操作、应用企业资源的组件及API。    3、代码生成引擎及工具。仅仅依靠一个灵活、简易的MVC核心引擎还不能最大限度的提高开发速度,因此EasyJWeb还提供了一个灵活、易用的代码生成引擎及工具,通过使用代码生成引擎,可以快速完成基于JavaEE平台的企业级应用程序生成。如数据库添删改查(CRUD)代码生成、自动页面模版生成、自动配置文件管理等。    4、EasyJWeb插件体系,项目中的各种实用功能的扩展,可以灵活地通过基于插件的形式安装到EasyJWeb中,提供各种针对性的功能。如ajax实用插件、代码生成插件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值