Vaadin 7/8 и встроенный причал

Я хотел бы развернуть веб-приложение vaadin (версия 7.2.5), используя встроенную пристань (встроенная версия eclipse luna).

В настоящее время мой код выглядит так:

public class Launcher {
    private static int httpPort = 8080;

    public static void main(String[] args) throws Exception
    {
        Server server = new Server();
        SocketConnector connector = new SocketConnector();
        connector.setMaxIdleTime(1000 * 60 * 10);
        connector.setSoLingerTime(-1);
        connector.setPort(httpPort);
        connector.setReuseAddress(false);
        QueuedThreadPool pool = new QueuedThreadPool();
        pool.setMinThreads(10);
        pool.setMaxThreads(100);
        server.setConnectors(new Connector[] { connector });
        server.setThreadPool(pool);
        WebAppContext context = new WebAppContext();
        context.setServer(server);
        context.setContextPath("/");
        context.setWar("ReportWriter.war");
        context.setClassLoader(Thread.currentThread().getContextClassLoader());
        server.setHandler(context);
        try
        {
            server.start();
        } catch (Exception e) {
               e.printStackTrace();
        }
    }
}

Я скопировал его из ветки форума vaadin. Кажется, сервер запускается, и WAR действительно извлекается.

Указываю браузеру на http://localhost:8080/ вместо запуска приложения vaadin (версия 7.2.5), все, что я вижу, это:

localhost:8080

На всякий случай это может быть важно: Мое дерево каталогов проекта WAR в eclipse:

ReportWriter
|   .classpath
|   .project
|   ivy.xml
|   ivysettings.xml
|   
+---.settings
|       (...)
|       
+---build
|   \---classes
|       +---(...)
|       \---META-INF
|               persistence.xml
|               
+---src
|   +---(...)
|   \---META-INF
|           persistence.xml
|           
\---WebContent
    |   dropDDL.sql
    |   init.sql
    |   reportwriter.xml
    |   
    +---META-INF
    |       MANIFEST.MF
    |       
    +---VAADIN
    \---WEB-INF
        \---lib
                BorderLayout-0.5.jar
                confirmdialog-2.0.4.jar
                dawn-2.jar
                derby.jar
                derbynet.jar
                derbyrun.jar
                derbytools.jar
                messagebox-2.0.6.jar
                refresher-1.2.1.7.jar
                vaadin-jpacontainer-3.1.1-javadoc.jar
                vaadin-jpacontainer-3.1.1-sources.jar
                vaadin-jpacontainer-3.1.1.jar
                wizards-for-vaadin-1.0.1.jar

И один из моих проектов RRWunner (лаунчер):

RWRunner
|   .classpath
|   .project
|   ivy.xml
|   ivysettings.xml
|   ReportWriter.war  <-- The war file generated from the project above
|   test.txt
|   web.xml
|   
+---.settings
|       .jsdtscope
|       com.vaadin.integration.eclipse.prefs
|       org.eclipse.jdt.core.prefs
|       org.eclipse.wst.common.component
|       org.eclipse.wst.common.project.facet.core.xml
|       org.eclipse.wst.jsdt.ui.superType.container
|       org.eclipse.wst.jsdt.ui.superType.name
|       
+---build
|   \---classes
|       \---ch
|           \---darkspot
|               \---rwrunner
|                       Launcher.class
|                       
\---src
    \---ch
        \---darkspot
            \---rwrunner
                    Launcher.java

person Atmocreations    schedule 14.08.2014    source источник


Ответы (1)


Похоже, вам каким-то образом не хватает конфигурации сервлета, необходимой для сопоставления /* с веб-приложением Vaadin. Кажется, есть web.xml, который должен позаботиться об этом, но убедитесь, что содержимое относится к правильным классам Servlet/UI и URI.

В качестве альтернативы отображению в web.xml вы можете иметь сервлет с аннотациями @WebServlet в своем классе пользовательского интерфейса (при использовании JSR 315):

@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyDemoUI.class)
public static class Servlet extends VaadinServlet {
}

Кроме того, приведенная выше структура WAR выглядит подозрительно (хотя список каталогов на снимке экрана браузера выглядит нормально). Убедитесь, что классы находятся под /WEB-INF/classes/, чтобы быть видимыми для контейнера сервлета. А также этот файл web.xml в каталоге /WEB-INF.

person eeq    schedule 15.08.2014
comment
ты был прав. Курсов не было в папке WEB-INF/classes. Теперь я переместил их, но, похоже, он не находит класс, который я упоминаю в моем web.xml. Может быть, что-то не так с classpath? - person Atmocreations; 21.08.2014