3

我有一个基于 Spray + akka 的应用程序。使用本指南:

http://sysgears.com/articles/building-rest-service-with-scala/

它解释了这个例子:https ://github.com/oermolaev/simple-scala-rest-example

该应用程序运行良好。但是当尝试在 webServer 上部署时,我没有找到办法。

我尝试使用 xsbt-web-plugin 在 Tomcat 上部署,得到以下输入:

 ~container:start

[信息] 启动服务器 ... 添加目标/webapp 的上下文 ...

启动服务 Tomcat 启动 Servlet 引擎:

Apache Tomcat/7.0.34 org.apache.catalina.startup.ContextConfig

getDefaultWebXmlFragment 信息:未找到全局 web.xml

org.apache.coyote.AbstractProtocol 开始信息:开始

协议处理程序 ["http-nio-8080"]

但是 Tomcat 对所有请求都返回 404。

有人知道如何在 Tomcat 上部署喷雾 akka 应用程序吗?

4

1 回答 1

1

解决了这个问题。

这是使 xsbt-plugin 与喷雾应用程序一起工作所需要的:

  1. root-path在 application.conf 中设置

正如@jrudolph 指出的那样:喷雾servlet 不知道在tomcat 上自动解决:

spray.servlet {
   boot-class = "com.sysgears.example.boot.Boot"
   root-path = "/rest"
   request-timeout = 10s
 } 
  1. 更改类boot以扩展webBoot

引导.scala

class Boot extends WebBoot {
  // create an actor system for application

  val system = ActorSystem("rest-service-example")

  // create and start rest service actor

  val serviceActor = system.actorOf(Props[RestServiceActor], "rest-endpoint")
}
  1. 按照 xsbt-web-plugin 中的说明添加 web.xml:

    src/main/webapp/WEB-INF/web.xml:

    <listener>
        <listener-class>spray.servlet.Initializer</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>SprayConnectorServlet</servlet-name>
        <servlet-class>spray.servlet.Servlet30ConnectorServlet</servlet-class>
        <async-supported>true</async-supported>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>SprayConnectorServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

有关完整更改,请参见 github 上的比较(示例作者已慷慨地为 tomcat 用户生成此分支)

https://github.com/oermolaev/simple-scala-rest-example/compare/spray-tomcat

于 2015-04-28T08:01:50.400 回答