有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Web服务中使用htmlunit时引发的异常意味着什么?

我正在尝试在web服务中使用htmlunit。我创建了一个动态web项目并实现了函数homepage()。然后,我使用web服务向导生成web服务器和客户端。当我试图使用它时,抛出了这个异常

Exception: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException; nested exception is: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException Message: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException; nested exception is: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException

我将HTMLUnitJAR添加到构建路径中。它没有理由找不到这些类。服务器类如下所示:

package test.eko;
import java.io.IOException;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class TestEko {

    public String homePage(String place, String checkinDate, String checkoutDate){
        final WebClient webClient = new WebClient();
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setPrintContentOnFailingStatusCode(false);

    String URL = "http://hotels.travelcomparing.com/SearchResults.aspx?languageCode=EN&currencyCode=EUR&destination=place:" + place + "&radius=0km&checkin=" + checkinDate +"&checkout=" + checkoutDate + "&Rooms=1&adults_1=1&pageSize=15&pageIndex=0&sort=MinRate-asc&showSoldOut=false&view=hc_sr_summary&scroll=0&mapstate=contracted";

    HtmlPage page = null;
    try {
        page = webClient.getPage(URL);
    } catch (FailingHttpStatusCodeException | IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    webClient.waitForBackgroundJavaScript(10000);
    String htmlContent = page.asXml();

        String hotelName = "";
        String priceFrom = "";

        String result = "";

        for (int i = 0; i < 5; i++){

            int index1 = htmlContent.indexOf ( "<div fn=");
            int index2 = htmlContent.indexOf("<div fn=", index1 + 8);
            String row = (String) htmlContent.subSequence(index1 , index2);
            htmlContent = htmlContent.substring(index2);
            //System.out.println(row);

            int index3 = row.indexOf("class=\"hc_i_hotel\" p=\"2\">");
            int index4 = row.indexOf("</a>", index3);
            hotelName = (String) row.subSequence(index3 + 61, index4 -34);
            System.out.println(hotelName);
            result = result + hotelName + " ";

            int index5 = row.indexOf("<dd class=\"hc_i_price\">");
            int index6 = row.indexOf("</dd>", index5);
            String priceRow = (String) row.subSequence(index5, index6 + 5);

            int index7 = priceRow.indexOf("<span class=\"hc_pr_syb\">");
            int index8 = priceRow.indexOf("<span class=\"hc_pr_cur\">");
            priceFrom = (String) priceRow.subSequence(index7 + 148, index8 - 38);
            System.out.println(priceFrom);
            result = result + priceFrom + "    ";
        }
        return result;


}

}

这段代码应该使用3个字符串作为参数,并使用这些参数访问网站,然后将页面保存为字符串并对其进行解析以获取一些信息。然后,它应该返回连接在单个字符串中的信息。代码在普通项目(不是动态web项目)中正常工作。我对web服务非常陌生,我不确定我做错了什么。有人能给我指一下正确的方向吗


共 (1) 个答案

  1. # 1 楼答案

    I added the htmunit jars into the buildpath (...) The code worked normally in a normal project (not a dynamic web project)

    在处理动态Web项目时,所有第三方库必须位于Web-INF/lib文件夹中,以便Web应用程序服务器识别和加载。确保做到这一点,然后重新构建应用程序并尝试部署它、运行测试等