필터 처리 인 코딩 문제

25481 단어 자바
필터 처리 인 코딩 사용

  <filter>
    <filter-name>applicationEncodingFilterfilter-name>
    <filter-class>cn.yeye.web.filter.ApplicationEncodingFilterfilter-class>
    <init-param>
        <param-name>charsetparam-name>
        <param-value>UTF-8param-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>applicationEncodingFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping> 

필터
package cn.yeye.web.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;

import cn.yeye.web.filter.request.HttpServletRequestEncodingWrapper;

public class ApplicationEncodingFilter implements Filter {
    
    private String charset ="UTF-8";
    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.charset = filterConfig.getInitParameter("charset");
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        //       
        response.setContentType("text/html;charset="+charset);
        //       
        HttpServletRequestEncodingWrapper requestEncodingWrapper = new HttpServletRequestEncodingWrapper((HttpServletRequest) request, charset);
        
        chain.doFilter(requestEncodingWrapper, response);

    }
    
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}


포 장 된 Request 클래스
package cn.yeye.web.filter.request;

import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
 *  ServletRequest        ,           
 * @author li  
 *
 */
public class HttpServletRequestEncodingWrapper extends HttpServletRequestWrapper{

    private HttpServletRequest request = null;
    
    /*
     *            
     */
    private boolean coding = false;
    
    /*
     *      UTF-8      
     */
    private String charset = "UTF-8";
    
    /**
     *    Tomcat8.0    ISO-8895-1,    , Tomcat8   .     utf-8    get   ,        
     *      get       
     */
    private String defaultCharset = "UTF-8";
    /*
     *   Map  request       
     */
    private Map<String, String[]> parameterMap = null;
    
    public HttpServletRequestEncodingWrapper(HttpServletRequest request, String charset ) {
        super(request);
        this.request=request;
        this.charset=charset;
    }

    /*
     *     request        
     */
    private void codingParameters() {
        if(coding) {
            return;
        }
        
        //    post       
        if("post".equalsIgnoreCase(request.getMethod())) {
            try {
                request.setCharacterEncoding(charset);
                parameterMap = request.getParameterMap();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace(); 
            }
        }
        /*
         *     get       ,      ISO-8859-1  
         */
        else if("get".equalsIgnoreCase(request.getMethod())) {
            parameterMap = request.getParameterMap();
            //  Map, String[]              
            Set<String> keySet = parameterMap.keySet();
            for(String key : keySet) {
                try {
                    //       
                    String[] strings = parameterMap.get(key);

                    for(int i=0;i<strings.length;i++) {
                        strings[i]=new String(strings[i].getBytes(defaultCharset),charset);
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
        }
        //          ,    
        else {
            
        }
        coding=true;
        return ;
    }
    
    @Override
    public String getParameter(String name) {
         this.codingParameters();
         
         String[] values = parameterMap.get(name);
         if(values==null) {
             return null;             
         }
         return values[0];
    }
    
    
    @Override
    public Map<String, String[]> getParameterMap() {
        this.codingParameters();
        return parameterMap;
    }
    @Override
    public String[] getParameterValues(String name) {
        this.codingParameters();
        return parameterMap.get(name);
    }
    
    @Override
    public Enumeration<String> getParameterNames() {
        this.codingParameters();
        return Collections.enumeration(parameterMap.keySet());
    }
}


디 렉 터 리 되 돌리 기

좋은 웹페이지 즐겨찾기