zoukankan      html  css  js  c++  java
  • Servlet基础知识(四)——Servlet过滤器Filter

    一、什么是过滤器:

      政府大楼的安检保安,它既能对进入政府大楼的人员进行检查,只允许检查符合要求的进入;同时他也负责对出大楼的人进行检查,看他带出的东西是否符合要求。

      同样的,Servlet中的过滤器既可以对客户端发来的请求,在Servlet接收之前进行过滤;也可以对Servlet发出的响应,在客户端接收之前进行过滤。

    二、过滤器的实现:

      Servlet的过滤器是通过实现javax.servlet.Filter接口实现的。(也就是说Servlet过滤器其实就是一个实现了Filter的Serlvet类)。该接口有三个方法:  

    init(FilterConfig filterConfig)

        Servlet的初始化方法:读取web.xml中配置的Filter的初始化参数(它的参数提供了filterConfig对象,该对象可以读取web.xml里的配置)。init()只会被调用一次。

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //获取Filter初始化参数
        String username = filterConfig.getInitParameter("username");
    }
    doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

        Servlet的过滤方法:当客户端的请求的符合被过滤的范围时,该方法进行过滤处理。处理完后chain再调用doFilter(request,response),表示继续执行下一个过滤器。

        (这里的ServletRequest和ServletResponse都要强制转换成HttpSevletRequest和HttpServletResponse,因为Servlet实现的请求和响应式Http类型的。

    destroy()

        Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

    三、在web.xml中配置Filter:

      注意:一般Filter都是配置在Servlet之前的。

      过滤器中init(FilterConfig filterConfig)就是用来获取配置的这些信息,初始化过滤器的。

      <filter>
          <filter-name>LoginFilter</filter-name>     //过滤器的名字
          <filter-class>com.itzhai.login.LoginFilter</filter-class>      //过滤器类名
      </filter>
    
      <filter-mapping>
          <filter-name>LoginFilter</filter-name>
          <url-pattern>/*</url-pattern>        //要过滤的url
      </filter-mapping>

    四、过滤敏感词的过滤器例子:

    @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            //转换成实例的请求和响应对象
            HttpServletRequest req = (HttpServletRequest)request;
            HttpServletResponse resp = (HttpServletResponse)response;
            //获取评论并屏蔽关键字
            String comment = req.getParameter("comment");
            comment = comment.replace("A", "***");
            //重新设置参数
            req.setAttribute("comment", comment);
            //继续执行
            chain.doFilter(request, response);
        }
  • 相关阅读:
    可以支持jQuery1.10.1 的 fancybox 1.3.4, 並現在type為Ajax時,也可以定義窗口的大小。
    用tensorlayer导入Slim模型迁移学习
    用tensorflow迁移学习猫狗分类
    Serenity框架官方文档翻译3.2(多租户)
    Serenity框架官方文档翻译3.1(教程)
    Serenity框架官方文档翻译前言(什么是Serenity平台)
    Serenity框架官方文档翻译(1-2开始、安装和界面)
    GIN+GORILLA=A GOLANG WEBSOCKET SERVER
    【Advanced Windows Phone Programming】在windows phone 8中解码mp3 和编码pcm
    LIstView 滚动 异步 加载更多 mono for android ScrollStateChanged ScrollState.Idle; Fling;TouchScroll
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4122934.html
Copyright © 2011-2022 走看看