最近在写三期项目的时候,遇到一个问题,就是用js提交参数到后台handler中的时候,用实体类接受的时候因为多个jsp页面命名(name="")相同,导致后台获取的时候出现乱码现象,关于这一现象,通过查询得知可以使用 javaScript endcodeURI()函数解决。在页面上进行两次编码操作,然后在后台再进行一次解码。

  encodeURI() 函数可把字符串作为 URI 进行编码。在js中通过定义name 和 pwd 来获取属性值:

      var name = $("#uname").val();

      var pwd = $("#upwd").val();

  然后通过encodeURI() 函数进行两次转码:

      var uname = encodeURI(encodeURI(name));

      var upwd = encodeURI(encodeURI(pwd));

  再用get方法在地址栏上传参到后台:     

      $.get("user/numLogin?User_UserName="+uname+"&User_UserPassword="+upwd,function(data){
        if(data){
          alert("登录成功!!!");
        }else{
           alert("用户名或密码错误!!!");
        }
      },"json");

  在后台用实体类接受后在进行一次转换,再存进实体类中:  

    @RequestMapping("/numLogin")
    @ResponseBody
    public boolean doNumLogin(UserEntity user, HttpSession session) throws UnsupportedEncodingException{
      String name = user.getUser_UserName();
      user.setUser_UserName(URLDecoder.decode(name,"utf-8"));
      String pwd = user.getUser_UserPassword();
      user.setUser_UserPassword(URLDecoder.decode(pwd,"utf-8"));
      user = userService.login(user);
      session.setAttribute("loginUser", user);
      if (user != null) {
        return true;
      }else {
        return false;
      }
    }

    然后,再后台获得的数据就是正常的中文utf-8字符了。

 

 

   说明:

      该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

      该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

  提示和注释:

      提示:如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。