EncodingFilter

1.EncodingFilter.java

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;

/**
 * Servlet Filter implementation class EncodingFilter
 */
public class EncodingFilter implements Filter {

    /**
     * Default constructor.
     */
    public EncodingFilter() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        //1 创建我们包装之后的request对象
        ServletRequest req = new MyRequest((HttpServletRequest)request);
        //2放行(放行的request是我们包装后的)
        chain.doFilter(req, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}

2.MyRequest.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestWrapper;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
//将已经是乱码的参数,重新编码回中文
public class MyRequest extends  HttpServletRequestWrapper{

    private Map<String,String[]> params =new HashMap<String, String[]>();

    public MyRequest(HttpServletRequest request) {
        super(request);
    // 在构造中获得封装参数的map, 将map中所有乱码解决
    //-----------------------------------------------
        //1 获得map
        Map<String,String[]> map = super.getParameterMap();
        //2 遍历map
        if(map!=null && map.size()>0){
            for(Entry<String, String[]> en : map.entrySet()){
                //3 取出每个键值对,并解决值得乱码(逆推法)
                String[] values = en.getValue();
                if(values!=null){
                String[] newValues = new String[values.length];
                    for(int i = 0; i < values.length ;i++){
                        try {
                            newValues[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                    //4 将解决的键值对 放入新的map
                    params.put(en.getKey(), newValues);
                    }
            }
        }

    }

    @Override
    public String getParameter(String name) {
        String[] values = params.get(name);

        if(values==null){//获得的参数键不存在
            return null;
        }

        return values[0];
    }

    @Override
    public Map<String,String[]> getParameterMap() {

        return params;
    }

    @Override
    public String[] getParameterValues(String name) {
        return params.get(name);
    }

}
时间: 2024-10-06 12:08:14

EncodingFilter的相关文章

Exception starting filter encodingFilter

1. maven运行tomcat6出现错误Exception starting filter encodingFilter: 严重: Exception starting filter encodingFilter java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter at org.apache.cata

tomcat异常[1]--java.lang.ClassNotFoundException: XXXX.EncodingFilter

EncodingFilter类在java项目中,确实存在,但是启动项目时,总是说找不到这个类. 后来想了一下,项目运行取的应该是项目WEB-INF/classes下面已经编译为.class文件的类文件去运行的,会不会WEB-INF/classes下面根本没有EncodingFilter.class文件. 果然没有! 原因是因为Java Build Path下面的 Default output folder配置错了, contactSys_jdbc/build/classes 改为了 contac

【WEB小工具】EncodingFilter—设置全局编码

1.我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding("utf-8") 方法来设计编码. 1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException, IOException { 3 request.setCharacterEncoding("gbk"); //只适用于p

基于Spring+SpringMVC+Mybatis的Web系统搭建

主要的后端架构:Spring+SpringMVC+Mybatis+Shiro+Maven  IDE:IntelliJ IDEA 15.0.2 jdk:1.8.0_66 系统完整源码 https://github.com/Wellat/Factor 系统目录结构 跑起来效果 搭建步骤 1.用Idea创建maven项目 2.配置pom.xml文件,添加依赖 1 <?xml version="1.0" encoding="UTF-8"?> 2 <proj

java之远程接口调用

1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

搭建基于spring MVC框架 + RESTful架构风格技术总结

实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的访问. 用RESTful架构的创建步骤: 1.创建一个全新的Web工程 2.导包,导入所需要的所有第三方jar包.(springMVC+Hibernate的基本包是必须的) 3.作配置,针对不同的项目需求和不同的搭建设计,开发人员可以按照自己的编码风格来设计符合项目开发具体 应该用多少篇配置文件.但是这几篇配置文件是必不可少的: 3-1.web.xml配置文件:最基本的配

ssm框架搭建+easyui增删改查实现

闲来无事,看了看别人的博客文档也跟着敲了敲,特地记录下来,方便以后学习: spring版本:4.0.6 mybatis版本:3.2.5 所有jar包打包下载:http://pan.baidu.com/s/1qLEaU 1.项目目录结构 其中,controller包下存放控制层文件,dao下存放各个model类相关的数据库操作接口,entity下放置各种model类,mappers下放置各个dao对应的映射文件,service服务层就不说了,放置各种service接口,impl是其具体实现类. 2

CXF+Spring+JAXB+Json构建Restful服务

话不多说,先看具体的例子: 文件目录结构: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://

过滤器Filter

什么是过滤器 过滤器Filter其实就是Servlet,只不过它的职责是在过滤信息,在请求进入核心servlet时候的过滤,在响应发送给客户端时候的过滤. 使用过滤器 要想创建自己的Filter,只需要实现Filter接口,重写里面的init方法.doFilter方法.destroy方法.init方法在你进行过滤的时候的初始化方法,doFilter方法就是你的核心过滤方法,里面有两个参数,一个是ServletRequest,另外一个是ServletResponse,前面一个代表的是请求,后面一个