对于某些请求,由于业务逻辑比较复杂,处理该请求将耗费很长时间
每次响应的内容是固定的
通过Filter读取该请求
第一次接到该请求的时候,正常送给对应的Servlet处理
在filter中,将处理完后的HttpServletResponse中的内容读取出来
由于响应内容不变,因此,存入缓存
再一次接收到相同的请求时
根据请求的路径,查找对应的缓存
读出缓存,直接缓存写入该浏览器请求的ServletResponse中,完成该http请求
因此,不用送给对应的Servlet处理,大大提高Web应用程序运行效率
在Fliter中,如果没找到缓存的内容,需要送给对应的Servlet处理
如果将Filter获取的原始HttpServletResponse送给了下一级对用的Servlet的话,就无法获取下游组件写入响应的内容了
使用自己的CachedHttpServletResponse
在第一次接收到该http请求的时候,并不传入原始的HttpServletResponse
而是传入自己构造的 伪造的 HttpServletResponse (CachedHttpServletResponse)
伪造的
所以,可以在下游组件处理完成后,读取出响应的内容,并存入缓存中
下一次再遇到相同的请求,就将不在送给下游组件处理,而是直接返回缓存
总结的真好!厉害啊!
这个总结的确实好。赞一个
Sign in to make a reply
爱竹子的大黑熊
需要修改响应的场景
对于某些请求,由于业务逻辑比较复杂,处理该请求将耗费很长时间
每次响应的内容是固定的
想要实现的效果
通过Filter读取该请求
第一次接到该请求的时候,正常送给对应的Servlet处理
在filter中,将处理完后的HttpServletResponse中的内容读取出来
由于响应内容不变,因此,存入缓存
再一次接收到相同的请求时
根据请求的路径,查找对应的缓存
读出缓存,直接缓存写入该浏览器请求的ServletResponse中,完成该http请求
因此,不用送给对应的Servlet处理,大大提高Web应用程序运行效率
存在的问题
在Fliter中,如果没找到缓存的内容,需要送给对应的Servlet处理
如果将Filter获取的原始HttpServletResponse送给了下一级对用的Servlet的话,就无法获取下游组件写入响应的内容了
解决办法
使用自己的CachedHttpServletResponse
在第一次接收到该http请求的时候,并不传入原始的HttpServletResponse
而是传入自己构造的
伪造的
HttpServletResponse (CachedHttpServletResponse)所以,可以在下游组件处理完成后,读取出响应的内容,并存入缓存中
下一次再遇到相同的请求,就将不在送给下游组件处理,而是直接返回缓存