无法在java中运行简单的HTTP客户端

时间:2014-12-17 12:16:03

标签: java apache-httpclient-4.x

在我的代码目录中,有以下文件:

apache-httpcomponents-httpcore.jar
httpclient-4.0.3.jar
java-json.jar

和一个java源文件:

JSONLoader.java

我在同一目录中执行以下命令:

javac -cp *;. JSONLoader.java

java -cp "*;." JSONLoader

第二个命令后出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:159)
        at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:178)
        at JSONLoader.main(JSONLoader.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 3 more

这是java代码文件:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JSONLoader {

/**
 * @param args
 */
public static void main(String[] args) {
     try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet getRequest = new HttpGet(
                "http://www.espncricinfo.com/netstorage/754739.json");
            getRequest.addHeader("accept", "application/json");

            HttpResponse response = httpClient.execute(getRequest);

            if (response.getStatusLine().getStatusCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                   + response.getStatusLine().getStatusCode());
            }

            BufferedReader br = new BufferedReader(
                             new InputStreamReader((response.getEntity().getContent())));

            String output;
            System.out.println("Output from Server .... \n");
            while ((output = br.readLine()) != null) {
                System.out.println(output);
            }

            httpClient.getConnectionManager().shutdown();

          } catch (ClientProtocolException e) {

            e.printStackTrace();

          } catch (IOException e) {

            e.printStackTrace();
          }

    }
}

我错过了什么吗?

5 个答案:

答案 0 :(得分:2)

下载commons-logging.jar并将其添加到您的类路径中。

答案 1 :(得分:2)

请从堆栈跟踪中检查此行:

 Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

这意味着缺少apache commons日志记录(http客户端的依赖关系)。它确实在你的命令行中丢失了。

您必须添加所有依赖项,包括您的第三方及其第三方的依赖关系。

答案 2 :(得分:1)

基本上,当你在运行时没有相应的类时,你会得到ClassNotFoundException。在这里,您缺少apache-httpclient所依赖的apache的日志记录和编解码器jar。请参阅您需要的dependencies

因此,一旦下载它们,将它们与httpcore jar一起添加到类路径或-cp命令行中,然后重新运行代码。

答案 3 :(得分:0)

有一些错过的jar文件( commons-logging.jar ),您可以从here下载

我希望它会对你有所帮助,最好的问候。

答案 4 :(得分:0)

java.lang.NoClassDefFoundError表示嗯...没有发现Class Def Found错误。您的代码尝试在某处使用类,但它不存在。在您的情况下,该类是

  

组织/阿帕奇/公地/记录/的LogFactory

所以我在搜索引擎中输入了以下文字:

  

下载org / apache / commons / logging / LogFactory

,第一个结果是this

下载并添加到您的项目中。