服务端Servlet代码:
package com.httpclient.test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HttpClientServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("GBK"); String username = req.getParameter("username"); String password = req.getParameter("password"); System.out.println(username); PrintWriter writer = resp.getWriter(); writer.print(username + " = " + password); writer.close(); } }
HttpClient客户端代码:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.chinapay.client; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; public class HttpClientPost { public static void main(String[] args) throws IOException{ HttpClient client = new HttpClient(); client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); String url = "http://localhost:8080/httpclient/HttpClientServlet"; PostMethod postMethod = new PostMethod(url); NameValuePair[] data = { new NameValuePair("username", "你好") ,new NameValuePair("password", "wangtao") }; postMethod.setRequestBody(data); int resultCode = client.executeMethod(postMethod); if(resultCode != HttpStatus.SC_OK){ System.err.println("Method failed:" + postMethod.getStatusLine()); } InputStream responseBody = postMethod.getResponseBodyAsStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(responseBody,"GBK")); String tempBf = null; while((tempBf=reader.readLine()) != null){ System.out.println(tempBf); } } }
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");和req.setCharacterEncoding("UTF-8");编码格式相同,BufferedReader reader = new BufferedReader(new InputStreamReader(responseBody,"GBK"));和resp.setCharacterEncoding("GBK");的编码格式相同。这样就可以解决乱码问题了。