A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 fighting 于 2013-3-16 20:03 编辑

在android中经常使用httpclient与网络连接,但是我当我用java app写了一个表单验证时,提交中文数据时出现了问题:
在使用post方式提交时,先对中文进行编码,当在servlet中获取时,tomcat貌似并没有对这些编码进行解码,不知是什么原因?

这是post方法,用于提交数据
  1. //使用httpclient-post的方式提交数据,为什么当请求中有中文时在服务器端取不自动解码呢???
  2.         public String httpclientPostToServer(String username, String password){
  3.                 String info = null;
  4.                
  5.                 try {
  6.                         username = URLEncoder.encode(username, "utf-8");
  7.                         password = URLEncoder.encode(password, "utf-8");
  8.                         
  9.                         HttpPost post = new HttpPost(Config.site);
  10.                         
  11.                         List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
  12.                         list.add(new BasicNameValuePair("username", username));
  13.                         list.add(new BasicNameValuePair("password", password));
  14.                         
  15.                         post.setEntity(new UrlEncodedFormEntity(list, "utf-8"));
  16.                         
  17.                         DefaultHttpClient httpclient = new DefaultHttpClient();
  18.                         HttpResponse response = httpclient.execute(post);
  19.                         
  20.                         if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
  21.                                 InputStream is = response.getEntity().getContent();
  22.                                 
  23.                                 info = streamToString(is);
  24.                         }else{
  25.                                 System.out.println("服务器返回异常");
  26.                         }
  27.                 } catch (Exception e) {
  28.                         e.printStackTrace();
  29.                 }
  30.                
  31.                 return info;
  32.         }
复制代码
这是servlet
  1. public void doPost(HttpServletRequest request, HttpServletResponse response)
  2.                         throws ServletException, IOException {
  3.                 String username = request.getParameter("username");
  4.                 String password = request.getParameter("password");
  5.                
  6.                 //注意编码集的统一
  7.                 username = new String(username.getBytes("iso-8859-1"), "utf-8");
  8.                 password = new String(password.getBytes("iso-8859-1"), "utf-8");
  9.                
  10.                 // 假定参数不为空
  11.                 System.out.println("username:" + username + "\npassword:" + password);

  12.                 if ("川".equals(username) && "123".equals(password)) {
  13.                         response.getOutputStream().write("登录成功!".getBytes());
  14.                 } else {
  15.                         response.getOutputStream().write("登录失败!".getBytes());
  16.                 }

  17.         }
复制代码
问题在代码中也表明了,输出的结果是:
username:%E5%B7%9D
password:123


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
感觉好像前台的时候你把值就给转了,跟后台没关系
回复 使用道具 举报
shenbeiaia 发表于 2013-3-16 23:24
感觉好像前台的时候你把值就给转了,跟后台没关系

但是当我使用get方式时,同样的代码,后台得到的结果却是正常的
回复 使用道具 举报
这个跟传输方式没有关系!看看jsp页面的编码格式是什么吧!
前后要统一
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马