簡體   English   中英

Servlet引發異常

[英]Servlet throws Exception

這是我用來查詢Solr索引的Servlet代碼

import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

//Solr Imports
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;

/*
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
*/

public class HelloWorldExample extends HttpServlet {

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException
    {
        PrintWriter out = response.getWriter();
        String inputStr=request.getParameter("input");
        out.println("<html><h1>" + inputStr + "</h1></body></html>");
        //try {
        SolrServer server = new CommonsHttpSolrServer("http://localhost:8080/solr/");
        SolrQuery solrQuery = new SolrQuery(); 
        //solrQuery.setQuery("fileName:"+input);
        solrQuery.setQuery("Latitude:"+32.55668);
        QueryResponse rsp = server.query(solrQuery);
        //SolrDocumentList x = rsp.getResults();
        System.out.println(rsp);
        }
        catch (SolrServerException e) {
            e.printStackTrace();
        }       
    }
}

我正在使用編譯此代碼

D:\\ xampp \\ tomcat \\ webapps \\ examples \\ WEB-INF \\ classes> javac -classpath。; D:\\ JAR \\ servl et-api.jar; D:\\ JAR \\ 1solr-core-1.3.0.jar; D :\\ JAR \\ 1solr-solrj-1.3.0.jar; D:\\ JAR \\ 1solr -common-1.3.0.jar; D:\\ JAR \\ apache-solr-solrj-1.4.0.jar HelloWorldExample.java

此代碼編譯沒有問題。 但是,當我運行此servlwt時,它給了我一個錯誤:

輸入異常報告消息

描述服務器遇到內部錯誤(),導致服務器無法滿足此請求。

例外

javax.servlet.ServletException:Servlet執行引發異常的根本原因

java.lang.NoClassDefFoundError:org / apache / solr / client / solrj / impl / CommonsHttpSolrServer HelloWorldExample.doGet(HelloWorldExample.java:35)javax.servlet.http.HttpServlet.service(HttpServlet.java:621)javax.servlet.http .HttpServlet.service(HttpServlet.java:722)

進行編譯時,可以正確地將所有依賴庫包含在類路徑中。

用於執行的類路徑是完全不同的野獸。 您需要確保Servlet在執行時可以訪問jar。 具體操作取決於您使用的容器。 由於它是tomcat,因此應該很容易發現(搜索網絡)如何添加第三方庫(很確定您可以將jar文件轉儲到common / lib目錄中)。

最好的做法是使構建過程不同於servlet類的手動編譯。 例如,IDE和maven-會產生war / web應用程序並將其部署到servlet容器(在您的情況下為tomcat)。 我確實真的建議您這樣做,而不是手動進行編譯和部署(一旦您使IDE正常工作並且對部署更加精通,就可以回到手動部署了)

也許在互聯網上搜索有關servlet和tomcat的教程?

將庫JAR文件放在webapp所在的/WEB-INF/lib文件夾中。 默認情況下,該文件夾由webapp的運行時類路徑覆蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM