zoukankan      html  css  js  c++  java
  • 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");

     response.setContentType("text/html;charset=utf-8");这两句话要配合使用。

    (这一种方法是不推荐的,因为我们不可能去修改人家服务器上的编码方式,这个时候程序就会出错)其实还有一个比较全局的方法就是在服务器中进行配置,在Service的service.xml中的包含连接端口的那一句加上:

    这一句就算是get方式的乱码也是能解决的。

     

    在上传文件的时候,通常要知道真是路径,通常要知道上传到磁盘上的哪一个文件,这个时候就用:

     

    req就是request,括号中参数就是项目当前目录下的test文件夹,结果就是:

     

  • 相关阅读:
    LG5283 异或粽子
    LG2216 理想的正方形
    LG1484 种树
    洛谷3721 HNOI2017单旋(LCT+set+思维)
    洛谷3348 大森林 (LCT + 虚点 + 树上差分)
    CF1082E Increasing Frequency (multiset+乱搞+贪心)
    CF1082G Petya and Graph(最小割,最大权闭合子图)
    cf1082D Maximum Diameter Graph(构造+模拟+细节)
    洛谷3320 SDOI2015寻宝游戏(set+dfs序)(反向迭代器的注意事项!)
    CF613D Kingdom and its Cities(虚树+贪心)
  • 原文地址:https://www.cnblogs.com/programmer1/p/8057540.html
Copyright © 2011-2022 走看看