使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
来源:互联网 发布:马龙丁宁知乎 编辑:程序博客网 时间:2024/05/29 12:39
今天调代码的时候,突然发现,服务器开着,什么都没有问题,当我把下面这个filter给deploy了以后,访问所有的页面就都是空白。
后来发现,是因为在代码路径中,有一条路径没有调用filterChain.doFilter(request, response),想来也是,你这不就等于把HttpServletRequest给丢失了么。
web.xml中,在enable=”false”的情况下,会出现我上面描述的问题,代码如下
package org.foo.filterdemo ;import java.io.* ;import javax.servlet.* ;public class SimpleFilter implements Filter { private boolean enable = false; public void init(FilterConfig config) throws ServletException{ String enableString = config.getInitParameter("enable"); if (enableString != null && enableString.equalsIgnoreCase("true")) { this.enable = true; } String initParam = config.getInitParameter("ref") ; try { initParam = new String(initParam.getBytes("iso-8859-1"), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(this + ": init(), init-param = " + initParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{ if (this.enable) { System.out.println(this + ": doFilter()") ; chain.doFilter(request, response); } else { // chain.doFilter(request, response); // 如果你发现页面始终是空白,问题就出在这里,不能缺少这行代码 } } public void destroy(){ // clean up System.out.println(this + ": destroy()"); }}
web.xml
注意enable选项为false的时候,如果上面被注释掉的代码没取消注释,那么就会出问题,因为这里的url-pattern设置了此filter对站点的所有页面都要起作用
<filter> <filter-name>simple-filter</filter-name> <filter-class>org.foo.filterdemo.SimpleFilter</filter-class> <init-param> <param-name>enable</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>ref</param-name> <param-value>这是一串中文,给SimpleFilter的</param-value> </init-param> </filter> <filter-mapping> <filter-name>simple-filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
实际上,由于chain.doFilter()是不可缺少的,因此添加了enable参数的filter的代码应该这样写:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{ if (this.enable) { // do some work } chain.doFilter(request, response);}
Article from “rldts” in “http://www.cnblogs.com/”
Original Article : http://www.cnblogs.com/qrlozte/p/3178454.html
Copyright rldts
阅读全文
0 0
- 使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
- chain.doFilter
- 浅谈filter中的chain.doFilter(request, response)的作用
- Java filter中的chain.doFilter详解
- Java中的过滤器doFilter里的chain.doFilter()函数理解
- chain.doFilter(request,response)的作用
- chain.doFilter(request, response)的简单介绍
- 对chain.doFilter(request,response)的理解
- 对chain.doFilter(request,response)的理解
- 对chain.doFilter(request,response)的理解
- 对chain.doFilter(request,response)的理解
- chain.doFilter(request,respnse)
- 【Java】Filter过滤器中,在chain.doFilter(request,response)后若有重定向或转发语句
- 关于filter拦截请求及chain.doFilter(request, response)的理解
- filter(字符编码过滤器)(chain.doFilter(request,response))
- chain.doFilter(request,response)含义
- chain.doFilter(request,response)含义
- chain.doFilter(request,response) 解析
- C语言的字符串输入函数gets_s()
- Ajax传递的数据包含特殊字符时的解决方法
- 启动Tomcat时,报错;Address already in use: JVM_Bind<null>:8080
- Hadoop学习-hive的安装配置与常见问题解决
- 搭建分布式Hadoop环境
- 使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
- 【步兵 cocos2dx】热更新(下)
- MyFlag Step12:menupath界面跳转测试以及其他优化
- python3运行py的文件时会出现missing parentheses is call to 'print'
- Renting Bikes(二分+贪心)
- ByteBuffer.mark()方法
- 项目实训-千寻-LBS派单逻辑
- 面试问题什么是异步非阻塞
- Eclipse搭建Scala入门经典程序Helloworld