1

以下のサーブレットクラスでは、TomcatサーバーにデプロイしているときにNoClassDefFoundError:antlr / RecognitionExceptionとNoClassDefFoundError:antlr/TokenStreamExceptionが発生します。*の付いたスター付きの線は、それを引き起こすものです。これらの行にコメントすると、簡単に展開できます。eclipseのビルドパスに必要な.jarファイルを含めました。

基本的に、以下のサーブレットでは、WebからJavaプログラムを呼び出したいと思います。コンソールからJavaコードを使用すると、エラーは発生せず、非常にうまく動作します。私の外部に含まれているjarファイルのほとんどについて、catalina.outはNoClassDefFoundを求めています。何かが足りないのですか、それともサーブレットの場合、外部jarクラスについてどこかに指定する必要がありますか?

前もって感謝します..

package i2r.hlt.iris;

import i2r.hlt.iris.utils.JSenti;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.antlr.v4.runtime.RecognitionException;

import antlr.TokenStreamException;



import es.upv.nlel.utils.FileIO;

public class UserInputServlet extends HttpServlet {

@Override
public void init(ServletConfig config) throws ServletException {
    ServletContext context = config.getServletContext();
    homeJsp = context.getRequestDispatcher("/WEB-INF/jsp/iris.jsp");

    ....

    ret.setIndexPath(index_path);

    try {
        ret.loadUtts();
        ret.loadDlgs();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

private RequestDispatcher homeJsp, userInput;
private Retrieval ret;

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {


    String input = req.getParameter("user");
    req.setAttribute("message", input);

    homeJsp.forward(req, resp);
}

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException{


    String input = req.getParameter("user");

    List<String> list = new ArrayList<String>();
    list.add(input);

    Add add = new Add();
    String out = null;

/*******            try {
*****           out = "IRIS: " + FileIO.fileToString(new File(ret.uttMap.get(ret.selectBestUtt(list))));
*****           } catch (antlr.RecognitionException e) {
*****               throw new ServletException(e);
*****           }catch (TokenStreamException e) {
*****           throw new ServletException(e);
*****           }*/

    req.setAttribute("message", out);
    homeJsp.forward(req, resp);
}
}
4

1 に答える 1

1

ANTLR v2 ライブラリを Tomcat の lib フォルダーに配置する必要があります (コメントを参照)。Java は特定のディレクトリでライブラリを検索します。使用するライブラリは、Java/Tomcat によって検出されるこれらのディレクトリのいずれかにある必要があります。

Eclipse に依存関係を自動的にデプロイさせたい場合は、これが役立つかもしれません。

Eclipse Web プロジェクトの依存関係

于 2013-02-08T09:18:46.037 に答える