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

莱芜网站建设2024年3月份病毒会爆发吗

莱芜网站建设,2024年3月份病毒会爆发吗,怎样去查网站备案号,进入公众号后打开网页目录 代码演示过滤器Demo拦截器Demo 过滤器自定义拦截器配置拦截器过滤器执行原理多个过滤器的执行顺序 拦截器自定义拦截器注册拦截器1)注册拦截器2)配置拦截的路径3)配置不拦截的路径 多个拦截器的执行顺序 过滤器和拦截器的区别 代码演示 …

目录

  • 代码演示
    • 过滤器Demo
    • 拦截器Demo
  • 过滤器
    • 自定义拦截器
    • 配置拦截器
    • 过滤器执行原理
    • 多个过滤器的执行顺序
  • 拦截器
    • 自定义拦截器
    • 注册拦截器
      • 1)注册拦截器
      • 2)配置拦截的路径
      • 3)配置不拦截的路径
    • 多个拦截器的执行顺序
  • 过滤器和拦截器的区别

代码演示

我们这里先上代码,看看拦截器和过滤器在代码实现上的区别。

过滤器Demo

1、定义一个类,实现接口Filter

public class FilterDemo implements Filter {
}

2、实现Filter接口的方法

public class FilterDemo implements Filter {public static int i = 0;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("执行init方法");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("执行doFilter方法 + " + i++);filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {System.out.println("执行destroy方法");}
}

3、配置拦截路径

1)通过web.xml文件配置

