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

成都建设网站哪家好暂时没有域名怎么做网站

成都建设网站哪家好,暂时没有域名怎么做网站,wordpress技术博客,免费申请域名和空间一、基本介绍 过滤器 Filter 作为 Java 三大器之一,在 Java Web 的使用中有很高的地位。所谓过滤器,就是实现了 javax.servlet.Filter 接口的服务器端程序,就是对事物进行过滤的。在 Web 中的过滤器,当然就是对请求进行过滤&#…

一、基本介绍

        过滤器 Filter 作为 Java 三大器之一,在 Java Web 的使用中有很高的地位。所谓过滤器,就是实现了 javax.servlet.Filter 接口的服务器端程序,就是对事物进行过滤的。在 Web 中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。如登录控制,权限管理,过滤敏感词汇等。

        使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行预处理并生成响应,最后Filter再对服务器响应进行后处理。

二、过滤器原理

        当我们使用过滤器时,过滤器会对游览器的请求进行过滤,过滤器可以动态的分为 3 个部分,1. 放行之前的代码,2. 放行,3. 放行后的代码,这 3 个部分分别会发挥不同作用。

  • 第一部分代码会对游览器请求进行第一次过滤,在 HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest。
  • 第二部分根据需要检查 HttpServletRequest,也可以修改 HttpServletRequest 头和数据,如果还有过滤器,那么就继续交给下一个过滤器。

  • 第三部分在 HttpServletRequest 到达客户端之前,拦截 HttpServletResponse,对返回的 Web 资源再次进行过滤处理。

我们使用过滤器,也就是说,不止请求会经过过滤器,我们的响应也会经过过滤器。

三、过滤器的作用

 * Examples that have been identified for this design are* 1) Authentication Filters, 即用户访问权限过滤* 2) Logging and Auditing Filters, 日志过滤,可以记录特殊用户的特殊请求的记录等* 3) Image conversion Filters,图像转换过滤器* 4) Data compression Filters ,数据转换* 5) Encryption Filters ,安全加密* 6) Tokenizing Filters ,词法分析* 7) Filters that trigger resource access events ,资源访问事件触发过滤器* 8) XSL/T filters * 9) Mime-type chain Filter ,文件类型链过滤器

四、过滤器(Filter)接口

        我们学习过滤器,肯定就要先看一下官方给我们提供的过滤器接口。下面我们使用 Idea 来查看 Filter。

Filter 有如下几个方法:

  • void init(FilterConfig filterConfig) 用于完成过滤器的初始化。
  • doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) 实现过滤功能,将该方法对每个请求增加额外的处理。

  • void destroy() 用于过滤器销毁前,完成某些资源的回收。

五、使用过滤器(Filter)

先自定义 FirstFilter 类实现 Filter 接口:

public class FirstFilter implements Filter {@Override public void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig); System.out.println("--------FirstFilter 初始化完成-------"); }@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,                         FilterChain filterChain) throws IOException, ServletException {System.out.println("------对 First request 进行过滤 --------");//下面这行代码就是放行    filterChain.doFilter(servletRequest, servletResponse); System.out.println("------对 First response 进行过滤 --------");}@Override public void destroy() {Filter.super.destroy(); System.out.println("firstFilter 已销毁"); }}

再自定义 SecondFilter 类实现 Filter 接口:

public class SecondFilter implements Filter {@Override public void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig); System.out.println("--------SecondFilter 初始化完成-------"); }@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,                         FilterChain filterChain) throws IOException, ServletException {System.out.println("------对 Second request 进行过滤 --------");//下面这行代码就是放行filterChain.doFilter(servletRequest, servletResponse); System.out.println("------对 Second response 进行过滤 --------");}@Override public void destroy() {Filter.super.destroy(); System.out.println("SecondFilter 已销毁"); }}

再修改 WebConfig 配置类:

@Configuration
public class WebConfig {@Bean public FilterRegistrationBean firstFilterRegistrationBean() {FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>(); // 对哪些路径进行过滤filterFilterRegistrationBean.addUrlPatterns("/*");              filterFilterRegistrationBean.setOrder(1); // 设置优先级 ,数字越小,优先级越高FirstFilter filter = new FirstFilter(); // 绑定过滤器 filterFilterRegistrationBean.setFilter(filter); return filterFilterRegistrationBean; }@Bean public FilterRegistrationBean secondFilterRegistrationBean() {FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>();filterFilterRegistrationBean.addUrlPatterns("/hello");         filterFilterRegistrationBean.setOrder(2);  // 设置优先级// 绑定过滤器SecondFilter filter = new SecondFilter(); filterFilterRegistrationBean.setFilter(filter); return filterFilterRegistrationBean; }}

启动服务器,然后我们在浏览器中随便输入一个 url 地址进行访问:

浏览器输出: 

控制台输出:

------对 request 进行过滤 ---------
------对 response 进行过滤 --------

现在,我们就已经可以得出两个结论了,过滤器并不会管资源是否存在,而只会对配置的拦截路径进行拦截。拦截不仅会对请求进行拦截,而且还会对相应进行拦截。

六、多个 Filter 的执行顺序

