全部评论(2条)
-
- yxm00003 2016-03-08 00:00:00
- 过滤器和的区别在于过滤器可以选择性地让部分通过,是尽可能地不能通过。
-
赞(1)
回复(0)
-
- changaidong66 2016-03-08 00:00:00
- 1、首先要明确什么是、什么是过滤器 1.1 什么是: ,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 在Webwork的中文文档的解释为——是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。 谈到,还有一个词大家应该知道——链(Interceptor Chain,在Struts 2中称为栈 Interceptor Stack)。链就是将按一定的顺序联结成一条链。在访问被拦截的方法或字段时,链中的就会按其之前定义的顺序被调用。 1.2. 的实现原理: 大部分时候,方法都是通过代理的方式来调用的。Struts 2的实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的对象,然后串成一个列表(list),Z后一个一个地调用列表中的。 1.3 什么是过滤器 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择: ①以常规的方式调用资源(即,调用servlet或JSP页面)。 ②利用修改过的请求信息调用资源。 ③调用资源,但在发送响应到客户机前对其进行修改。 ④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。 1.4 Servlet过滤器的基本原理 在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到Z终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。 2、与过滤器的区别 : 1. 是基于java的反射机制的,而过滤器是基于函数回调。 2. 不依赖与servlet容器,过滤器依赖与servlet容器。 3. 只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4. 可以访问action上下文、值栈里的对象,而过滤器不能访问。 5. 在action的生命周期中,可以多次被调用,而过滤器只能在容器初始化时被调用一次 的代码实现(以struts2为例): 1、在xml文件中如何定义 <interceptors> <interceptor name="filterIPInterceptor" class="com.xxxx.web.FilterIPActionInterceptor" /> <interceptor-stack name="filterIPStack"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="filterIPInterceptor" /> </interceptor-stack> </interceptors> 2、怎么遍别写自定义 public class FilterIPActionInterceptor extends AbstractInterceptor { /** 日志控制. */ private final Log log = LogFactory.getLog(getClass()); /** * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) */ @Override @SuppressWarnings("unchecked") public String intercept(ActionInvocation invocation) throws Exception { String result = null; // 获得当前方法名. String methodName = invocation.getInvocationContext().getName(); String currIp = null; try { if (invocation.getAction() instanceof PortletAction) { PortletAction action = (PortletAction) invocation.getAction(); currIp = action.getRequest().getRemoteAddr(); } String ip = ApplicationResource.getHotValue("ALLOW_CACHE_IP"); if (StringUtils.isBlank(ip) || StringUtils.isBlank(currIp)) { log.error("允许刷新的IP不存在或当前请求的IP非法."); throw new NoAllowIPException(); } else { String[] ips = ip.split(","); boolean errorIp = true; for (String s : ips) { if (s.equals(currIp)) errorIp = false; } // 判断IP if (errorIp) throw new NoAllowIPException(); } result = invocation.invoke();//调用被拦截的方法 } catch (Exception e) { log.error("异常类名:" + invocation.getAction().getClass()); log.error("异常方法:" + methodName, e); throw e; } return result; } } 3、怎么编写过滤器 1、在web.xml里面配置自定义的 <filter> <filter-name>Redirect Filter</filter-name> <filter-class>com.xx.filter.RedirectFilter</filter-class> </filter> <filter-mapping> <filter-name>Redirect Filter</filter-name> <url-pattern>/xx/xx/*</url-pattern> </filter-mapping> 2、如何编写自定义的 public class RedirectFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { // 获取URL Long startTime = null; if (log.isDebugEnabled()) { startTime = System.currentTimeMillis(); } HttpServletRequest httpRequest = (HttpServletRequest) request; String url = httpRequest.getRequestURL().toString(); if (url == null || url.trim().length() == 0) { return; } if (url.indexOf(luceneCreateMapping) != -1 || url.indexOf(luceneSearchMapping) != -1) { doFilterForxxx(request, response, url); } else { doxxxx(request, response, url); } if (log.isDebugEnabled()) { long endTime = System.currentTimeMillis(); Thread currentThread = Thread.currentThread(); String threadName = currentThread.getName(); log.debug("[" + threadName + "]" + "< " + this.getClass().getName() + " " + url + " " + (endTime - startTime) + " ms"); } // 激活下一个Filter filterChain.doFilter(request, response); } }
-
赞(17)
回复(0)
热门问答
- 过滤器和的区别
2016-03-07 05:16:38
428
2
- 过滤器和的区别
2017-10-19 12:00:41
492
1
- struts2和过滤器的区别
2018-11-12 09:27:01
332
0
- springmvc过滤器和的区别
2017-02-03 13:23:29
355
1
- spring过滤器和的区别和联系
2018-11-13 06:04:05
367
0
- y型过滤器和t型过滤器的区别
2017-09-28 00:58:37
515
1
- 管道单向阀和过滤器的区别
2016-07-10 12:45:44
315
1
- filter过滤器和的区别是什么?
2017-12-30 21:14:57
386
1
- ZU-H过滤器和ZU-A过滤器区别在哪里?
2017-08-16 19:17:28
504
1
- GX过滤器H13和H14的区别
2017-11-23 13:12:00
518
1
- GX过滤器H13和H14的区别
2015-02-18 04:56:35
412
3
- 过滤器和氧气泵的区别,养鱼可以只用过滤器吗
2014-06-23 07:22:35
782
3
- SpringMVC的和过滤器的区别与联系
2018-11-12 06:34:17
389
0
- jquery中的选择器和过滤器的区别
2016-07-13 00:37:28
422
2
- java web 过滤器跟的区别和使用
2018-04-17 04:54:51
320
2
- y型蒸汽过滤器和水过滤器的区别
2015-05-11 05:20:56
426
1
- 双筒过滤器与单筒过滤器的区别?
2016-05-17 14:22:32
363
2
- 生物安全柜中ULPA过滤器和硼硅酸盐纤维材质的超高过滤器的区别
2012-08-07 16:32:07
659
2
- g3空气过滤器和g4的有区别吗
2017-01-13 05:15:04
282
1
- 粗效过滤器与初效过滤器的区别
- 粗效过滤器与初效过滤器有什么区别啊?我们部长说是这个“初”,但是也有这个“粗”啊!!大虾帮帮忙啊!!
2018-03-16 23:00:43
686
1
12月突出贡献榜
推荐主页
最新话题
-
- #八一建军节——科技铸盾,仪器护航#
- 如何选择到合适的磷青铜绞线?磷青铜绞线的质量...如何选择到合适的磷青铜绞线?磷青铜绞线的质量解析和如何选择到合适的绞线?磷青铜绞线是一种特殊的铜合金导线,由铜、锡和磷等元素组成,具有很好的机械性能、电气性能和耐腐蚀性。磷青铜绞线基本定义与特性:磷青铜是铜与锡、磷的合金,质地坚硬,可制弹簧。典型成分为铜(90%)、锡(6-9%)及磷(0.03-0.6%)锡元素提升合金的强度和耐腐蚀性,磷则细化晶粒、增强耐磨性铸造性能。耐磨性:表面氧化层使其在特殊环境下耐腐蚀,使用寿命长导电性:保持铜很好导电性能的同时有化电子传输路径非铁磁性:不含铁元素,避免在强磁场环境中产生额外能量损耗弹性:受到外力作用时能迅速恢复原状
- 八一建军节 铁血铸军魂













参与评论
登录后参与评论