zoukankan      html  css  js  c++  java
  • javaweb修改表单参数---使用过滤器

    需求:

      所有的字段要将空字符串转成null;

    问题:

      我们知道表单如果不写值的时候,传递到后台的不是null,而且是空字符串。那么怎么改成null呢?

    解决:

      使用过滤器,将请求的参数修改过后继续,再传递下去。

      Request请求对象是无法修改它本身数据(通过getXXX方法获得的数据)的!!而ServletRequest对象又是Web服务器自动产生的,我们有没有办法通过new创建来创建。但现实中,我们就有需要修改request请求的本身数据的情况,可以通过HttpServletRequestWrapper类可以 重写Request请求的get方法来达到修改Request本身数据的目的。

       实现步骤

    第一步:创建一个请求的包装类
    package cn.gzsxt.basic.filter;
    
    import java.util.Enumeration;
    import java.util.Map;
    import java.util.Vector;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    public class NullValueHandlerRequestWrapper extends HttpServletRequestWrapper {
    
        private Map<String, String[]> parameterMap;
    
        public void setParameterMap(Map<String, String[]> parameterMap) {
            this.parameterMap = parameterMap;
        }
    
    
        public NullValueHandlerRequestWrapper(HttpServletRequest request) {
            super(request);
        }
    
    
        @Override
        public Enumeration<String> getParameterNames() {
            Vector<String> vector = new Vector<String>(parameterMap.keySet());
            return vector.elements();
        }
    
        @Override
        public String getParameter(String name) {
            String[] results = parameterMap.get(name);
            return results[0];
        }
    
        @Override
        public Map<String, String[]> getParameterMap() {
            return this.parameterMap;
        }
    
        @Override
        public String[] getParameterValues(String name) {
            return this.parameterMap.get(name);
        }
    
    }
    
    
    第二步:实现过滤器调用包装后的请求
    package cn.gzsxt.basic.filter;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    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 NullvalueHandlerFilter implements Filter{
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            //获得所有字段
            Map<String, String[]> parameterMap = new HashMap<>(request.getParameterMap());
            
    
             Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
             Iterator<Entry<String, String[]>> iterator = entrySet.iterator();
            while (iterator.hasNext()) {
                 Entry<String, String[]> entry = iterator.next();
                if (entry.getValue()!=null) {
                    for(int i=0;i<entry.getValue().length;i++) {
                        if ("".equals(entry.getValue()[i])) {
                            iterator.remove();
                        }
                    }
                }
            
                
            }
            //parameterMap就会将空字符串转成null.
            //注意:request对象是无法修改表单数据的!!ServletRequest对象是容Tomcat产生的,我们有没有办法new创建.
            NullValueHandlerRequestWrapper wrapper =new NullValueHandlerRequestWrapper((HttpServletRequest)request);
            wrapper.setParameterMap(parameterMap);
            //获得重写后的请求
            chain.doFilter(wrapper, response);
            
            
        }
    
        @Override
        public void destroy() {
            
        }
    
    }
  • 相关阅读:
    各系统终端快速清屏方式
    mvc使用Chsword.Excel2Object导出和导入数据
    winfrom读写txt文件值(短信猫)
    WebDatagrid中添加打开新tab的超链接列
    WebDatagrid前台后台选中行
    WebDatagrid三种获取值得方法javascript
    WebDataMenu做工具栏程序代码
    WebDatagrid-checkbox行如何用js控制其是否可用
    WebDatagrid-左边的checkbox决定右边的文本是否进入编辑状态
    Cell Editing (WebDataGrid) 单元格编辑
  • 原文地址:https://www.cnblogs.com/vieta/p/11149767.html
Copyright © 2011-2022 走看看