现在的位置: 首页 > 综合 > 正文

struts2 编码过滤器代码

2018年01月28日 ⁄ 综合 ⁄ 共 2322字 ⁄ 字号 评论关闭

java代码

package filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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 javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
/**
 *  编码过滤器实体类
 * @author Administrator
 *
 */
public class EncodingFilter implements Filter {
	private  String encoding = "UTF-8";
    
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}
	
	@Override
    public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
        HttpServletRequest hreq = (HttpServletRequest)request;
        HttpServletResponse hres = (HttpServletResponse)response;
        hres.setContentType("text/html;charset="+encoding);
        HttpRequestWapper req = new HttpRequestWapper(hreq);
        chain.doFilter(req, response);
    }
     
	@Override
    public void init(FilterConfig filterConfig) throws ServletException {
    	// TODO Auto-generated method stub
        String encodeName = filterConfig.getInitParameter("encoding");
        if(encodeName != null && !"".equals(encodeName.trim())){
            this.encoding = encodeName;
        }
    }
 
    public class HttpRequestWapper extends HttpServletRequestWrapper{
 
        public HttpRequestWapper(HttpServletRequest request) {
            super(request);
             
        }
        //重写方法
        public String getParameter(String name){
            String str = null;
            str = encoding(((HttpServletRequest)this.getRequest()).getParameter(name));
             
            return str;
        }
        public String[] getParameterValues(String name){
            String[] str = null;
            str = ((HttpServletRequest)this.getRequest()).getParameterValues(name);
            if(str != null){
                for(int i = 0; i < str.length; i++){
                    str[i] = encoding(str[i]);
                }
            }
            return str;
        }
         
    }
    //实现转码
    public String encoding(String str){
        if(str != null){
            try {
                str = new String(str.getBytes("iso-8859-1"),this.encoding);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return str;
    }
}

web.xml配置

<!--配置字符编码的过滤器-->
	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>filter.EncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<!-- 过滤器映射 -->
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern><!-- 对所有资源过滤 -->
	</filter-mapping>

注意:当在web.xml配置多个过滤器的时候,一定要把struts的过滤器放到最后,这样可以防止过滤器链被中断,导致你配置的其他过滤器不起作用。

抱歉!评论已关闭.