2012-07-30 66 views
0

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

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); 

    } 


} 
+0

请解释“我导入的.jar文件”的含义。你把你的jar文件放在哪里? – 2012-07-30 21:20:41

+0

你确定你有*所有必需的库吗?你如何指定类路径? – 2012-07-30 21:22:46

+0

我使用了构建类的路径..并添加了外部的.jar文件(我把它放在项目文件夹中),但由于我希望路径是绝对路径,所以使用添加外部文件。我添加了从他们的网站下载的htmlunit .zip文件的全部内容。我还指定了javadoc位置。 – StackTraceYo 2012-07-30 21:30:23

回答

2

假设你使用Eclipse,在构建路径就是:一组库用于构建应用。

您还需要库中的运行时在您的web应用程序中。 servlet规范说明了Web应用程序的库必须在哪里:WEB-INF/lib

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

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

+0

我照你所说的做了,但它们不会自动添加到构建路径中。我应该再次手动添加它们,并将它们放在WEB-INF/lib目录中。 – StackTraceYo 2012-07-30 22:00:42

+0

否。确保刷新项目,它们将出现。 – 2012-07-30 22:01:33

+0

我不确定我做错了什么,我完全按照你的指示,但它没有出现在构建路径 – StackTraceYo 2012-07-30 22:47:55