当前位置: 首页 > news >正文

装修公司做自己网站室内设计公司排名及案例

装修公司做自己网站,室内设计公司排名及案例,wordpress搜索条件,基层建设收录网站Spring的拦截器与Servlet的Filter有相似之处#xff0c;比如二者都是AOP编程思想的体现#xff0c;都能实现权限检查、日志记录等。但它们之间又有很大区别#xff0c;所以本文磊哥就带大家全面了解一下什么是过滤器#xff1f;什么是拦截器#xff1f;以及二者有什么区别… Spring的拦截器与Servlet的Filter有相似之处比如二者都是AOP编程思想的体现都能实现权限检查、日志记录等。但它们之间又有很大区别所以本文磊哥就带大家全面了解一下什么是过滤器什么是拦截器以及二者有什么区别在开始聊二者的区别之前先来分别认识一下它们。什么是过滤器Filter过滤器Filter属于Servlet的范畴可以认为是Servlet的一种“加强版”通过实现javax.servlet.Filter接口来实现功能。主要用于对用户请求进行预处理是个典型的处理链。通常使用场景检查用户授权、记录日志信息、解码、过滤字符编码等。基本工作原理配置完过滤器及需要拦截的请求当请求到来时通过过滤器提供的方法可以对请求或响应(Request、Response)统一处理。比如可判断用户是否登录是否拥有请求的访问权限等。在Web应用启动时过滤器仅会被初始化一次便可处理后续请求只有Web应用停止或重新部署时才能销毁。使用Filter完整的流程是Filter对用户请求进行“预处理”接着将请求交给Servlet进处理并生成响应最后Filter再对服务器响应进行“后处理”。上述流程具体到类的处理就是1、Filter在ServletRequest到达Servlet之前拦截客户的ServletRequest2、根据需要检查ServletRequest也可修改ServletRequest头和数据3、在ServletResponse到达客户端之前拦截ServletResponse4、根据需要检查HttpServletResponse也可修改HttpServletResponse头和数据。创建Filter必须实现javax.servlet.Filter接口该接口定义了3个方法void init(FilterConfig filterConfig)容器启动初始化Filter时会被调用整个生命周期只会被调用一次。可用于完成Filter的初始化。void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)实现过滤功能就是通过该方法对每个请求增加额外的处理。通过其参数FilterChain调用下一个过滤器。void destroy()用于Filter销毁前完成某些资源的回收。其中doFilter方法便是实现对用户请求进行预处理(ServletRequest request)和对服务器响应进行后处理(ServletResponse response)的方法。预处理和后处理的分界线为是否调用了chain.doFilter()。在执行该方法之前是对用户请求进行预处理在执行该方法之后是对服务器响应进行后处理。下面以具体的实现代码来展示一下public class LogFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(Filter 初始化);}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println(Filter 预处理);filterChain.doFilter(servletRequest, servletResponse);System.out.println(Filter 后处理);}Overridepublic void destroy() {System.out.println(容器销毁);} } 关于Filter的使用在普通的Web项目中可在web.xml中配置filterfilter-nameencodingFilter/filter-namefilter-classcom.secbro2.learn.filter.LogFilter/filter-classasync-supportedtrue/async-supportedinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param /filter filter-mappingfilter-nameencodingFilter/filter-nameurl-pattern/*/url-pattern /filter-mapping 如果是SpringBoot项目首先使用Component将LogFilter实例化然后通过如下配置文件进行具体的配置Configuration public class FilterConfig {Resourceprivate LogFilter logFilter;Beanpublic FilterRegistrationBeanFilter registerAuthFilter() {FilterRegistrationBeanFilter registration  new FilterRegistrationBean();registration.setFilter(logFilter);registration.addUrlPatterns(/*);registration.setName(authFilter);// 值越小Filter越靠前registration.setOrder(1);return registration;} } 定义一个Contoller然后依次执行启动项目、访问Controller、关闭项目打印的日志信息依次为Filter 初始化 ---以上为启动项目时打印--- Filter 预处理 Controller中处理业务逻辑 Filter 后处理 ---以上为访问Controller时打印--- 容器销毁 ---以上为关闭服务时打印--- 什么是拦截器Interceptor拦截器在AOP(Aspect-Oriented Programming)中用于某个方法或字段被访问之前进行拦截然后在其之前或之后加入某些操作。拦截器作为动态拦截Action调用的对象它提供了一种机制使开发者可以在Action执行前后定义可执行的代码也可以在Action执行前阻止其执行。拦截器将Action共用的行为独立出来在Action执行前后执行。常见的应用场景比如权限管理、日志服务等。在Spring MVC当中要使用拦截器需要实现org.springframework.web.servlet.HandlerInterceptor接口该接口定义了如下三个方法1preHandle (HttpServletRequest request, HttpServletResponse response, Object handle) 方法会在请求处理之前被调用。SpringMVC中的Interceptor是链式调用的可以存在多个Interceptor。Interceptor的调用会依据声明顺序依次执行最先执行的都是preHandle方法可在该方法中进行一些前置预处理也可进行判断来决定是否要继续执行。当返回为false 时表示请求结束后续的Interceptor和Controller都不会再执行当返回值为true时会继续调用下一个Interceptor的preHandle方法执行完最后一个Interceptor后会调用当前请求的Controller方法。2 postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法会在Controller方法调用之后DispatcherServlet进行渲染视图之前被调用所以可以对Controller处理之后的ModelAndView对象进行操作。postHandle方法被调用的方向跟preHandle是相反的先声明的Interceptor的postHandle方法反而会后执行。3 afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) 方法会在整个请求结束之后被调用也就是在DispatcherServlet渲染了对应的视图之后执行。这个方法的主要是用于进行资源清理。来看一个具体的示例Component public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {System.out.println(Interceptor preHandle);return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {System.out.println(Interceptor postHandle);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {System.out.println(Interceptor afterCompletion);} } 对应LoginInterceptor需添加到Spring MVC当中Configuration public class WebConfig implements WebMvcConfigurer {Resourceprivate LoginInterceptor loginInterceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns(/**);} } 这里拦截所有的请求执行对应的Controller之后会看到打印如下信息Interceptor preHandle Controller中处理业务逻辑 Interceptor postHandle Interceptor afterCompletion 很明显可以看到当一个请求过来之后会先后执行preHandle方法、Controller中的业务、postHandle方法和afterCompletion方法。过滤器 VS 拦截器经过上面的学习我们已经大概了解了过滤器和拦截器的基本使用和功能想必已经感觉到它们之间的一些区别了。先看一张图可以更加明显的看出过滤器和拦截器在使用过程中所处的位置和使用的时机。image二者的区别如下1、使用范围与规范不同Filter是Servlet规范中定义的只能用于Web程序中依赖于Servlet容器。拦截器是Spring的组件可用于Web程序、Application、Swing等程序不依赖Servlet容器。2、使用资源不同拦截器可以使用Spring里的任何资源、对象例如Service对象、数据源、事务管理等通过IOC注入到拦截器即可而Filter则不能。3、作用范围不同Filter在只在Servlet前后起作用。而拦截器能够深入到方法前后、异常抛出前后对Action请求其作用可以访问Action上下文、值栈里的对象等具有更大的弹性。因此在Spring框架的过程中要优先使用拦截器。而滤器则可以对几乎所有的请求起作用。4、实现机制不同拦截器是基于java的反射机制的而过滤器是基于函数回调。上面介绍了过滤器和拦截器的基本不同之处这里再对上面的图进一步细化可得到下图通过上图我们可以进一步看到拦截器和过滤器的方法在整个请求过程中所处的位置。小结通过上面的学习想必大家已经掌握了过滤器和拦截器的基本使用。最后补充一下什么时候适合使用过滤器什么时候又适合使用拦截器呢当需要过滤掉其中的部分信息只留一部分时就用过滤器当需要对其流程进行更改做相关的记录时用拦截器。 往期推荐 爱了蚂蚁开源的“SpringBoot”框架新增了这6项功能...Docker部署SpringBoot的两种方法后一种一键部署超好用一文汇总 JDK 5 到 JDK 15 中的牛逼功能关注我每天陪你进步一点点
http://wiki.neutronadmin.com/news/246155/

