apache http客户端中的异常

Posted

技术标签:

【中文标题】apache http客户端中的异常【英文标题】:Exception in apache http client 【发布时间】:2013-02-26 18:57:44 【问题描述】:

我使用 eclipse ide,当我运行我的程序时一切正常,但是当我在服务器上运行相同的程序时,它给了我这个异常,我已经把我的所有远文件以及我的 lib 文件夹中,请帮助我想对这个问题表示不满。

java.lang.ClassNotFoundException: org.apache.http.HttpRequest
    在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701)
    在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    在 java.lang.ClassLoader.defineClass1(本机方法)
    在 java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    在 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2836)
    在 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160)
    在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1668)
    在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
    在 org.controller.KeyRank.doPost(KeyRank.java:41)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    在 java.lang.Thread.run(Thread.java:722)

这是我的代码:

 public String readGoogle(String keyword, int page) 
        HttpClient 客户端 = 新 DefaultHttpClient();

        // 创建一个方法实例
        关键字 = 关键字.trim();
        关键字 = 关键字.replaceAll(" ", "+");

        字符串 url = "http://www.google.com/search?q="+keyword+"&start="+page+"&btnG=Google+Search&aq=f&oq=";
        字符串响应体 = "";
        HttpGet 方法 = 新的 HttpGet(url);

        //提供自定义重试处理程序是必要的
        //:OC:method.getParams().setParameter(HttpConnectionParams.RETRY_HANDLER, new DefaultHttpRequestRetryHandler(3, false));


        尝试
        //执行方法


            System.out.println("执行请求" + method.getURI());

            // 创建响应处理程序
            ResponseHandler responseHandler = new BasicResponseHandler();
            responseBody = client.execute(method, responseHandler);
            System.out.println("----------------------------------------");
            System.out.println(responseBody);
            System.out.println("----------------------------------------");



             捕捉(HTTPException e)

                    System.err.println("致命的协议违规:" + e.getMessage());
                    e.printStackTrace();

                 捕捉(IOException e)

                    System.err.println("致命的传输错误:" + e.getMessage());
                    e.printStackTrace();
                 最后 

                    //释放连接
              方法.releaseConnection();

        
        返回响应体;

    

【问题讨论】:

ClassNotFoundException 只能表示指定的类不在您的类路径中。再次检查所有正确的 jar 是否都在您的类路径中。 是的,我已经添加了我所有的 jar,并且我已经将 jar 添加到了我的 WEB-INF/lib 文件夹(httpclient-4.2.3.jar),但是当我运行时它给了我异常相同的代码使用 main 运行它。但是当我在本地主机上运行它时不起作用 @ashishchaudharyjavaoracle 您需要 httpcore jar 文件。在下面检查我的答案。 【参考方案1】:

将 Http 核心 jar 添加到您的构建路径中,从该 url 中找到所需的 jar。 http://www.java2s.com/Code/Jar/h/Downloadhttpcorejar.htm

部署jar然后编译,你的错误将得到解决。

【讨论】:

虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。【参考方案2】:

如果没有您的classpath configuration 和有关您将应用程序部署到的 Web 服务器的知识,要提供帮助并不容易,但从外观上看,您的部署环境中似乎缺少 HttpCore jar。

在那个 jar 中找到了缺失的类。

【讨论】:

以上是关于apache http客户端中的异常的主要内容,如果未能解决你的问题,请参考以下文章

Apache Kafka 客户端何时抛出“批次过期”异常?

Dart 中的模拟 http.Client 给出异常

使用 http 客户端处理异常 - c# [关闭]

Apache Camel JMS - 异常未通过请求/回复返回给调用者

Android 1.6 中捆绑了哪个版本的 Apache HTTP 客户端?

Apache HTTP 客户端 - Apache Http 客户端中 0 个租用连接的问题