0

これは、solr インデックスのクエリに使用しているサーブレット コードです。

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: サーブレットの実行が例外の根本原因をスローしました

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

コンパイルするときは、すべての依存ライブラリをクラスパスに適切に含めます。

実行に使用されるクラスパスは、まったく異なる獣です。サーブレットが実行されているときに、サーブレットがjarにアクセスできることを確認する必要があります。その方法は、使用しているコンテナによって異なります。Tomcatなので、サードパーティのライブラリを追加する方法を簡単に見つける(Webを検索する)必要があります(jarをcommon / libディレクトリにダンプできることは間違いありません)。

サーブレットクラスの手動コンパイルとは異なるビルドプロセスを使用するのが最善です。たとえば、IDEまたはMaven-war / web-applicationを生成し、それをサーブレットコンテナ(この場合はtomcat)にデプロイします。手動でコンパイルしてデプロイするのではなく、これを行うことを強くお勧めします(IDEを使用できるようになり、デプロイメントをより巧みに行えるようになったら、手動デプロイメントに戻ることができます)。

たぶんインターネットでサーブレットとTomcatのチュートリアルを検索しますか?

于 2012-04-29T21:16:04.407 に答える
0

webapp が依存するライブラリ JAR ファイルをその/WEB-INF/libフォルダーに配置します。そのフォルダーは、デフォルトで Web アプリケーションのランタイム クラスパスによってカバーされます。

于 2012-04-30T19:53:09.997 に答える