2013-05-21 7 views
2

У меня возникла проблема для встраивания Jetty в мое приложение RCP Eclipse.Встроенный Jetty в Eclipse RCP

В моем приложении RCP, когда пользователь нажимает кнопку, открывается браузер и отображается некоторая страница jsp. Файлы jsp находятся в разделенном каталоге, это веб-приложение, которое можно запустить в tomcat очень хорошо.

мне удалось это с в основной() метод, как это:

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. Затем я запустить приложение затмение, что я видел некоторые ошибки, как:

... 
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 [email protected]5[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 [email protected] 
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 up (я проверил, что порт используется javaw.exe), но все страницы возвращаются: ошибка HTTP 404. Веб-приложение не было успешно развернуто.

Я прочитал это: Embed Jetty in Eclipse RCP
Eclipse RCP plugin + embedded Jetty + JSF
https://stackoverflow.com/questions/12530256/eclipse-rcp-with-jetty-integration

Но я не могу найти ответ на мой вопрос.

Любая помощь будет воспринята !! Заранее спасибо.

+0

В журнале, который вы опубликовали, не содержится сообщений об ошибках. Уровень журнала установлен на «DEBUG», и вы опубликовали просто все классы и интерфейсы, загруженные загрузчиком классов. Сканируйте свои лог-файлы для реальных исключений и стеков. Во-вторых, попробуйте сначала запустить сервер Jetty с простым файлом index.html без приложения и проверить, можете ли вы получить доступ к этому файлу с помощью браузера. – Frank

+0

Привет, Франк, спасибо за ваш комментарий. Фактически, я не могу видеть информацию WARN/ERROR на моей консоли eclipse, вся информация о DEBUG. Для таких сообщений имеется 386 строк. Вы хотите иметь эти сообщения? (Я боюсь, что эта информация может смутить кого-то). Еще раз спасибо. –

+0

Затем выполните предлагаемый тест с простым .html. Если ваш JSP не может найти класс ссылок в его пути к классам, будет исключение ClassNotFoundException. – Frank

ответ

1

Чтобы начать работу с встроенным сервером причала, начните с самых простых уроков. Они помогут вам обслуживать один статический HTML-файл.

После того, как вы получили эту работу вы можете двигаться дальше расширять такие вещи, как обслуживание приложения.

+0

Спасибо, Фрэнк. Я выполнил эту работу с помощью этого 'context.addServlet (DefaultServlet.class,"/"); context.addServlet (JspServlet.class, "* .jsp"). setInitParameter ("classpath", "CLASSPATH_FOR_JSP_JARS"); '. 'DefaultServlet.class' служит для статических ресурсов, а' JspServlet.class' служит для файлов jsp. И нам нужно указать путь к классу jsp 'ServletHolder'. Некоторые примеры кода здесь 'http: // stackoverflow.com/ questions/13022024/serve-static-html-files-using-defaultservlet-on-embedded-jetty'. Еще раз спасибо, Фрэнк! –