1. 程式人生 > >javaweb的Filter過濾器設置全站編碼

javaweb的Filter過濾器設置全站編碼

... eth 字符集 ext method 缺少 param pri ati

  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過濾器設置全站編碼