0

Java EE 用の Eclipse Juno で新しく作成された動的 Web プロジェクトでサーブレットが機能しない。最初から、次のようになります。

  • Eclipse EE (Juno) をダウンロードしましたが、デフォルトの設定は何も変更していません
  • 最新の Tomcat (7.0.30) をダウンロードしました
  • [設定] > [サーバー] > [ランタイム環境]で、新しい Apache Tomcat v7.0 を追加しました
  • UniBudget という新しい動的 Web プロジェクトを作成しました (コンテキスト ルート: budget)
  • 新しいファイルを追加index.jpsしました( 「it works!」が含まれています)

この時点で、プロジェクトをサーバーに追加して実行した後、 「動作する」ことがわかりました。画面上で。したがって、展開は機能します。

  • 次に、サーブレット ファイル ( control.Controller.java)を追加しました。

    package control;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet({ "/Controller", "*.do" })
    public class Controller extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public Controller() {
            super();
        }
    
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doGet()");
        }
    
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            System.out.println("doPost()");
        }
    
    }
    
  • index.jsp私は次のように変更しました。

    <jsp:forward page="/departments.do"/>
    
  • そしてもちろんweb.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
        <display-name>UniBudget</display-name>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
                <welcome-file>default.html</welcome-file>
                <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
    
        <!-- servlet definition -->
        <servlet>
            <servlet-name>Do</servlet-name>
            <servlet-class>control.Controller</servlet-class>
        </servlet>
        <!-- servlet mapping -->
        <servlet-mapping>
            <servlet-name>Do</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Do</servlet-name>
            <url-pattern>/Controller</url-pattern>
        </servlet-mapping>
    </web-app>
    
  • 生成.classされたファイルはWEB-INF/classes正しくなければなりませんか? それが私が読んだものです。だから:Configure Build Path > Source tab > Browse >私はclassesフォルダを作成しましたWEB-INFAdvancedファイルシステムのフォルダにリンクしました... /UniBudget/build/classes:)

  • これはプロジェクト内のファイル階層です:

プロジェクト内のファイル階層

  • UniBudget プロジェクトをクリーンアップしてビルドし、サーバーに再公開しました。サーバーをクリーンアップしました。

  • これで作業できると思いました (コンソールに「doGet()」または「doPost()」を表示することを意味します)。しかし、コンソールで印刷する代わりに、次のエラーが発生しました。

    HTTP Status 404 - /budget/departments.do
    
    --------------------------------------------------------------------------------
    
    type: Status report
    
    message: /budget/departments.do
    
    description: The requested resource is not available.
    
  • http://localhost:8080/budget/Controller(からのリダイレクトなしでindex.jsp)直接アクセスしようとすると同じことが起こります

Eclipse がサーブレットをまったく認識できなかったようです。どこで間違いを犯したか教えてください。私は今、何時間もこれを理解できません。


編集:

冗長な注釈 ( @WebServlet) を削除すると、別のエラーが発生します。

HTTP Status 503 - Servlet Do is currently unavailable

--------------------------------------------------------------------------------

type Status report

message Servlet Do is currently unavailable

description The requested service is not currently available.

コンソールのエラー:

wrz 24, 2012 9:34:15 PM org.apache.catalina.core.ApplicationDispatcher invoke
WARNING: Servlet Do is currently unavailable

あまりない。しかし、それだけです。


編集:

ここでさらに別のエラーが発生していることがわかりました。再作成する方法さえわかりませんが、少なくともこれはいくつかのログ情報を提供します:

HTTP Status 500 - An exception occurred processing JSP page /index.jsp at line 3

--------------------------------------------------------------------------------

type: Exception report

message: An exception occurred processing JSP page /index.jsp at line 3

description: The server encountered an internal error that prevented it from fulfilling this request.

exception: 

org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 3

1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2:     pageEncoding="UTF-8"%>
3: <jsp:forward page="/departments.do"/>


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause: 

javax.servlet.ServletException: Error instantiating servlet class control.Controller
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746)
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:65)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause: 

java.lang.ClassNotFoundException: control.Controller
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746)
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:65)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

編集:

中のエラーproject right click > Export > WAR file:

java.lang.NoClassDefFoundError: org/eclipse/wst/web/internal/deployables/IFlatDeployable
    at org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.getModuleParticipants(JavaEEComponentExportOperation.java:77)
    at org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.getParticipants(JavaEEComponentExportOperation.java:43)
    at org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.createFlatComponentArchiver(JavaEEComponentExportOperation.java:91)
    at org.eclipse.jst.j2ee.internal.archive.operations.ComponentExportOperation.export(ComponentExportOperation.java:191)
    at org.eclipse.jst.j2ee.internal.archive.operations.ComponentExportOperation.execute(ComponentExportOperation.java:136)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl$1.run(DataModelPausibleOperationImpl.java:385)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:410)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:360)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.doExecute(DataModelPausibleOperationImpl.java:247)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.executeImpl(DataModelPausibleOperationImpl.java:219)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.cacheThreadAndContinue(DataModelPausibleOperationImpl.java:89)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.execute(DataModelPausibleOperationImpl.java:207)
    at org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard$1CatchThrowableRunnableWithProgress.run(DataModelWizard.java:220)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
4

2 に答える 2

3
java.lang.NoClassDefFoundError: org/eclipse/wst/web/internal/deployables/IFlatDeployable

おっと。これはかなり重大なエラーです。つまり、このクラスは Eclipse の内部クラスです。これはEclipse issue 388698として一度報告されましたが、残念ながら としてクローズされましWORKSFORMEた。結局、これは環境/プラットフォーム/構成固有の問題のようです。使用されている環境 (OS のメーカー/バージョン、JRE/JDK のメーカー/バージョン、ハードウェア仕様など) に関する可能な限りの詳細と共に、同じ問題を再投稿することを検討します。

個人的にはまだ Juno を試したことはありません (私は通常、冬頃に SR1 がリリースされるのを待って、すべての主要な歯が生える問題をカバーします)、Eclipse のインストールを完全に削除して再解凍してもうまくいかない場合は、Indigo SR2である以前の Eclipse バージョンに戻ることをお勧めします。お使いのプラットフォーム (32 ビットと 64 ビット) に適したバージョンをダウンロードしてください。

于 2012-09-24T20:15:46.283 に答える
0

私にとっては

java.lang.NoClassDefFoundError: org/eclipse/wst/web/internal/deployables/IFlatDeployable

次のプラグインが原因でエラーが発生しました。

WTP Patches for org.eclipse.jst.web_core.feature 3.4.0.v201207092049-20F8O7w312318212711

プラグインを無効にした後、Eclipseを使用してwarをパッケージ化し、デプロイすることができました。

(この解決策は、URLバグ388698から来ています-BalusCによって言及されたWARファイルのエクスポート中にエラーが発生しました)

于 2012-10-16T16:38:07.720 に答える