源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

探讨:使用httpClient在客户端与服务器端传输对象参数的详解

  • 时间:2022-03-14 11:33 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:探讨:使用httpClient在客户端与服务器端传输对象参数的详解
昨天把httpClient的源代码下载来看了一下。 稍微跟踪了一下,最终还是使用java.net包的东西.不过封装的实在是漂亮.写程序方便多了。不过还是建议最好先熟悉net包下的东西.为了测试写了个在客户端和服务器段传对象的代码. 简单的传递了一个字符串. 如果复杂点可以传其他的对象,在参数里给出class name之类的信息.服务器端就可以使用反射来做一些实用的操作了。 [b]客户端: [/b]
[u]复制代码[/u] 代码如下:
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;     } }
[b]服务器端的servlet [/b]
[u]复制代码[/u] 代码如下:
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)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部