javaweb的Filter过滤器设置全站编码

Posted GEORES

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaweb的Filter过滤器设置全站编码相关的知识,希望对你有一定的参考价值。

  FIlter配置全站编码有一种方法是重写getParameter方法,也就是继承HttpServletRequestWrapper在重写getParameter方法,还有一种就是如下:

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 将requese进行强转
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		// 得到参数提交方式
		String method = req.getMethod();
		// 分为Get和Post两种方式进行处理
		if(method.equalsIgnoreCase("post")) {
			System.out.println("采用的是Post请求方式...");
			// post	请求方法,直接可以进行设置
			req.setCharacterEncoding("utf-8");
			resp.setContentType("text/html;charset=utf-8");
		} else {
			System.out.println("采用的是Get请求方式...");
			// get 请求方法,对于请求的参数的进行改变设置字符集
			resp.setContentType("text/html;charset=utf-8");
			Enumeration<String> enumeration= req.getParameterNames();
			while(enumeration.hasMoreElements()) {
				String key = enumeration.nextElement();
				String[] values = req.getParameterValues(key);
				// 对值进行字符集的编码设置
				for(int i=0; i<values.length; i++) {
					values[i] = new String(values[i].getBytes("iso-8859-1"), "utf-8");
				}
			}
		}
		chain.doFilter(req, resp);
	}

  

  如果在FIlter中进行制定编码方式的编码,且代码无误的话,还是显示乱码,那么可能存在的问题是因为Tomcat的<Connector>标签缺少了URIEncoding的配置。

  配置如下:

  修改Tomcat下的/conf/server.xml配置文件,制定URIEncoding;

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"  URIEncoding="UTF-8"/>

  就是加上:URIEncoding="UTF-8"

以上是关于javaweb的Filter过滤器设置全站编码的主要内容,如果未能解决你的问题,请参考以下文章

javaWeb_全站编码

javaweb学习总结(四十六)——Filter(过滤器)常见应用

JAVAWEB学习笔记24_filter实现自动登录和解决全局的编码问题

JavaWeb 之 Filter:过滤器

tomcat8 编写字符编码Filter过滤器无效问题

Filter学习Filter(过滤器)常见应用