Мы будем использовать спрей-сервлет для создания файла нашего 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 traitclass 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 . |