仪器网(yiqi.com)欢迎您!

| 注册2 登录
网站首页-资讯-专题- 微头条-话题-产品- 品牌库-搜索-供应商- 展会-招标-采购- 社区-知识-技术-资料库-方案-产品库- 视频

问答社区

过滤器和的区别

糖呆物 2016-03-07 05:16:38 428  浏览
  •  

参与评论

全部评论(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月突出贡献榜

推荐主页

最新话题