Servlet抛出异常

时间:2012-04-29 18:03:05

标签: java servlets

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

2 个答案:

答案 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的运行时类路径覆盖。