探讨:使用httpClient在客户端与服务器端传输对象参数的详解
来源:互联网 发布:python中的单例模式 编辑:程序博客网 时间:2024/05/21 19:44
本篇文章是对使用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; }}
服务器端的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 }}
0 0
- 探讨:使用httpClient在客户端与服务器端传输对象参数的详解
- 客户端/服务器端通信:传输对象
- 在客户端显示服务器端任务处理进度条的探讨
- 在客户端显示服务器端任务处理进度条的探讨
- 关于HttpClient在服务器端使用请求碰到的问题总结
- TCP传输客户端和服务器端的建立
- 直接在服务器与客户端之间传输对象
- 在vs code中使用ftp-sync插件实现客户端与服务器端代码的同步
- 在vs code中使用ftp-sync插件实现客户端与服务器端代码的同步
- Java Socket服务器端和客户端之间传输对象
- 【Skynet】使用skynet在服务器与客户端间传输文件
- Java Socket通信 客户端与服务器端的连接 和信息传输
- socket bind在客户端和服务器端使用的区别
- 6.服务器与客户端双线程传输文件--服务器端
- 客户端与服务器端的通信
- 服务器端与客户端的编程
- 客户端与服务器端的区别
- 客户端与服务器端的通信
- JAVA大数类练手
- HDU 4598 Difference
- 在rubymine中启动应用。产生 Library not loaded: libmysqlclient.18.dylib (LoadError) 错误的解决办法
- qt 下scrollArea 显示图像的问题
- sax解析原理与案例
- 探讨:使用httpClient在客户端与服务器端传输对象参数的详解
- php实时显示当前时间
- PHPCMS缓存
- Mongo管理命令
- 我开博了
- android shape corners 设置无效的解决
- 用流程图表示算法
- winfrom,wpf程序自动启动(windows计划任务方式)
- Android OpenGL ES :材质渲染