zoukankan      html  css  js  c++  java
  • 过滤servlet请求中的空值

    import java.util.Enumeration;
    import java.util.Map;
    import java.util.Vector;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    
    /**
     * 思路:
     * 第一步:声明一个成员变量是Map。用于设置我们修改后的表单参数
     * 第二部:重写request里面的获得表单参数的四个方法。设置值都是通过我们修改后参数的变量Map来获得值
     * @author ranger
     *
     */
    public class NullValueHandlerRequestWrapper extends HttpServletRequestWrapper  {
    	
    	public NullValueHandlerRequestWrapper(HttpServletRequest request) {
    		super(request);
    
    	}
    
    	private Map<String, String[]> parameterMap;
    
    	public void setParameterMap(Map<String, String[]> parameterMap) {
    		this.parameterMap = parameterMap;
    	}
    	
    
    
    	@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 Enumeration<String> getParameterNames() {
    	
    		Vector<String> vector = new Vector<String>(parameterMap.keySet());
    		return vector.elements();
    	}
    
    	@Override
    	public String[] getParameterValues(String name) {
    	
    		return parameterMap.get(name);
    	}
    	
    	
    
    }
    

      //修改请求表单参数。
      //问题:HTTPServletRequest对象并没有提供修改请求表单参数的方法。如何解决呢?
      //答:Servlet技术里面提供了一个Wrapper来解决表单参数设置的。Warpper实现了重新包装一个对象设置在过滤链里面

    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() {
    		
    	}
    
    }
    

      

    在web.xml中加入


    <filter> <filter-name>nullvalueHandlerFilter</filter-name> <filter-class>org.chu.filter.NullvalueHandlerFilter</filter-class> </filter> <filter-mapping> <filter-name>nullvalueHandlerFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

      

  • 相关阅读:
    stringstream用法
    来到上海了
    [转]强悍!情书居然能写得如此专业
    asp.net控件开发基础(23)
    当你遇到internal的时候
    asp.net控件设计时支持(3)
    asp.net控件设计时支持(5)
    CS中的缓存类,保证都看的懂
    快要毕业了
    asp.net控件设计时支持(4)
  • 原文地址:https://www.cnblogs.com/cqming/p/11233131.html
Copyright © 2011-2022 走看看