微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

本篇文章是对使用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.

     */

    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 举报,一经查实,本站将立刻删除。

相关推荐