【问题标题】:Scalaz + Jetty url not foundScalaz + Jetty 网址未找到
【发布时间】:2014-09-03 02:13:20
【问题描述】:

我现在对第 7 章的 Scala in Action 这本书有点坚持。

书中有一个使用 Jetty Server 和 Scalaz 构建的示例应用程序。关键是一旦启动 Jetty 服务器并将 GET 请求发送到特定 url,Scalaz 应该在 MethodParts 提取器对象的帮助下使用模式匹配。

但是,每当我尝试访问该网址时,结果都是 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>

提供 Jetty 的库依赖:https://github.com/earldouglas/xsbt-web-plugin

谢谢!

【问题讨论】:

  • Servlet 2.3 !?您真的是针对 Jetty 4.x(从 1997 年开始)编写的吗?那个 servlet 规范在很多年前就被淘汰了。 Jetty 9.2 在 Servlet 规范 3.1 上(考虑升级您的 web.xml
  • 更改 web.xml 并不能解决问题。

标签: scala jetty sbt scalaz


【解决方案1】:

我希望我可以删除这个问题。总而言之,我发现了问题...... sbt 编译器使用了错误的源代码文件......也就是说,因为我没有使用 IDE,而是使用 Sublime Text 3 Beta,当我将文件移动到另一个位置时, Sublime 将文件留在内存中并引用旧位置......所以当我编译时使用了错误版本的文件。一个菜鸟的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2014-03-28
    • 2020-12-05
    相关资源
    最近更新 更多