我有點卡住的書斯卡拉在行動現在開始第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
謝謝!
Servlet **'2.3' **!?你真的寫這個對Jetty 4.x(從1997年)?這個servlet規範在很多年前就已經退役了。 Jetty 9.2在Servlet規範3.1上(考慮升級你的'web.xml'。 – 2014-09-02 13:36:49
更改web.xml並不能解決問題。 – Marin 2014-09-02 14:12:09