 上面我们配置了 2 个过滤器,那么我们怎么知道那个过滤器先执行呢?

启动服务器,然后我们浏览器输入 http://localhost:8080/hello 来进行访问,查看控制台输出

------对 First request 进行过滤 --------
------对 Second request 进行过滤 --------
------对 Second response 进行过滤 --------
------对 First response 进行过滤 --------

我们可以看见 FirstFilter 先进行过滤,然后交给 SecondFilter ,然后访问资源,然后 SecondFilter 对响应进行过滤,然后 FirstFilter 对响应进行过滤。图示如下:  

七、过滤器(Filter)生命周期

Filter 有三个阶段,分别是初始化,拦截和过滤,销毁。

  • 初始化阶段:web 应用程序启动时,web 服务器将创建 Filter 的实例对象,并调用其 init 方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter 对象只会创建一次,init 方法也只会执行一次。通过 init 方法的参数,可获得代表当前 filter 配置信息的 FilterConfig 对象(永远只调用一次)
  • 拦截和过滤阶段:只要请求资源的路径和拦截的路径相同,那么过滤器就会对请求进行过滤,这个阶段在服务器运行过程中会一直循环,不管第几次,都在调用doGet(),doPost() 方法之前。
  • 销毁阶段:当服务器(Tomcat)关闭时,Web 容器调用 destroy 方法销毁 Filter。destroy 方法在 Filter 的生命周期中仅执行一次。在 destroy 方法中,可以释放过滤器使用的资源(永远只调用一次);

八、FilterConfig 和 FilterChain 说明

        FilterConfig 和 FilterChain 这2个对象是由服务器 (Tomcat) 在创建和调用 Filter 对象时所传入的,这2个对象十分有用,FilterConfig 对象可以读取我们配置的初始参数,FilterChain 可以实现多个 Filter 之间的连接。

1、FilterConfig 

先看一下源码:

public interface FilterConfig {String getFilterName();ServletContext getServletContext();String getInitParameter(String var1);Enumeration<String> getInitParameterNames();
}

里面的方法就 4 个,下面我们分别进行讲解

  • getFilterName():获取 filter 的名称
  • getServletContext():获取 ServletContext
  • getInitparamter(String var1):获取配置的初始参数的值
  • getInitParamterNames():获取配置的所有参数名称

2、FilterChain

先看一下源码

public interface FilterChain {void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}

我们查看源码,可以发现 FilterChain 就只有一个方法,其实这个方法就是用来对拦截进行放行的,如果有多个拦截器,那么就会继续调用下一个 Filter 进行拦截。doFilter 方法需要传入个参数,一个是 ServletRequest,一个是 ServletResponse 参数,这个直接传入进行。

Tomcat 在调用过滤器时,默认就会传入 Request 和 Response,这个参数封装了请求和响应,我们直接使用就行。ServletResquest 和 ServletResponse 可以直接强转成 HttpServletRequest 和 HttpServletResponse,然后使用相应的方法。

将 ServletRequest 转成 HttpServletRequest

    @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,                         FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;}

九、参考文档

JavaWeb 过滤器 (Filter) 详解

http://www.yayakq.cn/news/609346/

相关文章:

  • 买服务器的网站海安网站设计公司
  • 怎么做网站教程++用的工具华为一站式服务建站
  • 铁路建设标准网站品牌建设情况介绍
  • 长安网站建设公司铜陵市建设工程管理局网站
  • 潘嘉严个人网站网站备案 座机
  • wordpress远程图片本地化网站建设优化服务咨询
  • 800折网站怎么做网站定制生成器
  • 手机wap网站导航模板四川展览设计公司
  • 制作网站公司年收入多少百度排名优化专家
  • 响应式网站注意事项图片制作视频的软件
  • 北京好的网站制作网站建设 主要学是么
  • it公论 是建立在什么网站多用户商城app开发
  • 凤台做网站wordpress调用api
  • 网站开发用到的技术重庆媒体网站建设单价
  • 网站开发业内人士建筑网官网道辉工程建设有限公司
  • 招商网站建设免费怎么做网站登录界面
  • 网站设计的风格有哪些德州网架公司
  • wordpress怎么离线修改主页页脚优化大师官网下载安装
  • 建设局施工许可证网站百度云搜索引擎官网入口
  • 域名拍卖平台深圳整站seo
  • 河北电子网站建设网站开发的工作职责
  • 代码怎么生成网站简阳网站建设
  • 网站建设如何去找客户alexa排名助手
  • 盐城网站建设小程序公司南宁网站建设优化案例
  • 对网站做数据统计的目的是什么意思河南项目备案信息网
  • 做网站价格和配置全网营销推广怎么收费
  • 免费网站开发php网站建设论文答辩
  • 企业网站建设应注意什么wordpress文章内容语音
  • 小企业网站建设方案中山响应式网站
  • 根路径 网站网站搭建接单