手机
当前位置:查字典教程网 >编程开发 >Java >探讨:使用httpClient在客户端与服务器端传输对象参数的详解
探讨:使用httpClient在客户端与服务器端传输对象参数的详解
摘要:昨天把httpClient的源代码下载来看了一下。稍微跟踪了一下,最终还是使用java.net包的东西.不过封装的实在是漂亮.写程序方便多了...

昨天把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;

}

}

服务器端的servlet

复制代码 代码如下:

package 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()

{

super();

}

/**

* Destruction of the servlet. <br>

*/

public void destroy()

{

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

/**

* The doGet method of the servlet. <br>

*

* 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. <br>

*

* 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. <br>

*

* @throws ServletException

* if an error occure

*/

public void init() throws ServletException

{

// Put your code here

}

}

【探讨:使用httpClient在客户端与服务器端传输对象参数的详解】相关文章:

使用jdk7的nio2操作文件拷贝和剪切示例

关于国际化、OGNL表达式语言

JAVA 十六进制与字符串的转换

解析使用jdbc,hibernate处理clob/blob字段的详解

Java中用户向系统传递参数的三种基本方式实例分享

java中tomcat的80端口被占用问题解决

解决JSTL foEach标签 刷新报错的方法

简单的用java实现读/写文本文件的示例

java使用TimerTask定时器获取指定网络数据

java日期工具类实例分享

精品推荐
分类导航