<filter><filter-name>FilterDemo</filter-name><filter-class>com.example.springboot_demo.filter.FilterDemo</filter-class>
</filter><filter-mapping><filter-name>FilterDemo</filter-name><!-- 拦截路径 --><url-pattern>/*</url-pattern>
</filter-mapping>

2)、注解
@WebFilter("/*")

拦截器Demo

1、定义一个类实现HandlerInterceptor 并实现此接口的方法

public class InterceptorDemo implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("执行preHandle方法");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("执行postHandle方法");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("执行afterCompletion方法");}
}

2、创建一个配置类,实现WebMvcConfigurer

@Configuration
public class MyConfig implements WebMvcConfigurer {}

3、实现WebMvcConfigurer addInterceptors方法

@Configuration
public class MyConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {}
}

4、将自定义的拦截器进行注册,并配置拦截路径和放行路径

@Configuration
public class MyConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册自定义的拦截器InterceptorRegistration interceptorRegistration = registry.addInterceptor(new InterceptorDemo());// 定义拦截所有路径interceptorRegistration.addPathPatterns("/**");// 定义排查/user/下的所有路径interceptorRegistration.excludePathPatterns("/user/**");}
}

这就是过滤器和拦截器的代码实现,展示了它们在代码层面的不同。后面将会进行详细解释。

过滤器

过滤器是Servlet的高级特性之一,就是Web服务器在处理请求的时候会经过每一过滤器再处理请求。
在这里插入图片描述

自定义拦截器

自定义拦截器其实就是实现Filter接口,然后实现他的方法。

那它的方法都有什么作用呢?
1)init方法
public void init(FilterConfig filterConfig)

  • 在Web容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。
  • 注意:这个方法必须执行成功,否则过滤器会不起作用。

2)doFilter方法
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

  • 容器中的每一次请求都会调用该方法
  • 一次请求会调用两次,进Web容器时调用一次,出Web容器时调用一次
  • 要使用filterChain.doFilter(servletRequest, servletResponse);来调用下一个过滤器,否则这个请求就到此结束了。

3)destroy方法
public void destroy()

  • 当容器销毁 过滤器实例时调用该方法,一般在方法中销毁或关闭资源
  • 在过滤器 Filter 的整个生命周期也只会被调用一次
public class FilterDemo implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("执行init方法");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("执行doFilter方法");filterChain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {System.out.println("执行destroy方法");}
}

配置拦截器

1)通过web.xml文件配置

<filter><filter-name>FilterDemo</filter-name><filter-class>com.example.springboot_demo.filter.FilterDemo</filter-class>
</filter>
  • <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
  • <filter-class>元素用于指定过滤器的完整的限定类名。
  • <init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
<filter-mapping><filter-name>FilterDemo</filter-name><!-- 拦截路径 --><url-pattern>/*</url-pattern>
</filter-mapping>
  • <filter-mapping>元素用于设置一个Filter 所负责拦截的资源。
  • <filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字。
  • <url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)

2)、注解
@WebFilter(filterName = "FilterDemo",urlPatterns = "/*")

  • 理解了web.xml方式,注解方式看起来就一目了然了

过滤器执行原理

过滤器执行主要是通过函数回调的方式。
在我们自定义的过滤器中都会实现一个 doFilter()方法,这个方法有一个FilterChain 参数,而实际上它是一个回调接口。
在这里插入图片描述
所以,如果我们写这样的过滤器

public class FilterDemo implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("执行init方法");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("准备放行");//执行这一句,说明放行(让下一个过滤器执行,或者执行目标资源)chain.doFilter(req, resp);System.out.println("放行完成");}@Overridepublic void destroy() {System.out.println("执行destroy方法");}
}

程序在执行到chain.doFilter(req,resp)时会执行下一个过滤器或目标资源,然后执行完成回到此方法继续往下执行。

多个过滤器的执行顺序

过滤器之间的执行顺序看在web.xml文件中mapping的先后顺序的,如果放在前面就先执行,放在后面就后执行!
如果是通过注解的方式配置,就比较urlPatterns的字符串优先级

拦截器

拦截器是SpringMVC自己的功能,虽然看起来和过滤器一样,但是底层使用的是面向切面编程AOP

自定义拦截器

前面我们直到自定义拦截器要实现HandlerInterceptor接口,然后再实现它的方法。

那这几个方法都有什么作用呢?
1)preHandle方法
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler);

  • 再请求处理之前执行(Controller方法调用之前)
  • 返回值是boolean类型,返回false表示拦截,不会让此请求访问Controller,返回true则可继续执行

2)postHandle方法
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView);

  • 在请求结束之后(Controller请求返回),在ModelAndView渲染之前调用
  • 主要就是用来对ModelAndView对象进行操作

3)afterCompletion方法
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);

  • 在整个请求结束之后调用
  • 主要是用于资源清理工作
public class InterceptorDemo implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("执行preHandle方法");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("执行postHandle方法");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("执行afterCompletion方法");}
}

注册拦截器

创建一个实现WebMvcConfigurer的拦截器,然后将自定义的拦截器注册到其中。可以注册多个拦截器。

实现方法addInterceptors,通过参数InterceptorRegistry registry来进行一系列配置

@Configuration
public class MyConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册自定义的拦截器InterceptorRegistration interceptorRegistration = registry.addInterceptor(new InterceptorDemo());// 定义拦截所有路径interceptorRegistration.addPathPatterns("/**");// 定义排查/user/下的所有路径interceptorRegistration.excludePathPatterns("/user/**");// 确定执行顺序interceptorRegistration.order(1);}
}

1)注册拦截器

InterceptorRegistration interceptorRegistration = registry.addInterceptor(new InterceptorDemo());
将自定义的拦截器对象传入其中即可,如果要注册多个拦截器,调用多次这个方法即可。

2)配置拦截的路径

interceptorRegistration.addPathPatterns("/**");

如果需要拦截多个路径,可以多次传入一个字符串,也可以传入一个List集合。
在这里插入图片描述

3)配置不拦截的路径

interceptorRegistration.excludePathPatterns("/user/**");

这个和addPathPatterns一样,可以传入字符串,也可以传入List
在这里插入图片描述

多个拦截器的执行顺序

在这里插入图片描述

多个拦截器可通过order()方法来确定执行顺序,order()传入一个数字,数字越小则越先执行。

过滤器和拦截器的区别

  • 适用范围不同:Filter是Servlet容器规定的,只能使用在servlet容器中,而拦截器的使用范围就大得多
  • 使用的资源不同:拦截器是属于spring的一个组件,因此可以使用spring的所有对象,如service对象,数据源,事务控制等,而过滤器就不行
  • 深度不同:Filter还在servlet前后起作用。而拦截器能够深入到方法前后,异常抛出前后,因此拦截器具有更大的弹性,所有在spring框架中应该优先使用拦截器
    在这里插入图片描述
http://www.shuangfujiaoyu.com/news/36306.html

相关文章:

  • 北京西站列车时刻表最新长沙网站seo哪家公司好
  • 做哪方面的网站好呢排行榜网站
  • 香港公司能在大陆做网站备案嘛品牌推广与传播怎么写
  • 网站制作工作室制作平台发布平台有哪些
  • 响水做网站哪家最好百度广告收费表
  • 服饰商城网站建设广州seo优化推广
  • 合肥小程序开发公司超级seo外链工具
  • 局域网创建网站网络运营seo是什么
  • 饮料网站建设市场分析网站友情链接出售
  • wordpress 停用多站点seo文章是什么意思
  • 如何设计一个网站郑州网站建设七彩科技
  • wordpress模仿b站的主题危机公关
  • 网站wordpress是什么谷歌google 官网下载
  • 广州市住房和城乡建设局如何做seo搜索引擎优化
  • 房地产信息查询平台平台seo什么意思
  • 证券公司网站建设方案百度一下 你就知道首页官网
  • 重庆定制网站建设公司网站seo推广方案
  • 什么样的公司愿意做网站国内最新新闻热点事件
  • 手机网站可以做动态吗网络营销分类
  • 专门做奶粉的网站百度推广登录后台
  • 网站建设有什么系统销售课程培训视频教程
  • 旅游网站怎么做杭州网站推广找哪家
  • 网站怎么建设宁波微信推广平台哪个好
  • 备案期间的网站打开广告软文代理平台
  • 长安公司网站建设百度影音在线电影
  • 个人如何做公益网站抖音企业推广
  • 简单广告设计软件关键词优化平台有哪些
  • 乌鲁木齐网站建设网络营销模式有哪几种
  • 做网站有什么用福州今日头条新闻
  • 创建一个个人网站需要多少钱热搜榜排名今日