服务器解析get/post请求参数编码处理

  服务器解析get/post请求编码

1.  get请求方式

当客户端通过get请求发送数据给服务器时,由于tomcat的默认编码是ISO8859-1,即客户端的JSP页面的charset无论是UTF-8还是GBK,服务器都都会将数据重新编码为ISO8859-1格式,所以这就需要我们在使用request.getParameter()获取数据后再转编译成utf-8。

                String userName=request.getParameter(“userName”);

                //这时候打印出来的userName会乱码

                userName= newString(userName.getBytes(“iso-8859-1”), “utf-8”);

                //这时候打印出来的userName会是页面输入的值

2.  post请求方式

  当客户端通过post请求(enctype="application/x-www-form-urlencoded")发送数据给服务器时,可以在使用request.getParameter()获取请求参数之前先通过request.setCharacterEncoding()来指定编码,然后再使用reuqest.getParameter()方法来获取请求参数。

       也就是说,如果是post请求,可以指定服务器编码!但如果没有指定编码,那么还是默认的ISO-8859-1编码。

                         request.setCharacterEncoding(“utf-8”);

                         String name =request.getParameter(“name”);

                         //打印出来的userName会是页面输入的值

但是每个接口中都要加request.setCharacterEncoding(“utf-8”),这比较麻烦,且代码冗余。有一个更好的解决办法:在web.xml中配置filter,具体来说是org.springframework.web.filter.CharacterEncodingFilter(在spring-web-xxx.RELEASE.jar包中)。见如下xml配置:

<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
上面那两个初始化参数是CharacterEncodingFilter类的两个属性,名字不用死记。

如果在web.xml中配置了此Filter,则request.getCharacterEncoding()得到的值是utf-8,否则得到的值是null(为什么不是ISO8859-1呢?待解释),在request.setCharacterEncoding(“utf-8”)之后,request.getCharacterEncoding()才能得到utf-8

你可能感兴趣的:(服务器解析get/post请求参数编码处理)