Eclipse RCP中的嵌入式码头

Eclipse RCP中的嵌入式码头,eclipse,classloader,rcp,embedded-jetty,Eclipse,Classloader,Rcp,Embedded Jetty,我在将Jetty嵌入EclipseRCP应用程序时遇到了一个问题 在我的RCP应用程序中,当用户单击某个按钮时,将打开一个浏览器并显示一些jsp页面。jsp文件位于一个单独的目录中,它是一个web应用程序,可以在tomcat中很好地运行 我在main()方法中管理了它,如下所示: import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; public class Simplest

我在将Jetty嵌入EclipseRCP应用程序时遇到了一个问题

在我的RCP应用程序中,当用户单击某个按钮时,将打开一个浏览器并显示一些jsp页面。jsp文件位于一个单独的目录中,它是一个web应用程序,可以在tomcat中很好地运行

我在main()方法中管理了它,如下所示:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class SimplestServer
{
    public static void main(String[] args) throws Exception
    {
      int port = 8080;
      Server server = new Server(port);
      String webapp = "D:/workspace/preview"; 
      WebAppContext context = new WebAppContext();
      context.setDefaultsDescriptor(webapp + "/WEB-INF/web.xml");

      // -------
      // Sorry! I add another question in one post, I think this might be some clue
      // If I do not use setDefaultsDescriptor, I got error like this:
      // java.io.FileNotFoundException: D:\BV\eUpgrade\testEnv\eclipse4-2\org\eclipse\jetty\webapp\webdefault.xml
      // Why it does not go to my web.xml, but goes to some path like: org\eclipse\jetty\webapp\webdefault.xml?
      // And in this case, when access to jsp files, got HTTP 503 error.
      // context.setDescriptor(webapp + "/WEB-INF/web.xml");
      // ------

      context.setResourceBase(webapp);
      context.setContextPath("/preview");
      context.setParentLoaderPriority(true);
      server.setHandler(context);

      try {
        server.start();
        server.join();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
}
如果只是在主方法中,它对我很有效。i、 例如,Jetty启动后,我可以访问我的web应用程序中的所有页面

但是当我把这个片段放到插件中时,它就不起作用了

我创建了一个示例EclipseRCP项目(使用邮件模板),并将上述代码放入我的Activator.java中。然后启动eclipse应用程序,我看到一些错误,如:

...
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded interface javax.servlet.Filter  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded interface javax.servlet.Filter from org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@2a49d3b5[javax.servlet:3.0.0.v201112011016(id=4)]  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Object  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Object from null  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class com.broadvision.ssp.webflow.SetCharacterEncodingFilter from WebAppClassLoader=855125537@32f82e21  
19:01:03.762 [main] DEBUG org.eclipse.jetty.servlet.Holder - Holding class com.broadvision.ssp.webflow.SetCharacterEncodingFilter  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Throwable  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Throwable from null  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Exception  
19:01:03.762 [main] DEBUG o.e.jetty.webapp.WebAppClassLoader - loaded class java.lang.Exception from null  
...
似乎只有WEB-INF\lib*.jar中的类可以加载,而JRE中的类在运行时无法加载

结果是:
Jetty服务器已启动(我检查了javaw.exe正在使用的端口),但所有页面都返回:HTTP404错误。web应用程序尚未成功部署

我读过:

但是我找不到我问题的答案


任何帮助都将被告知!!提前感谢。

要开始使用嵌入式jetty服务器,请从最基本的教程开始。这些将指导您提供单个静态HTML文件


一旦你完成了这项工作,你就可以继续扩展诸如服务应用程序之类的内容。

你发布的日志中不包含任何错误消息。日志级别设置为“DEBUG”,您发布的只是类加载器加载的所有类和接口。请扫描日志文件以查找真正的异常和堆栈跟踪。第二,首先尝试在没有应用程序的情况下使用简单的index.html文件运行jetty服务器,并检查您是否可以使用浏览器访问此文件。嗨,Frank,谢谢您的评论。事实上,我在eclipse控制台中看不到警告/错误信息,所有信息都是关于调试的。这类消息的行数多达386行。您想接收这些消息吗?(我担心这些信息会让人困惑)。再次感谢。然后先用一个简单的.html进行建议的测试。如果JSP在其类路径中找不到引用类,则会出现ClassNotFoundException。如果类路径出现问题,错误应该是500。谢谢Frank。“HTTP错误404”表示您的HTTP服务器正在侦听并接收请求,但无法传递请求的文件。这可能有两个原因:服务器无法访问该文件(是否在/web文件夹中?),或者键入了错误的URL。谢谢。我通过
context.addServlet(DefaultServlet.class,“/”)完成了这项工作;addServlet(JspServlet.class,“*.jsp”).setInitParameter(“classpath”,“classpath”用于jsp\u JARS)
DefaultServlet.class
用于静态资源,而
JspServlet.class
用于jsp文件。我们需要为jsp
ServletHolder
指定类路径。这里有一些示例代码
http://stackoverflow.com/questions/13022024/serving-static-html-files-using-defaultservlet-on-embedded-jetty
。再次感谢你,弗兰克!