早教吧 育儿知识 作业答案 考试题库 百科 知识分享

java过滤器怎么不过滤一个页面里包含的多个请求意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户

题目详情
java过滤器怎么不过滤一个页面里包含的多个请求
意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户点击一下,过滤器执行一次,
我的过滤器是为了用户访问页面进行抽奖的,用了2楼的方法的话那么就不能实现浏览页面抽奖了
▼优质解答
答案和解析
abstract public class FilterPerRequest implements Filter {
private static final Boolean FILTERED = true;
private ThreadLocal statusLocal = new ThreadLocal();
@Override
final public void doFilter(ServletRequest req,ServletResponse resp,
FilterChain chain) throws IOException,ServletException {
if (hasNotFiltering()) {
doFilterAndDispatchRequest(req,resp,chain);
return;
}
//dispatch request only
chain.doFilter(req,resp);
}
private boolean hasNotFiltering() {
Boolean status = statusLocal.get();
if (status == null) {
return true;
}
return false;
}
private void doFilterAndDispatchRequest(ServletRequest req,
ServletResponse resp,FilterChain chain) throws IOException,
ServletException {
try {
doFilterPerRequest(req,resp);
setFiltered();
chain.doFilter(req,resp);
} finally {
cleanFilterStatus();
}
}
abstract protected void doFilterPerRequest(ServletRequest req,
ServletResponse resp);
private void setFiltered() {
statusLocal.set(FILTERED);
}
private void cleanFilterStatus() {
statusLocal.set(null);
}
}
那要就情况而定了.
如果是request范围内的话,就可以使用上面的过滤器.
如果是session范围内的话,就需要在session内存储一个标志变量,方式和request差不多.
如果是限制用户操作的话,那就必须将用户操作持久化.
由于你的问题不明确,我也不好多说...