zoukankan      html  css  js  c++  java
  • Filter过滤器(Servlet)

    Filter,简单的说就是用来过滤从客户端发送到服务器端的信息。

    创建Filter的过程:

    1.创建一个类实现Filter接口:

    public class MyFilter implements Filter

    2.在配置文件中修改配置信息:

     <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.filter.MyFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

    过滤器相关的配置和过滤链:

    配置:

    url-partern :指示在哪个位置进行拦截(过滤)

    dispacher  :包含四个内置属性:

      ERROR:错误页面跳转

      FORWORD:请求转发

      INCLUDE:请求包含(页面中包含的文件)

      REQUEST:请求request

    过滤链:

    FilterChain:将过滤器连接成一条链。放行方向为下一个过滤器,这个顺序是由在XML文件中filter-mapping的顺序决定的;如果没有下一个过滤器就指向服务器

    应用:将Request请求信息进行过滤用来解决中文乱码问题

    1.创建过滤器类:

    package com.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    public class MyFilter implements Filter{
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            //将request增强
            //创建一个request的对象,因为这里是ServletRequest的request不能使用HTTPServletRequest的特有的传递doGet,doPost方法,所以要向下转型
            HttpServletRequest req = (HttpServletRequest) request;
            SuperHttpServletRequest superRequest = new SuperHttpServletRequest(req);
            chain.doFilter(superRequest, response);
        }
    
        @Override
        public void destroy() {
        }
    }

    2.创建重写类,重写getParameter方法,使得该方法加强

    package com.filter;
    
    import java.io.UnsupportedEncodingException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    public class SuperHttpServletRequest extends HttpServletRequestWrapper {
        /**
         * 实现的是类而不是接口的好处:实现接口就要实现其所有的方法
         * 而类只需要重写就行了,因为继承类的话会自动继承父类的所有方法
         * ServletRequest是顶层接口,里面定义了getParameter方法,而HttpServletRequestWrapper是第一个实现该接口
         * 所有方法的类,所以直接继承该类重写方法就行了
         */
        private HttpServletRequest request;
        public SuperHttpServletRequest(HttpServletRequest request) {
            super(request);
            //将父类中的request赋值给该类中的request
            this.request=request;
        }
    
        @Override
        public String getParameter(String name) {
            //获取请求方式
            String method = request.getMethod();
            //如果是get请求,get请求的解决中文乱码的方式是用utf-8重构字符串
            if("get".equalsIgnoreCase(method)) {
                String parameter = super.getParameter(name);
                try {
                    parameter = new String(parameter.getBytes("ISO-8859-1"),"utf-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                return parameter;
                //如果是post请求,post请求解决中文乱码的方式是重新设置字符缓冲区的编码格式
            }else if("post".equalsIgnoreCase(method)) {
                try {
                    request.setCharacterEncoding("utf-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            return request.getParameter(name);
        }
    }
  • 相关阅读:
    使用PHP类库PHPqrCode生成二维码
    ABAP报表中建立过滤器,并相互切换
    MM定价计算方案确定详细图解
    MIGO 屏幕增强
    SE14 激活表时提示进程正在运行
    供应商寄售
    屏蔽VA01的TA類型的銷售部門和銷售組
    屏蔽標準TCODE上的一些字段的顯示、隱藏或者強制輸入(轉)
    采购订单流程
    SAP 中如何修改透明表数据
  • 原文地址:https://www.cnblogs.com/Yuanpp/p/8468065.html
Copyright © 2011-2022 走看看