ScalaTra(一)简单搭建以及jetty部署

  • scala 2.12.4
  • sbt 0.14.6
  • scalatra 2.6.2
  • 开发工具 vim

参考自:
http://scalatra.org/getting-started/first-project.html
http://scalatra.org/guides/2.4/deployment/standalone.html

  • ./build.sbt
val ScalatraVersion = "2.6.2"

organization := "com.example"

name := "My Scalatra Web App"

version := "0.1.0-SNAPSHOT"

scalaVersion := "2.12.4"

resolvers += Classpaths.typesafeReleases

libraryDependencies ++= Seq(
  "org.scalatra" %% "scalatra" % ScalatraVersion,
  "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test",
  "ch.qos.logback" % "logback-classic" % "1.1.5" % "runtime",
  "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided",                                                                              
  "org.eclipse.jetty" % "jetty-webapp" % "9.2.15.v20160210" % "container;compile"
)
enablePlugins(SbtTwirl)
enablePlugins(ScalatraPlugin)
  • ./project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.3.12")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")//sbt的assembly打包插件支持
addSbtPlugin("org.scalatra.sbt" % "sbt-scalatra" % "1.0.1") 
  • 创建jetty启动器
  1 package com.example.app    
  2                            
  3 import org.eclipse.jetty.server.Server 
  4 import org.eclipse.jetty.servlet.{DefaultServlet, ServletContextHandler}
  5 import org.eclipse.jetty.webapp.WebAppContext
  6 import org.scalatra.servlet.ScalatraListener
  7 
  8 object JettyLauncher { // this is my entry object as specified in sbt project definition                                                 
  9   def main(args: Array[String]) { 
 10     val port = if(System.getenv("PORT") != null) System.getenv("PORT").toInt else 8080
 11 
 12     val server = new Server(port)   
 13     val context = new WebAppContext()
 14     context setContextPath "/"
 15     context.setResourceBase("src/main/webapp")
 16     context.addEventListener(new ScalatraListener)
 17     context.addServlet(classOf[MyScalatraServlet], "/*")
 18     context.addServlet(classOf[LoginServlet], "/login")
 19     server.setHandler(context)
 20       
 21     server.start
 22     server.join            
 23   }
 24 }
  • LoginServlet.scala
  1 package com.example.app    
  2                            
  3 import org.scalatra._      
  4 
  5 class LoginServlet extends ScalatraServlet {
  6 
  7   get("/") {               
  8     println("Test")        
  9     "Hi LoginServlet:GET!\n"                                                                                                             
 10   } 
 11       
 12 }
  • MyScalatraServlet.scala
  1 package com.example.app    
  2                                                                                                                                          
  3 import org.scalatra._
  4 import java.util.concurrent.TimeUnit
  5 
  6 class MyScalatraServlet extends ScalatraServlet {
  7 
  8   get("/") {
  9     TimeUnit.SECONDS.sleep(3)
 10     "Hi MyScalatraServlet:GET!\n"
 11   }
 12 
 13 }

ScalatraBootstrap.scala

import com.example.app._
import org.scalatra._
import javax.servlet.ServletContext
import com.example.app.MyScalatraServlet
import com.example.app.LoginServlet

class ScalatraBootstrap extends LifeCycle {
  override def init(context: ServletContext) {
    context.mount(new MyScalatraServlet, "/*")
    context.mount(new LoginServlet, "/login")
  }
}
  • 运行
[root@xxy-srv-test-01 my-scalatra-web-app]# sbt
[info] Loading settings from plugins.sbt ...
[info] Loading project definition from /data1/taohui/hi_scala/my-scalatra-web-app/project
[info] Loading settings from build.sbt ...
[info] Set current project to My Scalatra Web App (in build file:/data1/taohui/hi_scala/my-scalatra-web-app/)
[info] sbt server started at 127.0.0.1:5741
sbt:My Scalatra Web App> 
sbt:My Scalatra Web App> jetty:start
[info] Updating {file:/data1/taohui/hi_scala/my-scalatra-web-app/}my-scalatra-web-app...
[info] Done updating.
[info] starting server ...
2017-12-26 15:54:39.445:INFO::main: Logging initialized @185ms to org.eclipse.jetty.util.log.StdErrLog
[success] Total time: 3 s, completed Dec 26, 2017 3:54:39 PM
2017-12-26 15:54:39.456:INFO:oejr.Runner:main: Runner
sbt:My Scalatra Web App> 2017-12-26 15:54:39.679:INFO:oejs.Server:main: jetty-9.4.6.v20170531
2017-12-26 15:54:41.777:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=1806ms
2017-12-26 15:54:42.174:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2017-12-26 15:54:42.174:INFO:oejs.session:main: No SessionScavenger set, using defaults
2017-12-26 15:54:42.178:INFO:oejs.session:main: Scavenging every 600000ms
15:54:42.247 [main] INFO  o.scalatra.servlet.ScalatraListener - The cycle class name from the config: ScalatraBootstrap
15:54:42.600 [main] INFO  o.scalatra.servlet.ScalatraListener - Initializing life cycle class: ScalatraBootstrap
2017-12-26 15:54:42.804:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@5d3411d{/,file:///data1/taohui/hi_scala/my-scalatra-web-app/target/webapp/,AVAILABLE}{file:///data1/taohui/hi_scala/my-scalatra-web-app/target/webapp/}
2017-12-26 15:54:42.824:INFO:oejs.AbstractConnector:main: Started ServerConnector@306cf3ea{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2017-12-26 15:54:42.825:INFO:oejs.Server:main: Started @3568ms
jetty:start
  • jetty容器独立部署 [sbt-shell窗口下]
    使用sbt的assembly进行项目打包
[info] SHA-1: b2ce657adc3335fe018621166ef763419031cb9c
[info] Packaging /data1/taohui/hi_scala/my-scalatra-web-app/target/scala-2.12/My Scalatra Web App-assembly-0.1.0-SNAPSHOT.jar ...
[info] Done packaging.
[success] Total time: 9 s, completed Dec 26, 2017 3:55:24 PM
sbt:My Scalatra Web App> 
  • 备注
    jetty容器上运行,需要添加对应的jetty依赖和sbt的assembly插件支持,配置明细见上,输出jar包后直接java -jar <jar_name>.jar,即可运行。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342