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

查看:318
本文介绍了java.lang.NoClassDefFoundError:org / eclipse / wst / web / internal / deployables / IFlatDeployable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Servlet在Eclipse EE Juno中为Java EE创建的动态Web项目中不起作用。以下是从头开始:




  • 我下载了Eclipse EE(Juno),没有更改任何默认配置

  • 我下载了最新的Tomcat(7.0.30)

  • 在首选项>服务器>运行时环境中,我添加了新的Apache Tomcat v7.0

  • 我创建了名为UniBudget的新的动态Web项目(上下文根:预算

  • 添加新文件( index.jps with it works!里面)



在将项目添加到服务器并运行之后,我可以在屏幕上看到它的工作原理。所以,部署工作。




  • 接下来我添加了servlet文件( control.Controller.java ):

     包装控件; 

    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());
    }

    }


  • c $ c> index.jsp 看起来像这样,没有更多:

     < jsp:转发页=/ departments.do/> 


  • 当然 web.xml

     <?xml version =1.0encoding =UTF-8?> 
    < web-app xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
    xmlns =http://java.sun.com/xml/ns / javaeexmlns: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_IDversion =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定义 - >
    < servlet>
    < servlet-name> Do< / servlet-name>
    < servlet-class> control.Controller< / servlet-class>
    < / servlet>
    <! - servlet映射 - >
    < 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 在$ code> WEB-INF / classes 对吗?这就是我读的。所以:配置构建路径>来源标签>浏览> 我在 WEB-INF (<$ c $)中创建了 c>高级我链接到文件系统中的文件夹: ... / UniBudget / build / classes


  • 这是项目中的文件层次结构:







  • 我清理并构建UniBudget项目并重新发布到服务器。清理服务器。


  • 我以为我现在可以工作(我的意思是显示doGet() ())。但是,在控制台中,不是打印输出错误:

      HTTP状态404  -  /budget/departments.do 

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

    类型:状态报告

    消息:/budget/departments.do

    描述:请求的资源不可用。


  • 当我尝试直接访问 http: / localhost:8080 / budget / Controller (没有重定向从 index.jsp




    • 看起来Eclipse根本看不到servlet!可以请我指出我犯错误的地方吗?






      编辑:



      删除冗余注解( @WebServlet )后,会出现另一个错误:

        HTTP状态503  -  Servlet Do目前不可用

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

      类型状态报告

      消息Servlet Do当前不可用

      描述所请求的服务当前不可用。

      控制台出错:

        wrz 24,2012 9:34:15 PM org.apache.catalina.core.ApplicationDispatcher调用
      警告:Servlet Do当前不可用

      没有多少。但是这就是全部。






      编辑:


      $ b $我发现这里发生了另一个错误。我甚至不知道如何重新创建它,但至少这一个提供了一些更多的日志信息:

        HTTP状态500  - 在第3行处理JSP页面/index.jsp时发生异常

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

      类型:异常报告

      消息:在行3处理JSP页面/index.jsp时出现异常

      描述:服务器遇到内部错误阻止其实现此请求。

      异常:

      org.apache.jasper.JasperException:在第3行处理JSP页面/index.jsp时发生异常

      1:< ;%@ page language =javacontentType =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)


      根本原因:

      javax.servlet.ServletException :实例化servlet类控件的错误
      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.JspServletW rapper.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)


      根本原因:

      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(JspSer vletWrapper.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)






      编辑:



      项目右键单击<出口> WAR文件

        java.lang.NoClassDefFoundError:org / eclipse / wst / web / internal /可部署/ IFlatDeployable 
      在org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.getModuleParticipants(JavaEEComponentExportOperation.java:77)
      在org.eclipse.jst.j2ee.internal.archive.operations .JavaEEComponentExportOperation.getParticipants(JavaEEComponentExportOperation.java:43)
      在org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.createFlatComponentArchiver(JavaEEComponentExportOperation.java:91)
      在org.eclipse.jst .j2ee.internal.archive.operations.ComponentExportOperation.export(ComponentExportOperation.java:191)
      在org.eclipse.jst.j2ee.internal.archive.operations.ComponentExportOperation.execute(ComponentExportOperation.java:136)
      在org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl $ 1.run(DataModelPausibleOperationImpl.java:385)
      在org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
      在org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:410)
      在org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:360)
      在org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl。 doExecute(DataModelPausibleOperationImpl.java:247)
      在org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.executeImpl(DataModelPausibleOperationImpl.java:219)
      在org.eclipse.wst.common。 framework.internal.datamodel.DataModelPausibleOperationImpl.cacheThreadAndContinue(DataModelPausibleOperationImpl.java:89)
      在org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.execute(DataModelPausibleOperationImpl.java:207)
      在org.eclips $ org.eclipse.jface.operation.ModalContext $ ModalContextThread.run )


      解决方案


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




      糟糕。这是一个非常严重的错误,这个类是内部的Eclipse。这已经被报告为 Eclipse问题388698 ,但是不幸的是关闭了关闭为 WORKSFORME 。这似乎是一个环境/平台/配置的具体问题。我会考虑重新发布相同的问题以及尽可能详细的使用环境(OS make / version,JRE / JDK make / version,硬件规格等)。



      我个人没有尝试过Juno(我通常会等待SR1在冬天发布,以便涵盖所有主要的出牙问题),但是如果完全删除Eclipse安装并重新解压缩它不起作用,那么我建议尝试退回到以前的Eclipse版本,这是靛蓝SR2 。确保您下载适合您平台的版本(32位vs 64位)。


      Servlet not working in newly created Dynamic Web Project in Eclipse Juno for Java EE. Here is how it goes, from scratch:

      • I downloaded Eclipse EE (Juno), didn't change any of default config
      • I downloaded latest Tomcat (7.0.30)
      • In Preferences > Server > Runtime Environments I added new Apache Tomcat v7.0
      • I created new Dynamic Web Project called UniBudget (context root: budget)
      • I added new file (index.jps with "it works!" inside)

      At this moment after adding project to server and running it I could see "it works!" on screen. So, deployment works.

      • Next I added servlet file (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()");
            }
        
        }
        

      • I changed index.jsp to look like this, nothing more:

        <jsp:forward page="/departments.do"/>
        

      • And of course 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>
        

      • Generated .class files have to be in WEB-INF/classes right? That's what I read. So: Configure Build Path > Source tab > Browse > I created classes folder in WEB-INF (in Advanced I linked to folder in file system: ... /UniBudget/build/classes)

      • This is the file hierarchy in project:

      • I cleaned and built the UniBudget project and republished to server. Cleaned the server.

      • I thought I would work now (I mean displaying "doGet()" or "doPost()" in Console). But instead of printout in Console I got this error:

        HTTP Status 404 - /budget/departments.do
        
        --------------------------------------------------------------------------------
        
        type: Status report
        
        message: /budget/departments.do
        
        description: The requested resource is not available.
        

      • the same happens when I try to directly access http://localhost:8080/budget/Controller (without redirection from index.jsp)

      It looks like Eclipse could not see the servlet at all! Could you please point me where I make the mistake? I can't figure this out for hoours now.


      EDIT:

      After removing redundant annotation (@WebServlet), another error occurs:

      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.
      

      Error in console:

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

      Not much. But that's all.


      EDIT:

      I found yet another error taking place here. I'm not even sure how to recreate it, but at least this one provides some more log info:

      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)
      


      EDIT:

      Error during 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)
      

      解决方案

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

      Whoops. That's a pretty serious error, this class is namely internal to Eclipse. This has been reported once as Eclipse issue 388698, but this was unfortunately closed off as WORKSFORME. This seems to be an environment/platform/configuration specific problem after all. I'd consider re-posting the same issue along with as much as possible detail about the environment used (OS make/version, JRE/JDK make/version, hardware specs, etc).

      I have personally not tried Juno yet (I usually wait for a SR1 to be released around winter so that all major teething issues are covered), but if completely deleting the Eclipse installation and re-unzipping it doesn't work, then I'd suggest to try to step back to the previous Eclipse version, which is Indigo SR2. Make sure that you download the right version for your platform (32bit vs 64bit).

      这篇关于java.lang.NoClassDefFoundError:org / eclipse / wst / web / internal / deployables / IFlatDeployable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