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

 

相关文章
相关标签/搜索