早教吧作业答案频道 -->其他-->
java过滤器怎么不过滤一个页面里包含的多个请求意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户
题目详情
java过滤器怎么不过滤一个页面里包含的多个请求
意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户点击一下,过滤器执行一次,
我的过滤器是为了用户访问页面进行抽奖的,用了2楼的方法的话那么就不能实现浏览页面抽奖了
意思就是:我要访问的一个页面里包含了好几个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差不多.
如果是限制用户操作的话,那就必须将用户操作持久化.
由于你的问题不明确,我也不好多说...
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差不多.
如果是限制用户操作的话,那就必须将用户操作持久化.
由于你的问题不明确,我也不好多说...
看了 java过滤器怎么不过滤一个...的网友还看了以下:
列方程解应用题.如图,利用一面墙(长度不限),用24m长的篱笆,怎样围成一个面积为70m2的长方形 2020-05-13 …
用一面长80米的墙为一边,用总长度为120米的篱笆围成一个矩形的场地①求表示矩形的面积y(㎡)与墙 2020-05-14 …
1.利用一面墙(墙的长度不超过45m),用80m长的篱笆围一个矩形场地(1)怎样围才能使矩形场地的 2020-06-20 …
有红、黄、蓝、白四种不同颜色的的小旗各一面,至少用一面,最多用两面,一共可以组成多少种? 2020-06-26 …
如图所示,O为杠杆的支点,为了提高重物P,用一个水平方向的作用力F,使杠杆缓慢的由位置A拉至位置B 2020-06-27 …
王大伯买了24米长的网子,打算靠墙围一块长方形或正方形菜地(每条边长都是整米数).如果利用一面墙, 2020-06-28 …
出旗用一面红旗,升旗用另一面国旗行吗?(就是一次升国旗用两面国旗) 2020-07-06 …
用某种建材,利用一面围墙,围一个总面积为300平方米得两块矩形菜园,为使所用材料最省,该矩形的长和 2020-07-08 …
李大爷有一段长10.99米的铁栅栏,现在他要用这段铁栅栏围成一个半圆形的鸡舍,其中一面利用一面长7 2020-07-10 …
求排列组合数学题,有红黄蓝三种旗子,分别用一面两面三面都能...求排列组合数学题,有红黄蓝三种旗子, 2020-12-12 …