这是我用来查询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&gt; javac -classpath .; D:\ JAR \ servl ET-api.jar文件; d:\ JAR \ 1solr核-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时,它给了我一个错误:
输入异常报告 消息
description服务器遇到阻止的内部错误() 它来自履行这一要求。
例外
javax.servlet.ServletException:Servlet执行引发异常 根本原因
java.lang.NoClassDefFoundError: 组织/阿帕奇/ Solr的/客户/ solrj / IMPL / CommonsHttpSolrServer HelloWorldExample.doGet(HelloWorldExample.java:35) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
答案 0 :(得分:1)
编译时,您正确地将所有依赖库包含在类路径中。
用于执行的类路径是一个完全不同的野兽。您需要确保Servlet在执行时可以访问jar。如何做到这取决于您使用的容器。因为它是tomcat,所以很容易找到(在网上搜索)如何添加第三方库(非常确定你可以将jar转储到common / lib目录中)。
最好是使构建过程与手动编译servlet类不同。例如,IDE或maven - 会产生war / web应用程序并将其部署到servlet容器(在你的情况下是tomcat)。我真的非常推荐这样做而不是手动编译和部署(一旦你获得IDE工作方式并在部署时变得更加熟练,你可以回到手动部署)
也许在互联网上搜索有关servlets和tomcat的教程?
答案 1 :(得分:0)
将库jAR文件放在其/WEB-INF/lib
文件夹中的webapp所在的位置。该文件夹默认由webapp的运行时类路径覆盖。