java.lang.NoClassDefFoundError:org / eclipse / wst / web / internal / deployables / IFlatDeployable [英] 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 inWEB-INF/classes
right? That's what I read. So:Configure Build Path > Source tab > Browse >
I createdclasses
folder inWEB-INF
(inAdvanced
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 fromindex.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屋!