java - Apache DefaultHttpClient 类的问题

标签 java eclipse apache servlets

我是 servlet 应用程序的新手,正在尝试学习该主题。在途中,我编写了一个名为 FormWebServlet 的 servlet 类,它使用 org.apache.http.impl.client.DefaultHttpClient 类。但是,我得到了异常(exception)

java.lang.ClassNotFoundException: org.apache.http.impl.client.DefaultHttpClient

... 这清楚地表明这个类不存在,尽管我已经将 jar 文件添加到项目中。

服务器返回一个“HTTP Status 500”错误消息,“根本原因”是这个缺失的类:

java.lang.NoClassDefFoundError: org/apache/http/impl/client/DefaultHttpClient
    testPackage.FormWebServlet.doGet(FormWebServlet.java:45)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

尝试 1) 我搜索丢失的 jar 文件并将其添加到项目中(通过在“Eclipse JAVA EE IDE for Web Developers, 20100917-0705”的项目资源管理器中继续项目,选择“Properties”,选择“Java Build Path"并单击 [Add External JARs...] 按钮。)添加的 jar 文件来自 Apache 站点,名为 httpclient-4.1.1.jar。 2) 由于我仍然遇到同样的错误,我用 7-ZIP 提取了 DefaultHttpClient.class 文件并将其放入 WebContent/WEB-INF/lib 目录。

问题 我究竟做错了什么?其他两个 JAR 文件都不包含该类,WEB-INF/lib 文件夹中也不存在具有此名称的类。

详情 包含的 JAR:

common-httpclient-3.0.1.jar
httpclient-4.1.1.jar
httpcore-4.1.jar

FormWebServlet.jar:

/**
 * 
 */
package testPackage;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import coreServlets.ServletUtilities;

/**
 *
 */
@WebServlet(description = "Gets the book's barcode with a form", urlPatterns = { "/FormWebServlet" })
public class FormWebServlet extends HttpServlet {

    /** */
    private static final long serialVersionUID = 6008315960327824633L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request,
     *  HttpServletResponse response)
     */
    protected void doGet(final HttpServletRequest request, 
            final HttpServletResponse response)
    throws IOException, ServletException {
        final String BAR_CODE = request.getParameter("barCode");

        response.setContentType("text/html");
        final PrintWriter out = response.getWriter();

        if (BAR_CODE != null) {
            HttpClient client = new DefaultHttpClient();
            final String ADDRESS = ServletUtilities.getHttpAddress(BAR_CODE);

            out.println("ADDRESS = \"" + ADDRESS + '\"');
            HttpGet get = new HttpGet(ADDRESS);

            HttpResponse httpResponse = null;

// Removed commented code that will use these objects
        }
    }
}

最佳答案

只需将 JAR 文件本身放入 WEB-INF/lib,而不是类文件。这样它们就会包含在您的部署中。

关于java - Apache DefaultHttpClient 类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832713/

相关文章:

java - Ant:NoClassDefFound 异常

java - Maven - 如何配置 Maven 以满足这些要求

java - 如何将eclipse连接到postgresql?

html - 拒绝应用样式,因为其 MIME 类型 "text/html"不支持样式表 MIME 类型,并且启用了严格的 MIME 检查

java - Xpath 无法运行(在 Eclipse 中),但可以在 Debug模式以及 Selenium IDE 下运行

Java:即使我在后台运行游戏时如何保持我的应用程序正常运行

java - 从根项目中的子项目获取依赖项

Android 复选框 state_enabled

apache - 使用 Plesk11.x 的 Centos

apache - hive 如何从csv加载数据?