推荐的项目结构如下
build.sbt <= 项目信息及依赖
project
|_build.properties <= sbt的版本信息
|_plugins.sbt <= 添加的sbt插件
src
|_ main
| |_ resources
| |_ logback.xml
| |_ scala
| | | |_ScalatraBootstrap.scala
| | |_org
| | |_ yourdomain
| | |_ projectname
| | |_ MyScalatraServlet.scala
| |_ twirl
| | |_layouts
| | |_default.scala.html
| | |_views
| | |_hello.scala.html
| |_ webapp
| |_ WEB-INF
| |_ web.xml
|_ test
|_ scala
|_ org
|_ yourdomain
|_ projectname
|_ MyScalatraServletTests.scala
项目结构其实与大部分的web框架都很类似
静态文件可以放在 webapp
文件夹
src
|_ main
|_ scala
| |_ Web.scala
|_ webapp
|_ WEB-INF
| |_ web.xml
|- stylesheets
| |_ default.css
|- images
|_ foo.jpg
你可以继承两种基类来构造一个Scalatra程序: ScalatraServlet
and ScalatraFilter
.
class YourServlet extends ScalatraServlet {
// your class here
}
vs.
class YourFilter extends ScalatraFilter {
// your class here
}
两者的区别在于没有route
时默认行为不同. A ScalatraFilter
会委派其他 filter 或者 servlet (比如配置在 web.xml
), 而 ScalatraServlet
会返回404.
另一个不同在于 ScalatraFilter
可以匹配 WAR中的路径. ScalatraServlet
匹配 servlet 的路径. 允许在同一个WAR
中使用不同命名空间的servlets
.
URL space
中迁移老项目WAR
中的静态资源而不是其他的servlet
routes
.build.sbt
file:
val ScalatraVersion = "2.7.0"
organization := "com.example"
name := "My Scalatra Web App"
version := "0.1.0-SNAPSHOT"
scalaVersion := "2.13.4"
resolvers += Classpaths.typesafeReleases
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test",
"ch.qos.logback" % "logback-classic" % "1.2.3" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "9.4.6.v20170531" % "container",
"javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided"
)
enablePlugins(SbtTwirl)
enablePlugins(JettyPlugin)
如果想添加其他依赖,添加到 libraryDependencies
中.