今天就对使用Filter技术能做什么来个小小的归纳。也为了方便今后的复习。
控制浏览器不进行对jsp页面的缓存
//在doFilter方法中添加这样的代码
HttpServletRequest request = (HttpServletRequest )req;
HttpServletResponse response = (HttpServletResponse )resp;
response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
//放行
chain.doFilter(request,response);
然后记得在web.xml文件中进行声明,最重要的是在url-pattern中设置为*.jsp即可。其余的就不在过多的讲述。
这样,就可以实现不缓存jsp页面的方法了。
Filter 映射的细节
在filter-mapping中配置dispatcher子标签可以控制过滤的范围和方向。有如下四个级别(或者选择性):
- REQUEST:默认值;对以请求方式访问的有效
- FORWARD:对转发方式的过滤有效
- INCLUDE:对include方式的过滤有效
- ERROR“对error方式的过滤有效
需要注意的是:filter-mapping可以对一个filter配置多个;
dispatcher标签也可以配置多个,而且同时有效!
使用的时候需要考虑清楚对哪一种方式进行过滤。这样才会有针对性的对网站起到优化的作用!
使用过滤器增强request的转义的功能
实现的步骤:
- 自定义一个实现了HttpServletRequestWrapper类的类
- 重写里面的getParameter方法,完成转义的效果
- 在过滤器的doFilter方法中进行相关字符串的转移效果
- 最后调用chain.doFilter方法进行放行即可
具体的转义功能实现代码如下:
//该方法来自Tomcat\apache-tomcat-8.0.24\webapps\examples\WEB-INF\classes\util\HTMLFilter.java.
//我们只需要把要进行转义的字符串调用此方法进行转义即可
public static String filter(String message) {
if (message == null)
return (null);
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuilder result = new StringBuilder(content.length + 50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
未完 ,待续······