使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()
今天调代码的时候,突然发现,服务器开着,什么都没有问题,当我把下面这个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);
}
使用filter导致服务器返回的页面始终是空白---在doFilter中漏写了chain.doFilter()的更多相关文章
- loadrunner关联——对服务器返回的数据选择性提交
在跟进项目的过程中,才体会到自己之前闷头看书再写小小的测试程序验证的学习方式很没有效率,知道动态关联,却也只是会参数化式的动态关联,这种关联是我们预先知道要提交的数据而进行的关联:更高一级的可能就是使 ...
- filter应用案例四:页面静态化
1 说明 你到"当当"搜索Java分类图书时,"当当"会去查询数据库!每天都有很多人去搜索"Java分类"的图书,每次都去访问数据库,这会有 ...
- 服务器返回的各种HTTP状态码介绍
[摘要]HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 2817.RFC 22 ...
- 服务器返回的14种常见HTTP状态码
当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...
- 由奇葩cookie导致服务器500来认识cookie
问题:cookie中文会导致服务器报500错误. 一:cookie的特点 1.以键值对的形式出现的,比如:a=b;b=c 2.中文的值需要转义 cookie的例子 <!DOCTYPE html& ...
- JS请求服务器并使页面跳转(转)
前段时间在项目中用到了前台框架EasyUI,各种组件都是差不多都是用js来渲染的,这样一些页面请求就必须用js代码来写. 但是js请求就不和html请求的玩法不怎么相同,比如我要向服务器发送一个请求然 ...
- HttpWebResponse远程服务器返回错误: (500) 内部服务器错误。
现象 我们编码实现请求一个页面时,请求的代码类似如下代码: HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl); req.Us ...
- 用Filter程序实现静态HTML页面的访问保护
今天为练习Filter的用法编写了一个小程序. 当用户通过article的超链接读取文章的时候,会通过Filter进行检测有没有登录.只有登录的读者才能跳到文章页面,否则跳到登录页面. 文章就用简单的 ...
- C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令
如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebExce ...
随机推荐
- Ubuntu解压缩zip,tar,tar.gz,tar.bz2
ZIP zip可能是目前使用得最多的文档压缩格式.它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用.缺点就是支持的压缩率不是很高,而tar.gz和tar. ...
- SwaggerUI+SpringMVC——构建RestFul API的可视化界面
今天给大家介绍一款工具,这个工具眼下可预见的优点是:自己主动维护最新的接口文档. 我们都知道,接口文档是非常重要的,可是随着代码的不断更新,文档却非常难持续跟着更新,今天要介绍的工具,完美的攻克了这个 ...
- glob 模块
# -*- coding: utf-8 -*- #python 27 #xiaodeng #glob 模块 #http://python.jobbole.com/81552/ #查找文件只用到三个匹配 ...
- samba温故知新
SAMBA服务器可以实现Windows主机和Linux主机共享资源互访的功能,即在Windows下可以通过网上邻居访问Linux操作系统中SAMBA服务器共享的文件夹,当然,Linux操作系统之间同样 ...
- Xiuno BBS 3.0 轻论坛程序正式版发布。
github:git clone -b v3.0 https://git.oschina.net/xiuno/xiunobbs 安装包:http://bbs.xiuno.com/down/xiuno_ ...
- 浅谈软件配置管理工具(github & SVN)
1 配置管理名词定义 1.1 配置项 软件生存周期各个阶段活动的产物经审批后即可称之为软件配置项. 软件配置项包括: ①与合同.过程.计划和产品有关的文档和资料: ②源代码.目标代码和可执行代码: ...
- SQLite简单介绍
一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...
- C# 如何调试安装包
在需要调试的地方插入如下代码即可启动调试: System.Diagnostics.Debugger.Launch();
- Selenium-Grid工作原理
selenium-grid是由一个hub节点和若干个代理节点组成.hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行.使用seleni ...
- 转 Python标准库01 正则表达式 (re包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我将从正则表达式开始讲Python的标准库.正则表达式是文字处理中常用的工具,而且 ...