本篇文章是对使用httpClient在客户端与服务器端传输对象参数进行了详细的分析介绍,需要的朋友参考下
昨天把httpClient的源代码下载来看了一下。 稍微跟踪了一下,最终还是使用java.net包的东西.不过封装的实在是漂亮.写程序方便多了。不过还是建议最好先熟悉net包下的东西.为了测试写了个在客户端和服务器段传对象的代码. 简单的传递了一个字符串. 如果复杂点可以传其他的对象,在参数里给出class name之类的信息.服务器端就可以使用反射来做一些实用的操作了。
客户端:
复制代码 代码如下:import java.io.IOException;import java.io.Serializable;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.methods.InputStreamRequestEntity;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.RequestEntity;public class MyTest{ /** * @param args * @throws IOException * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { String url = "http://localhost:8084/system/linantest"; String queryString = "test=hello"; String inputObj = " boy!"; Serializable s = getobjFromServer(url, queryString, inputObj); System.out.println(s.toString()); } /** * @param url * @param queryString 类似a=b&c=d 形式的参数 * * @param inputObj 发送到服务器的对象。 * * @return 服务器返回到客户端的对象。 * @throws IOException */ public static Serializable getobjFromServer(String url, String queryString, Serializable inputObj) throws IOException { HttpClient client = new HttpClient(); PostMethod post = new PostMethod(url); post.setQueryString(queryString); post.setRequestHeader("Content-Type", "application/octet-stream"); java.io.ByteArrayOutputStream bOut = new java.io.ByteArrayOutputStream(1024); java.io.ByteArrayInputStream bInput = null; java.io.ObjectOutputStream out = null; Serializable returnObj = null; try { out = new java.io.ObjectOutputStream(bOut); out.writeObject(inputObj); out.flush(); out.close(); out = null; bInput = new java.io.ByteArrayInputStream(bOut.toByteArray()); RequestEntity re = new InputStreamRequestEntity(bInput); post.setRequestEntity(re); client.executeMethod(post); java.io.InputStream in = post.getResponseBodyAsstream(); java.io.ObjectInputStream oInput = new java.io.ObjectInputStream(in); returnObj = (Serializable) oInput.readobject(); oInput.close(); oInput = null; } catch (IOException e) { // Todo Auto-generated catch block e.printstacktrace(); } catch (ClassNotFoundException e) { // Todo Auto-generated catch block e.printstacktrace(); } finally { if (out != null) { out.close(); out = null; } if (bInput != null) { bInput.close(); bInput = null; } //释放连接 post.releaseConnection(); } return returnObj; }}服务器端的servletpackage test.li;
import java.io.IOException;
import javax.servlet.servletexception;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openjweb.eai.adapter.TimerDBAdapter;
public class TestServlet extends HttpServlet
{
public TestServlet()
{
}
/**
* Destruction of the servlet.
*/
public void destroy()
{
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet.
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws Exception
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
String test = request.getParameter("test");
java.io.ObjectInputStream oi = null;
java.io.ObjectOutputStream ot = null;
try
{
oi = new java.io.ObjectInputStream(request.getInputStream());
Object o = oi.readobject();
oi.close();
oi = null;
String outObj = test + o.toString();
ot = new java.io.ObjectOutputStream(response.getoutputStream());
ot.writeObject(outObj);
ot.flush();
ot.close();
ot = null;
}
catch (IOException e)
{
// Todo Auto-generated catch block
e.printstacktrace();
}
catch (ClassNotFoundException e)
{
// Todo Auto-generated catch block
e.printstacktrace();
}
finally
{
try
{
if (oi != null)
{
oi.close();
oi = null;
}
if (ot != null)
{
ot.close();
ot = null;
}
}
catch (IOException e)
{
// Todo Auto-generated catch block
e.printstacktrace();
}
}
}
/**
* The doPost method of the servlet.
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws servletexception
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException
{
doGet(request, response);
}
/**
* Initialization of the servlet.
*
* @throws servletexception
* if an error occure
*/
public void init() throws servletexception
{
// Put your code here
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。