GET和POST參數亂碼

當表單用get()方式請求時,表單內的數據參數是經過URL路徑傳送到Servlet的,瀏覽器的傳送編碼方式是能夠調的,
 

 

 
老版本的tomcat的默認解碼方式是iso-8859-1方式,iso-8859-1這種方式時不支持中文的,這時會出現亂碼的問題,咱們能夠將變量再轉碼成utf-8這樣就不會再亂碼:
    String roleIdNew = new String(roleId.getBytes("iso-8859-1"),"UTF-8");
這個時候就出現了另外的一個問題 咱們如今的tomcat版本有的時候不是用iso-8859-1的做爲默認的編碼方式 有的會用utf-8  這個時候咱們就不知道服務器究竟是適用的那一種編碼方式,這個時候咱們最好的解決辦法是:在頁面就對要傳輸的變量作一下編碼 而後在後臺咱們用就知道用哪一種方式進行解碼了
例如:
    頁面:
                
function saveRole(roleId,roleName,flag) {
var roleIdNew = encodeURI(encodeURI(roleId));
var title = "角色" + (flag==0?"新增":"修改");
var url = '/priv/goToAddRole.do?flag='+flag;
openDialog(350,300,'new',title,flag==0?url:url+'&roleId='+roleIdNew,'');
}
    encodeURI方法是將變量編碼成UTF-8的形式 而後咱們在後臺就能夠用UTF-8再解碼就好了
    後臺:
                

@RequestMapping("/goToAddRole.do")
public ModelAndView goToAddRole() throws UnsupportedEncodingException {
ModelAndView mv = new ModelAndView("/newpages/priv/addRole");
String flag = request.getParameter("flag");//0:新增 1:修改
String roleId = request.getParameter("roleId");
if(StringUtil.isNotBlank(roleId)){
/*String roleIdNew = new String(roleId.getBytes("iso-8859-1"),"UTF-8");//中文亂碼問題*/
String roleIdNew = URLDecoder.decode(roleId,"UTF-8");//中文亂碼問題
mv.addObject("role",privRoleService.queryById(roleIdNew));
}
mv.addObject("flag",flag);
return mv;
}
 
     咱們發如今頁面上咱們進行了兩次encodeURI方法來編碼 覺得咱們的數據傳遞到後臺的時候 tomcat會默認解碼一次 若是編碼一次的的話 仍是可能出現亂碼的問題,因此咱們編碼兩次 這樣tomcat自動解碼的時候就會自動抵消一次 咱們再解碼就是正確的了
 
 
因此說表單最好是用post方式提交,並且這個時候,表單元素的傳遞是在HTTP信的正文中傳送到Servlet的,這樣比較安全。在post方式的亂碼問題中能夠這樣解決,若是你想在Servlet中有這樣的操做String name=req.getParameter("hello");或者有這樣的操做System.out.println(req.getParameter("hello"));總之就是不進行out.write()操做,就在getParameter()方法以前加上一句req.setCharacterEncoding("utf-8");可是這個方法就只做用在post的HTTP信的正文,而且要放在getParameter()方法以前,若是你進行out.write()操做出現亂碼,這個就是服務器往瀏覽器寫信的時候出現了亂碼,這個時候在out.write()以前加上

response.setCharacterEncoding("utf-8");html

 response.setContentType("text/html;charset=utf-8");這兩句話要配合使用。瀏覽器

(這一種方法是不推薦的,由於咱們不可能去修改人家服務器上的編碼方式,這個時候程序就會出錯)其實還有一個比較全局的方法就是在服務器中進行配置,在Service的service.xml中的包含鏈接端口的那一句加上:tomcat

 

這一句就算是get方式的亂碼也是能解決的。安全

 

在上傳文件的時候,一般要知道真是路徑,一般要知道上傳到磁盤上的哪個文件,這個時候就用:服務器

 

 

req就是request,括號中參數就是項目當前目錄下的test文件夾,結果就是:app

 

相關文章
相關標籤/搜索