2014-02-02 5 views
6

Я не понимаю, как я могу переписать этот код, используемый с причалом 6 для причала 9:Embedded Jetty 9

import org.mortbay.jetty.*; 
import org.mortbay.jetty.nio.SelectChannelConnector; 
import org.mortbay.jetty.webapp.WebAppContext; 

public class ApplLauncher { 
    public static void main(String[] args) { 
     Server server = new Server(); 

     Connector connector = new SelectChannelConnector(); 
     connector.setPort(8080); 
     server.addConnector(connector); 

     WebAppContext root = new WebAppContext("C:\\Users\\OZKA\\IdeaProjects\\projectname\\projectname\\web", "/"); 
     root.setWelcomeFiles(new String[]{"index.html"}); 
     //root.addServlet(new ServletHolder(new TestServlet()), "/test"); 

     server.setHandlers(new Handler[]{root}); 

     try { 
      server.start(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

Код выше работает отлично и ответ статического контента из веба-папки и сервлет, отображенный в сети .xml. Вот мои попытки использовать причал 9 поместить его:

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.webapp.WebAppContext; 
import org.eclipse.jetty.server.handler.ResourceHandler; 
import org.eclipse.jetty.server.handler.HandlerList; 
import org.eclipse.jetty.server.Handler; 


public class ApplLauncher { 
    public static void main(String[] args) { 
     System.out.println("Hello from ScalaSbt Web Project"); 
     Server server = new Server(8080); 
     WebAppContext webapp = new WebAppContext("D:\\Dev\\Scala\\ScalaTestProject\\web\\", "/"); 
     ResourceHandler resource_handler = new ResourceHandler(); 
     resource_handler.setWelcomeFiles(new String[]{ "index.html" }); 
     HandlerList handlers = new HandlerList(); 
     handlers.setHandlers(new Handler[] { resource_handler, webapp}); 
     server.setHandler(handlers); 
     try { 
      server.start(); 
      server.join(); 
     } 
     catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

Сервер начинает, но index.html запрос бросает ошибку:

"java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z" 

Я пытался найти рабочий пример в Google, но ничего не нашел полезно. Официальные образцы и документация очень сбивают с толку, и я не понимаю, как я могу использовать встроенную версию причала 9.

+0

Как вы создаете и запускаете это приложение? Из вашего кода, похоже, вы используете SBT? В каком случае вы можете показать нам свой файл build.sbt? – andersschuller

+0

Я просто запускаю AppLauncher в Idea IDE, SBT, используя только для управления зависимостями. – OZKA

ответ

9

Сообщение об ошибке ясно указывает, что у вас неправильная версия API сервлета в вашем пути к классам.

Проверьте свои зависимости, вероятно, у вас есть API-сервлет до 3.0, он должен быть удален.

+0

большое спасибо, я удалил в ProjectSettings/Modules/Dependencies javax-servlet api 2.4, и на сервере отобразилась моя индексная страница. – OZKA

0

Добавление на то, что @axtavt сказал: если вы используете Maven добавить следующий depedency:

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>3.0-alpha-1</version> 
     <scope>provided</scope> 
</dependency> 

сделать также с mvn dependency:tree |grep servlet и дважды проверьте, что у вас нет сервлет-API: 2.x импортируемого.

0

Если вы используете Gradle Выполнить

gradle dependencies 

анализа дерева зависимостей и исключить «сервлет-апи» зависимостей с версией ниже 3.0. Вы можете сделать следующее, чтобы исключить

compile ('javax.servlet:jsp-api:2.0'){ 
    exclude module : 'servlet-api' 
} 

Там может быть несколько зависимостей, которые дополнительно включают в себя сервлет-Апи-2.x. Исключить все эти

Смежные вопросы