A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

『黑马程序员济南』JavaEE就业笔记串讲--过滤器Filter

Filter:过滤器的概述
   什么是过滤器Filter:可以过滤从客户端向服务器发送的请求.
   过滤器的使用:
      * 进行IP的过滤,脏话过滤,自动登录,响应压缩...
   使用过滤器:
    * 编写一个类实现Filter接口:
    * 配置过滤器:

过滤器的生命周期
   过滤器的创建和销毁:
      * 创建:服务器启动的时候.
      * 销毁:服务器关闭的时候.
   FilterConfig:过滤器的配置对象:
      getFilterName()
      getInitParameter()
      getInitParameterNames()
      getServletContext()

代码:
   
[Java] 纯文本查看 复制代码
 public void init(FilterConfig filterConfig) throws ServletException {
        // 获得当前的Filter的名称:
        String filterName = filterConfig.getFilterName();
        System.out.println(filterName);
        // 获得初始化参数:
        String username = filterConfig.getInitParameter("username");
        String password = filterConfig.getInitParameter("password");
        System.out.println(username+"   "+password);
        // 获得所有的初始化参数的名称:
        Enumeration<String> en = filterConfig.getInitParameterNames();
        while(en.hasMoreElements()){
            String name = en.nextElement();
            String value = filterConfig.getInitParameter(name);
            System.out.println(name+"    "+value);
        }
    }


FilterChain:过滤器链
过滤器链中的过滤器的执行的顺序与<filter-mapping>的配置顺序有关.
* doFilter(request,response); -- 放行,放行到下一个过滤器中,如果没有下一个过滤器,到达目标资源

Filter相关的配置
<url-pattern>的配置:
   * 完全路径匹配        :以 / 开始  /demo4/demo1.jsp
   * 目录匹配               :以 / 开始 以 * 结束.  /*  /demo1/*
   * 扩展名匹配            :不能以 / 开始 以 * 开始.  *.do  *.action
<servlet-name>的配置:根据Servlet的名称拦截Servlet.
<dispatcher>的配置:
   * REQUEST    :默认值.
   * FORWARD    :转发.
   * INCLUDE    :包含.
   * ERROR        :错误页面跳转.(全局错误页面)

增强request中的getParameter方法
  继承              :控制这个类构造.
  装饰者模式    :增强的类和被增强类实现相同的接口,增强的类中获得到被增强的类的引用.
     * 缺点:接口中方法太多.
  动态代理        :被增强的类实现接口就可以.
代码示例:
[Java] 纯文本查看 复制代码
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper{

    private HttpServletRequest request;

    public MyHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
        this.request = request;
    }

    @Override
    public String getParameter(String name) {
        // 根据请求方式不同,去处理:
        // 获得请求方式:
        String method = request.getMethod();
        if("get".equalsIgnoreCase(method)){
            String value = null;
            try {
                value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            return value;
        }else if("post".equalsIgnoreCase(method)){
            try {
                request.setCharacterEncoding("UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return super.getParameter(name);
    } 
}



点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马