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

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

问答社区

java web 过滤器跟的区别和使用

沉默的心767 2018-04-17 04:54:51 289  浏览
  •  

参与评论

全部评论(2条)

  • dsw_123 2018-04-18 00:00:00
    第3点中 1、在web.xml里面配置自定义的 2、如何编写自定义的 应该都是过滤器吧,是写错了吧

    赞(19)

    回复(0)

    评论

  • lushan12207 2018-04-18 14:52:01
    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); } }

    赞(9)

    回复(0)

    评论

获取验证码
我已经阅读并接受《仪器网服务协议》

热门问答

java web 过滤器跟的区别和使用
 
2018-04-17 04:54:51 289 2
java项目和web项目中的过滤器文件怎么使用?
Filter过滤器文件的设置和使用要注意什么问题??它是基于什么来运行的?越详细越好
2016-07-27 01:46:18 637 1
web网络控制器跟网络交换机的区别
web网络控制器跟网络交换机的区别... web网络控制器跟网络交换机的区别 展开
2016-10-11 04:24:56 459 1
web of science 和sci的区别
 
2017-11-26 02:48:20 680 1
java中 过滤器 都有什么区别?尤其是和过滤器
 
2017-11-24 17:11:13 321 1
java过滤器的3、include过滤器
 
2018-11-27 18:29:27 231 0
如何搭建java web测试环境
 
2016-12-17 17:12:36 345 2
过滤器和的区别
 
2016-03-07 05:16:38 405 2
过滤器和的区别
 
2017-10-19 12:00:41 450 1
Java框架Struts2的和过滤器有什么区别?
 
2013-11-06 00:38:44 310 2
java如何创建过滤器
 
2013-07-10 07:52:23 317 2
struts2和过滤器的区别
 
2018-11-12 09:27:01 316 0
springmvc过滤器和的区别
 
2017-02-03 13:23:29 321 1
java中装饰器和过滤器的概念是什么?
 
2009-06-07 04:09:05 415 2
java过滤器中的FilterChain对象
过滤器的doFilter()里有三个参数,那FilterChain对象是哪里传过来的啊它是像request对象一样是JSP的隐藏对象吗 如果只有一个过滤器的话filterchain.doFilter()是执行要访问的页面吗
2013-04-11 15:03:48 332 2
spring过滤器和的区别和联系
 
2018-11-13 06:04:05 343 0
y型过滤器和t型过滤器的区别
 
2017-09-28 00:58:37 429 1
java软件开发工程师和java软件架构师 有啥区别
我想知道 java软件开发工程师和java软件架构师 有啥区别 请大家帮忙
2013-05-26 22:31:00 402 2
管道单向阀和过滤器的区别
 
2016-07-10 12:45:44 261 1
filter过滤器和的区别是什么?
 
2017-12-30 21:14:57 358 1

5月突出贡献榜

推荐主页

最新话题