多线程模式下使用httpclient

 多线程模式下使用httpclient
多线程同时访问httpclient,例如同时从一个站点上下载多个文件。对于同一个HttpConnection 同一个时间只能有一个线程访问,为了保证多线程工作环境下不产生冲突,httpclient使用了一个多线程连接管理器的类: MultiThreadedHttpConnectionManager,要使用这个类很简单,只需要在构造HttpClient实例的时候传入即可,代码如下:

MultiThreadedHttpConnectionManager connectionManager =   new MultiThreadedHttpConnectionManager();
HttpClient client = new HttpClient(connectionManager);
以后尽管访问client实例即可。

参考资料:
httpclient首页:    http://jakarta.apache.org/commons/httpclient/
关于NTLM是如何工作: http://davenport.sourceforge.net/ntlm.html

先将我servlet的代码粘贴如下:
    protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        String portal_username = httpServletRequest.getParameter("portal_username");
        String sys_flag = httpServletRequest.getParameter("sys_flag");
        System.out.println("==========================");
        SysLogin sysLogin = new SysLogin();
        Map mapSysInfo = sysLogin.sysInfo(portal_username, sys_flag);
        ConfigAnalyze configAnalyze = new ConfigAnalyze();
        Map mapInfoSubmit = configAnalyze.getMapSysFlag(sys_flag);
        String error_key = (String) mapInfoSubmit.get("error_key"); //关键字

        HttpClient client = new HttpClient();
        HttpMethod method = getPostMethod(mapSysInfo, mapInfoSubmit);//使用POST方式提交数据
        client.executeMethod(method);
        //打印服务器返回的状态
        System.out.println(method.getStatusLine());
        //打印返回的信息
        System.out.println("=====================");
        System.out.println(method.getResponseBodyAsString());
        System.out.println("======================");
        String rtnFlag = String.valueOf(method.getResponseBodyAsString().indexOf(error_key));
        httpServletResponse.getWriter().write(rtnFlag); //通过这句话,可以把rtnFlag传递到页面上,ajax可以获取。即 // alert(rtnStr);可以将其显示出来。
        //释放连接
        method.releaseConnection();
    }

    private static HttpMethod getPostMethod(Map mapSysInfo, Map mapInfoSubmit) {
        String form_action = (String) mapInfoSubmit.get("form_action"); //form提交的目标页面
        String form_username = (String) mapInfoSubmit.get("form_username");    //“用户名称”表单的名字
        String form_password = (String) mapInfoSubmit.get("form_password");                 //“密码”输入表单的名字
        String sys_username = (String) mapSysInfo.get("sys_username"); //用户名
        String sys_password = (String) mapSysInfo.get("sys_password"); //密码

        PostMethod post = new PostMethod(form_action);
        NameValuePair[] data = {
                new NameValuePair(form_username, sys_username),
                new NameValuePair(form_password, sys_password)
        };
        post.setRequestBody(data);
        return post;
    }
我的servlet中有很多变量,可能大家看不明白,但是主要看getPostMethod()方法即可,看此方法是如何请求方法的。

对此,再次对上面文章的作者表示感谢。如果大家有什么其他问题要通过httpclient解决,可以访问apache的官方网站。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值