0

这是我用来查询 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)

4

2 回答 2

1

编译时,您正确地将所有依赖库包含到类路径中。

用于执行的类路径是完全不同的野兽。您需要确保 Servlet 在执行时可以访问 jar。如何做到这一点取决于您使用的容器。因为它是 tomcat,所以应该很容易找到(搜索网络)如何添加第三方库(很确定你可以将 jar 转储到 common/lib 目录中)。

最好的构建过程与手动编译 servlet 类不同。例如 IDE 或 maven - 这将产生一个战争 / Web 应用程序并将其部署到 servlet 容器(在您的情况下为 tomcat)。我真的非常推荐这样做,而不是手动编译和部署(一旦你获得了 IDE 的工作方式并且在部署方面变得更加熟练,你可以回到手动部署)

也许在互联网上搜索有关 servlet 和 tomcat 的教程?

于 2012-04-29T21:16:04.407 回答
0

将 webapp 依赖的库 JAR 文件放在其/WEB-INF/lib文件夹中。该文件夹默认包含在 webapp 的运行时类路径中。

于 2012-04-30T19:53:09.997 回答