天道不一定酬所有勤
但是,天道只酬勤

webx学习(六)——Request Contexts

在其他框架中,都是使用filter来改变request/response对象(通过HttpServletRequestWrapper和HttpServletResponseWrapper)和改变应用执行的流程。
但是filter会有一些局限性,所以在webx框架中,使用request context和pipeline来完成filter的工作。
Request Context,顾名思义,就是一个请求的上下文。事实上,你可以把Request Context看作是HttpServletRequest和HttpServletResponse这两个对象的总和。除此之外,多个Request Context可以被串接起来,被称为Request Context Chain,类似于filter chain。

请输入图片描述

该图为request context chain的执行过程。

在一个请求开始的时候,每个Request Context的“预处理”过程被依次调用。最内层的(即最先的)Request Context最先被调用,最外层的(即最后的)Request Context最后被调用;

在一个请求结束的时候,每个Request Context的“提交”过程被依次调用。和“预处理”的顺序相反,最外层的(即最后的)Request Context最先被调用,最内层的(即最先的)Request Context最后被调用。

Request Contexts的功能
提供基础安全特性,例如:过滤response headers、cookies,限制cookie的大小等。
缓存response中的内容。
延迟提交response。

解析参数,支持multipart/form-data(即上传文件请求)。
重写请求的URL和参数。
一套可扩展的session框架,重新实现了HttpSession接口。
设置locale区域和charset字符集编码。

request context的使用,只需要在webx.xml文件中加入如下配置

<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>

访问特定的Request Context:
访问任意类型的请求中的参数

String value = request.getParameter("myparam");

访问session

HttpSession session = request.getSession();
String value = (String) session.getAttribute("myattr");
session.setAttribute("myattr", newValue);

访问特定的RequestContext接口

ParserRequestContext parserRequestContext =
                RequestContextUtil.findRequestContext(request, ParserRequestContext.class);

ParameterParser params = parserRequestContext.getParameters();

FileItem myfile = params.getFileItem("myfile");

String filename = myfile.getName();
InputStream istream = myfile.getInputStream();

通过ParserRequestContext接口访问参数比HttpServletRequest更方便

ParameterParser params = parserRequestContext.getParameters();



String stringValue = params.getString("myparam"); // 取得字符串值,默认为null
int intValue = params.getInt("myparam"); // 取得整数值,默认为0
boolean booleanValue = params.getBoolean("myparam", true); // 取得boolean值,指定默认值为true
(全文完)
欢迎关注HollisChuang微信公众账号
打赏

如未加特殊说明,此网站文章均为原创,转载必须注明出处。HollisChuang's Blog » webx学习(六)——Request Contexts

分享到:更多 ()

HollisChuang's Blog

联系我关于我