【问题标题】:running htmlunit on a servlet在 servlet 上运行 htmlunit
【发布时间】:2012-07-30 21:09:57
【问题描述】:

我想使用 htmlunit 从网站上抓取数据。我将地址作为表单的属性传递。我不断收到错误,它说“java.lang.NoClassDefFoundError:com/gargoylesoftware/htmlunit/WebClient”,即使我已导入 .jar 文件并正确设置了 javadoc 文件位置。我错过了什么吗?

package coreservlets;

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 com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

@WebServlet("/WebScrape")
@SuppressWarnings("serial")
public class WebScrape extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {

    PrintWriter out = response.getWriter(); 

    // Create and initialize WebClient object
    final WebClient webClient = new WebClient();

    String Address = (String) request.getAttribute("address");
    HtmlPage page = webClient.getPage(Address);
    final HtmlDivision div = (HtmlDivision) page.getByXPath("//*[@id=\"LDPOffMarketPropertyInfo\"]//div//ul//li[4]//span[1]//text()");

    out.println("<!DOCTYPE html>\n" +
              "<html>\n" +
              "<head>\n" +
              "<meta name=" + "\"viewport\" " +  "content=" + "\"initial-scale=1.0, user-scalable=no\" " + "/>\n" +
              "<style type=" + "\"text/css\">\n" +
                "  html { height: 100% }\n" +
                "  body { height: 100%; margin: 0; padding: 0 }\n" +
                "  #default { height: 800px;\n"+
                "            width: 400px;  }\n" +
                "  </style>\n" + div);

    }   


}

【问题讨论】:

  • 解释“我已导入 .jar 文件”是什么意思。你把 jar 文件放在哪里了?
  • 您确定您拥有所有所需的库吗?你是如何指定类路径的?
  • 我使用了构建类路径 .. 并添加了外部 .jar 文件(我将其放在项目文件夹中),但使用 add external 因为我希望路径是绝对的。我添加了从他们的网站下载的 htmlunit .zip 文件的全部内容。我还指定了 javadoc 位置。

标签: servlets htmlunit


【解决方案1】:

假设您使用 Eclipse,构建路径就是:用于构建应用程序的库集。

您还需要在您的 web 应用程序内的 runtime 上提供这些库。 servlet 规范解释了 webapp 的库必须放在哪里:WEB-INF/lib

从构建路径中删除 jar 文件,并将它们放到您的 WebContent 目录的文件夹 WEB-INF/lib 中。这将自动将它们添加回构建路径,并使它们成为已部署应用程序的一部分,因此在运行时可用。

它们还将出现在 Eclipse 的包资源管理器中的 Web 应用程序库 节点下,确认这些库是 web 应用程序的一部分。

【讨论】:

  • 我按照你说的做了,但它们不会自动添加到构建路径中。我是否应该再次手动添加它们,并将它们放在 WEB-INF/lib 目录中。
  • 没有。确保刷新项目,它们就会出现。
  • 我不确定我做错了什么,我完全按照您的指示进行操作,但它没有出现在构建路径中
  • 您有任何编译问题吗?如果不是,那么它们就在构建路径中,隐藏在“WebApp 库”条目后面。
  • 我想通了。你必须像你说的那样将它添加到 WEB-INF/lib 文件夹中,然后通过构建路径导入 .jars 。然后使用 Properties > Deployment Assembly > Add> Java Build Path Entries,它似乎工作
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多