Browser Caching for GWT RPC Response

来源:互联网 发布:淘宝促销活动有哪些 编辑:程序博客网 时间:2024/05/16 01:08

最近在学习Web System中的Caching技术,其中一种常见的是browser cache,对HTTP GET response应用cache,并通过某些HTTP Header字段控制cache policy。然而,我们web server是基于GWT开发,GWT有自己的一套RPC系统,利用HTTP POST实现client和server之间的异步通讯。这时候问题就来了,用户每一次点击将会触发若干GWT RPC,但browser不会cache HTTP POST response,导致每次点击都要等待后台处理。由于系统中大部分RPC是只读,如果能把browser cache利用起来,不仅可以改善用户体验,而且能减低后台的负载。


那么,很直接的想法是,能否将GWT RPC的POST方式改成GET。这种转换的一个前提是,对于很多的只读RPC,输入参数一般很简单,比如getRequest(int reqId),输入参数就是一个int,完全可以用REST方式将方法名和参数值嵌入URL,这样就能够通过GET发送RPC请求了。


想法成形了,但是如何修改GWT RPC内部机制呢?幸运的是,GWT提供在client和server端都提供了一些API,允许外部系统与RPC进行整合。下面从client和server两个方面来总结如何实现。


Client-side

通过ServiceDefTarget接口,可以设置custom RpcRequestBuilder,实现GET方式的RequestBuilder,并将方法名和参数值嵌入URL,代码段如下:



Server-side

需要实现一个Servlet来接受GET请求。参考如下doGet实现,一部分是从URL中取出方法名和参数值,然后调用真正的RPC方法,另一部分是集成GWT RPC系统。最重要的部分是调用RPC和RPCServletUtils的一些API,将方法返回值encode和serialize成GWT RPC定义的格式,并写入HttpServletResponse。


HTTP GET方式的RPC框架搭好后,需要应用servlet filter设置response HTTP Header的参数来通知browser使用cache并且告诉它cache policy。GWT server library是一个提供GWT和Spring整合的开源库,它提供了一个ResponseHeaderFilter,可以满足需求。最后,在web.xml中定义如下:



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 兔兔助手描述文件变了存档怎么办 扣扣没有绑手机被盗了怎么办 我的扣扣被盗了好友也被删了怎么办 小孩不胖但脖子黑怎么办呢 小孩喜欢歪头斜眼看东西怎么办 苹果x屏幕截图发送后成文字怎么办 小朋友照相照出老太脸是怎么办 照相把脸照的很长怎么办 小猫咪下半身不能动不吃不喝怎么办 画个火柴人2主页面进不了怎么办? 火柴人联盟2的衣厨怎么办 偶尔犯了一次错误很自责怎么办 房间已经装修好但想加线条怎么办 自己的房间特别乱却不想收拾怎么办 素描中当阴影面正对着自己怎么办 相爱的俩个人却不能在一起怎么办 苹果手机爱思助手下不了东西怎么办 苹果手机在爱思助手刷坏了怎么办 美团外卖摔坏我的奶茶怎么办 米兔定位电话头像突然调换了怎么办 还在气头上时孩子就来撒娇了怎么办 老公把老婆微信屏蔽了老婆该怎么办 魅族手机有质量问题不给退款怎么办 屏幕点不动锁屏密码无法点怎么办 在嘴巴和鼻翼周围长痘该怎么办 小孩嘴巴被蚊虫咬的红肿怎么办 每次洗头都掉好多头发该怎么办 关于宝宝脾不好胃口却很好怎么办 高中生掉发严重怎么办该看什么科 脱头发如何治疗 掉头发厉害怎么办 头发上突然秃了一小块怎么办 全秃过后长出来白色头发怎么办 高三学生喜欢打球影响学习怎么办 高三学生受同学搔挠学习怎么办 烫完头发掉头发很厉害怎么办 烫头发后掉头发很厉害怎么办 十八岁了下门牙活动疼痛怎么办 烫完头发后掉头发很厉害怎么办 16岁的孩孑得了肺炎怎么办 我的头发掉的很厉害怎么办 八个月宝宝头后面没头发怎么办