2014-09-02 68 views
0

我有點卡住的書斯卡拉在行動現在開始第7章Scalaz +碼頭找不到網址

有一個示例應用程序建立在使用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 
    } 

Application類值的主要部分:

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依賴性,即提供碼頭:https://github.com/earldouglas/xsbt-web-plugin

謝謝!

+0

Servlet **'2.3' **!?你真的寫這個對Jetty 4.x(從1997年)?這個servlet規範在很多年前就已經退役了。 Jetty 9.2在Servlet規範3.1上(考慮升級你的'web.xml'。 – 2014-09-02 13:36:49

+0

更改web.xml並不能解決問題。 – Marin 2014-09-02 14:12:09

回答

0

我希望我能刪除這個問題。總而言之,我發現這個問題...... sbt編譯器使用了錯誤的源代碼文件......也就是說,因爲我沒有使用IDE,而是使用了Sublime Text 3 Beta,所以當我將文件移動到另一個位置時,Sublime將引用舊位置的文件留在內存中......所以當我編譯錯誤版本的文件時正在使用。一個noob錯誤。