相关文章:

  • 网站备案帐号是什么情况Wordpress有用么
  • 简述网站开发设计流程seo厂家电话
  • 温州住房与城乡建设部网站佛山专业网站建设公司哪家好
  • 网站设计师联盟北京做网络工程公司的网站
  • 郑州网站优化推广培训wordpress 安装百度编辑器
  • 湖南省建设工程造价管理总站网站网站做哪块简单
  • 建网站外包嵌入式培训总结
  • 网站建设的销售是怎么样的做网站维护
  • 搜狐快站做淘宝客网站电子商务网站建设定位设想
  • 2008r2做网站怎么查询网站备案
  • 产品服务展示型网站有哪些网站 被黑
  • 手机网站建设行业分析三角镇建网站公司
  • 湖州网站建设方案个人营销网站
  • 计算机多媒体毕业设计网站建设长春做网站用的软件
  • 纯静态网站开发wordpress 怎么登陆地址
  • 接网站开发外包不收费的小说网站排名
  • 微盟如何做网站德州网站设计
  • 网站用户访问统计网站html5自适应屏幕大小
  • 山东seo网站开发app代驾软件多少钱
  • 图片制作软件怎么制作360seo排名点击软件
  • 河南网站搭建免费杂志模板
  • 南充网站设计学校怎么做网络平台
  • 温岭网站建设珠海网站制作首页
  • 什么网站发布任务有人做有哪些搜索引擎网站
  • 洛阳建站室内设计要学哪些科目
  • 网站建设的后期维护费用wordpress目录绑定外部链接
  • 佛山免费发布信息的网站长沙有哪些做网站的公司
  • 公众号开发者多次群发wordpress路径优化
  • 比较出名的设计网站免费好用的crm系统
  • 免费的网站登录模板下载手机定制app