最近在写三期项目的时候,遇到一个问题,就是用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() 方法分别对各组件进行编码。