get()和post()方法編碼的區別


 

在做ssh搭建的框架中,在后台條件查詢的時候,組合查詢傳到后台的值一直是亂碼,其中在form表單中必須要加上method,這一點是肯定的,但是加上了提交的方式之后,會出現如下問題:
如果使用get方法提交,在后台獲取值的時候必須使用new String(className.getBytes("ISO8859-1"),"UTF-8")來進行轉碼才可以不亂碼
 如果使用post方式提交,在后台不亂碼,前提是在web.xml已經配置了編碼過濾器,並且在頁面中也配置了相應的編碼格式

出現上述的原因是因為Tomcat對get和post兩種提交方式的處理方法不一樣造成的。自從Tomcat5.x開始,GET和POST方法提交的信息,Tomcat采用了不同的方式來處理編碼,對於POST請求,Tomcat會仍然使用request.setCharacterEncoding方法所設置的編碼來處理,如果未設置,則使用默認的iso-8859-1編碼。而GET請求則不同,Tomcat對於GET請求並不會考慮使用request.setCharacterEncoding方法設置的編碼,而會永遠使用iso-8859-1編碼

所以解決的辦法有:
如果是get和post方法中的參數在后台都要使用,並且用到的是一個地方,那么轉碼的方式肯定是不行的,那么需要在tomcat下的server.xml中加上URIEncoding="UTF-8",即加在
  <Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />
  
如果不是第一種情況    那么用轉碼的方式就可以
  new String(className.getBytes("ISO8859-1"),"UTF-8")
  


需要說明的是,需要設置過濾器和jsp中的編碼,其中
<filter>
		<filter-name>encodingFilter</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>
	</filter>

	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
相當於是
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

在頁面中也需要設置
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM