내가 제 7 장Scalaz + 부두 URL이
지금 행동에 책 스칼라와 거의 붙어 찾을 수 없습니다 예를 들어 응용 프로그램이 부두 서버 및 Scalaz를 사용하여 책에 구축있다. 핵심은 Jetty 서버가 시작되고 GET 요청이 특정 URL로 보내지면 Scalaz는 MethodParts 추출기 객체의 도움으로 패턴 일치를 사용해야합니다. 내가 URL을 액세스하려고 할 때마다
그러나, 결과는 내가 SBT의 0.13.5 및 부두 버전 9.2.2.v20140723를 사용하여 오전 404
입니다. Scalaz의 버전은 6.0.3입니다. 그리고 Java 8을 실행하고 있습니다.
나는 무엇이 문제 일 수 있는지 궁금합니다. Scalaz가 패턴 일치를 사용하여 URL을 일치시키기 때문에이 책에서 배웠던 다른 구성은 필요하지 않습니다.
부두가 제대로 구성되지 않았습니까? 아니면 내가 놓친 다른 것?
코드의 일부와 일치하는 패턴 :
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 의존성 그 부두를 제공합니다 : https://github.com/earldouglas/xsbt-web-plugin
감사합니다.
서블릿 **'2.3' **!? Jetty 4.x (1997 년부터)에 대해이 글을 쓰고 있습니까? 그 서블릿 스펙은 수년 전에 폐기되었습니다. Jetty 9.2는 Servlet spec 3.1에있다. (당신의'web.xml을 업그레이드하는 것을 고려해라.) –
web.xml을 변경해도 문제가 해결되지 않는다. – Marin