Мы будем использовать спрей-сервлет для создания файла нашего API. Таким образом, мы можем запустить его на сервере приложений Java. Я предполагаю, что у нас уже есть работающий REST API. Нам понадобится файл web.xml в каталоге src / main / webapp / WEB-INF /:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<? xml version = "1.0" ?> < web-app > < 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 > </ web-app > |
Нам нужен плагин sbt для построения войн. Добавьте это в project / plugins.sbt:
1
|
addSbtPlugin( "com.earldouglas" % "xsbt-web-plugin" % "1.0.0" ) |
Мы добавим зависимости к build.sbt, а также дополнительные задачи:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
name := "exampleAPI" version := "1.0" scalaVersion := "2.11.2" libraryDependencies ++= { val akkaVersion = "2.3.6" val sprayVersion = "1.3.2" Seq( "io.spray" %% "spray-can" % sprayVersion, "io.spray" %% "spray-servlet" % sprayVersion, //We need spray-servlet "io.spray" %% "spray-routing" % sprayVersion, "io.spray" %% "spray-json" % "1.3.1" , "io.spray" %% "spray-testkit" % sprayVersion % "test" , "org.scalatest" %% "scalatest" % "2.2.4" % "test" , "com.typesafe.akka" %% "akka-actor" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % "test" , "com.typesafe.akka" %% "akka-slf4j" % akkaVersion, "ch.qos.logback" % "logback-classic" % "1.1.2" ) } //This adds tomcat dependencies, you can also use jetty() tomcat() |
Нам нужно расширить Spray.servlet.WebBoot:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
import akka.actor.{Props, ActorSystem} import spray.servlet.WebBoot // this class is instantiated by the servlet initializer // it needs to have a default constructor and implement // the spray.servlet.WebBoot trait class Boot extends WebBoot { //we need an ActorSystem to host our application in implicit val system = ActorSystem( "SprayApiApp" ) //create apiActor val apiActor = system.actorOf(Props[ApiActor], "apiActor" ) // the service actor replies to incoming HttpRequests val serviceActor = apiActor } |
И добавьте ссылку на этот класс в application.conf:
1
2
3
|
spray.servlet { boot- class = “Boot” } |
Теперь мы можем запустить sbt package
чтобы построить войну. А в sbt используйте container:start
для запуска сервера tomcat с нашим приложением. И container:stop
чтобы остановить это.
Хороший способ перезагрузить сервер каждый раз, когда мы меняем код:
1
|
~container:start |
Ссылка: | Создание войны с помощью спрей-сервлета от нашего партнера по JCG Таммо Сминии в блоге JDriven . |