Webx框架:RequestContext详解

RequestContext是Webx框架中结合request和response的关键组件,具备装饰器模式特性,允许串联创建Filter链条。其种类包括basic、buffered、lazy-commit、parser、rewrite和session等,每种都有特定功能,如解析请求、处理上传文件、URL重写等。配置时,框架会自动处理依赖关系,如session依赖于basic。通过findRequestContext方法,可访问特定的RequestContext,例如ParserRequestContext用于获取上传文件信息。
摘要由CSDN通过智能技术生成
RequestContext

RequestContext可以看成request和response的合体。多个RequestContext还可以串起来,就像Filter链条一样。每个外层RequestContext都会在内层RequestContext的基础上增加功能。在设计模式中这叫装饰器。


RequestContext种类有basic/buffered/lazy-commit/parser/rewrite/session/set-locale功能。后面还会具体介绍。


下面是配置方法:

<services:request-contexts xmlns="http://www.alibaba.com/schema/services/request-contexts">
<basic />
<buffered />
<lazy-commit />
<parser />
<set-locale defaultLocale="zh_CN" defaultCharset="UTF-8" />
<!-- Optional -
<session />
<rewrite />
-->
</services:request-contexts>


RequestContext之间是有依赖关系的,比如session依赖于basic。框架会自动根据依赖关系排序RequestContext,所以开发的时候可以不考虑顺序。


访问特定的RequestContext。如果想要通过ParserRequestContext获取上传的文件信息怎么做呢?可以通过findRequestContext获取文件信息。

ParserRequestContext parserRequestContext =
RequestContextUtil.findRequestContext(request, ParserRequestContext.class);
ParameterParser params = parserRequestContext.getParameters();
FileItem myfile = params.getFileItem("myfile");
String filename = myfile.getName();
InputStream istream = myfile.getInputStream();


RequestContext种类

BasicRequestContext。基础RC,它可以包含多个拦截器。配置方法如下。

<basic>
<request-contexts:interceptors
xmlns="http://www.alibaba.com/schema/services/request-contexts/basic/interceptors">
<interceptor class="...Interceptor1" />
<interceptor class="...Interceptor2" />
</request-contexts:interceptors>
</basic>


不管有没有声明,BasicRC总是会启用一个默认拦截器。默认拦截器主要是一些安全检查,避免Http Header Value中出现CRLF,status message增加html escape,限制cookie的总大小。下面这个例子给默认拦截器增加参数。

<request-contexts:interceptors
xmlns="http://www.alibaba.com/schema/services/request-contexts/basic/interceptors">
<response-header-security-filter maxSetCookieSize="5K" />
</request-contexts:interceptors>


set-locale会将默认的Locale和默认的字符集保存在ThreadLocal中,调用框架提供的StringEscapeUtils.escapeURL,TemplateService都会根据当前线程的Locale和字符集自动编码解码。TemplateService会根据Locale寻找对应的模板文件,比如TestPage_zh_CN.vm。


set-local

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值