2014-09-02 3 views
0

Я теперь немного застрял с книгой Scala в действии по главе 7.Scalaz + Jetty URL не найден

Существует пример приложения построить в книге, которая использует Jetty сервер и Scalaz. Дело в том, что как только сервер Jetty запущен, и запрос GET отправляется на определенный URL-адрес, Scalaz должен использовать сопоставление шаблонов с помощью объекта экстрактора MethodParts.

Однако, когда я пытаюсь получить доступ к URL, то результат будет 404.

Я использую SBT 0.13.5 и пристани версии 9.2.2.v20140723. Версия Scalaz - 6.0.3. И я запускаю Java 8.

Мне было интересно, что может быть проблемой? Насколько я узнал из книги, никакой другой конфигурации не требуется, поскольку Scalaz использует сопоставление образцов для соответствия URL-адресам.

Может быть, что-то неправильно настроено с Jetty? Или что-то еще, что мне не хватает?

шаблон согласования часть кода:

def handle(implicit request: Request[Stream], servletRequest: HttpServletRequest): Option[Response[Stream]] = 

    request match { 
     case MethodParts(GET, "card" :: "create" :: Nil) => 
       Some(OK(ContentType, "text/html") << strict << CreateStory(param("message"))) 
     case _ => None 
    } 

Основная часть значения класса Применение:

val application = new ServletApplication[Stream, Stream]{ 

    def application(implicit servlet: HttpServlet, servletRequest: HttpServletRequest, 
     request: Request[Stream]) = { 
     def found(x: Iterator[Byte]): Response[Stream] = OK << x.toStream 
     handle | HttpServlet.resource(found, NotFound.xhtml) 
    } 
} 

файл web.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <!DOCTYPE web-app PUBLIC 
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
    <servlet> 
     <servlet-name>Scalaz</servlet-name> 
     <servlet-class> 
      scalaz.http.servlet.StreamStreamServlet 
      </servlet-class> 
     <init-param> 
      <param-name>application</param-name> 
      <param-value> 
       com.kanban.application.WeKanbanApplication 
      </param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Scalaz</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Librabry зависимость, которая обеспечивает Jetty: https://github.com/earldouglas/xsbt-web-plugin

Спасибо!

+0

Servlet ** '2.3' **!? Вы действительно пишете это против Jetty 4.x (с 1997 года)? Эта спецификация сервлетов была удалена много лет назад. Jetty 9.2 находится на спецификации сервлета 3.1 (подумайте об обновлении вашего 'web.xml'. –

+0

Изменение web.xml не решает проблему. – Marin

ответ

0

Желаю удалить этот вопрос. В общем, я нашел проблему ... в sbt-компиляторе использовался неправильный файл исходного кода ... то есть, поскольку я не использую IDE, а Sublime Text 3 Beta, когда я переместил файл в другое место , Sublime оставил файл в памяти со ссылкой на старое местоположение ... поэтому при компиляции использовалась неправильная версия файла. Ошибка noob.