zoukankan      html  css  js  c++  java
  • 怎么让request inputstream 可以多次读取

    1、包装ServletRequest对象

    public class IRequestWrapper extends HttpServletRequestWrapper {
        private byte[] body;
    
        public IRequestWrapper(HttpServletRequest request) throws IOException {
            super(request);
            body = readBytes(request.getInputStream());
        }
    
        public static byte[] readBytes(InputStream is) throws IOException {
            byte[] buffer = new byte[1024];
            int len = 0;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while ((len = is.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
            bos.flush();
            return bos.toByteArray();
        }
    
    
        @Override
        public BufferedReader getReader() {
            return new BufferedReader(new InputStreamReader(getInputStream()));
        }
    
    
        @Override
        public ServletInputStream getInputStream() {
            final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);
            return new ServletInputStream() {
                @Override
                public int read() {
                    return byteArrayInputStream.read();
                }
    
                @Override
                public boolean isFinished() {
                    return false;
                }
    
                @Override
                public boolean isReady() {
                    return false;
                }
    
                @Override
                public void setReadListener(ReadListener readListener) {
                }
            };
    
        }
    }

    2、在过滤器中应用包装

    public class HttpServletRequestWrapperFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                request = new IRequestWrapper((HttpServletRequest) request);
            }
            chain.doFilter(request, response);
        }
    
    
        @Override
        public void destroy() {
    
        }
    }
    

      

  • 相关阅读:
    关于Combobox的多选和单选情况
    Struts2的method{1}用法
    ${sessionScope.user}的使用方法
    jQuery 遍历
    jQuery的Event对象(实例)。
    度熊全是由1构成的字符串
    Prime Ring Problem
    八皇后问题
    Hanoi
    全排列
  • 原文地址:https://www.cnblogs.com/mylittlecabin/p/14931352.html
Copyright © 2011-2022 走看看