2

我在将 Jetty 嵌入到我的 Eclipse RCP 应用程序时遇到问题。

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

如果只是在主要方法中,它对我来说效果很好。即,在 Jetty 启动后,我可以访问我的网络应用程序中的所有页面。

但是当我将此片段放入我的插件时,它不起作用。

我创建了一个示例 eclipse rcp 项目(使用邮件模板),并将上面的代码放入我的 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 正在使用的端口),但所有页面都返回:HTTP 404 错误。Web 应用程序未成功部署。

我已阅读以下内容: 在 Eclipse RCP 中嵌入 Jetty
Eclipse RCP 插件 + 嵌入式 Jetty + JSF
https://stackoverflow.com/questions/12530256/eclipse-rcp-with-jetty-integration

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

任何帮助将不胜感激!!提前致谢。

4

1 回答 1

1

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

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

于 2013-05-21T13:01:56.053 回答