0

こんにちは、私は頭痛の種となる作業用の生産的な Web アプリケーションの開発バージョンを持っています。ログインすると、admin.jsp がフォルダー構造を表示しようとしているときに、次のエラーが発生します。

    org.apache.jasper.JasperException: Exception in JSP: /admin/admin.jsp:133

130:    GenDisplay display = null;
131:    if(null==oldDisplay || true==oldDisplay.checkIsOld()) {
132:        display = new GenDisplay(oldDisplay);
133:        display.genTree(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType(), user.getUID(), out);
134:        ((CompanySession)ppa).setGenDisplay(display);   
135:    } else {
136:        display = oldDisplay;


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

java.lang.NullPointerException
    ppa.admin.GenDisplay.getKey(GenDisplay.java:185)
    ppa.admin.GenDisplay.isOpen(GenDisplay.java:161)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:49)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57)
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57)
    ppa.admin.GenDisplay.genTree(GenDisplay.java:42)
    org.apache.jsp.admin.admin_jsp._jspService(admin_jsp.java:606)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

これは、エラーを生成するための行 606 コードブロック付近の admin_jsp.java です。

GenDisplay oldDisplay = ((CompanySession)ppa).getGenDisplay();
    GenDisplay display = null;
    if(null==oldDisplay || true==oldDisplay.checkIsOld()) {
        display = new GenDisplay(oldDisplay);
        display.genTree(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType(), user.getUID(), out);
        ((CompanySession)ppa).setGenDisplay(display);   
    } else {
        display = oldDisplay;
    }
    //out.println(((CompanySession)ppa).getRootOrdner());
    //
    int currentOrdner = ((CompanySession)ppa).getRootOrdner();
    int currentOrdnerType = ((CompanySession)ppa).getRootType();
    if(null!=oldDisplay) {
    currentOrdner = oldDisplay.getCurrentOrdner();
    currentOrdnerType = oldDisplay.getCurrentOrdnerType();
    } else {
        display.openOrdner(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType());
}

そこで、display.genTree() に渡された変数の 1 つが null であるとソートしました。それが NullPointerException の理由です。この開発は、実際の製品版から正確にコピーされたものですが、製品版ではなくここでエラーをスローするのはなぜですか? 私は困惑しています。誰かアイデアがありますか?前もって感謝します!

ps: Java版、Tomcat版、コンパイラ版を比較しました。両方の tomcat で同じ設定を再確立しました。mysql サーバーのバージョンと設定を比較しました。それらはほぼ同じバージョンと設定です。関連するソフトウェアとの大きなリリースの違いはありません。Tomcat (6,7) の新しいバージョンを試してみたところ、さまざまなエラーが発生したため、さらに混乱しました。私は webapp を書いたことがなく、Java も初めてなので、本当に助けが必要です。

4

1 に答える 1

0

問題は、生成されたサーブレット コードではありません。NPE は で発生し ppa.admin.GenDisplay.getKey(GenDisplay.java:185ます) 変数 (null) が逆参照されるため、185 行目で何が起こっているかを調べて、変数が設定されている場所を見つける必要があります。これをさかのぼると、dev と production の違い (環境変数やファイル システムのアクセス許可など) が表示されます。

于 2012-05-17T11:15:15.337 に答える