乱码过虑器(对于get和post提交方法都有用)

来源:互联网 发布:图书借阅软件 编辑:程序博客网 时间:2024/04/26 15:14

/*

    过虑器代码

*/

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
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 Filter_test3 implements Filter {
 FilterConfig filterConfig;//用于保存初始化传递配置文件中的参数
 public void destroy() {}
 @SuppressWarnings("unchecked")
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  //用于保存get方式转换编码后的数据(key-->value)
  Map<String, String> parameterMap = new HashMap<String, String>();
  //转换为子接口
  HttpServletRequest req = (HttpServletRequest)request;
  //获取表单中的元素名称集合
  Enumeration<String> enumber = req.getParameterNames();
  while(enumber.hasMoreElements()){
   //获取每个元素的名称
   String eleName = enumber.nextElement();
   //获取名称对应的value值
   String eleValue = req.getParameter(eleName);
   //获取配置中的编码方式
   String encode = filterConfig.getInitParameter("encoding");
   //将转换后的名称的值保存到map中
   parameterMap.put(eleName, new String(eleValue.getBytes("iso-8859-1"),encode));
  }
  //保存到request中
  req.setAttribute("formParam", parameterMap);
  chain.doFilter(request, response);//继续执行请求
  parameterMap.clear();//处理完成后清空map中的值
 }
 public void init(FilterConfig arg0) throws ServletException {
  this.filterConfig = arg0;
 }
}

/*

    web.xml配置文件(过虑器部分)

*/

<filter>
   <filter-name>Filter_test3</filter-name>
   <filter-class>com.fx.Filter_Work.Filter.Filter_test3</filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
   </init-param>
  </filter>
  <filter-mapping>
   <filter-name>Filter_test3</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>