我正在使用 的子类HttpServletRequestWrapper
对请求参数进行一些翻译,并在第一次请求翻译值时缓存它们。比如第一次getQueryString()
被调用,我调用super.getQueryString()
并计算出我想要的结果并保存在一个字段中,然后返回。下一次,我只使用缓存的结果。
除非有一些“转发”,否则这种方法就像一个魅力。当一个请求被转发时,Tomcat 替换了原来的请求,所以我缓存的查询字符串没有改变,转发的页面得到的是原来的查询字符串,而不是转发到的那个。
覆盖setRequest()
清除缓存的方法也无济于事,好像请求被包装了两次,它调用了setRequest
内部包装器(这不是我的),我无法知道它何时发生。
我正在寻找一种在包装的请求层次结构发生变化时得到通知的方法,以便在有“转发”时清除缓存。