[英]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.