当前位置: 首页 > 工具软件 > Scalatra > 使用案例 >

Scalatra项目结构

岳昊空
2023-12-01

Scalatra项目结构

路径

推荐的项目结构如下

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

ScalatraServlet vs. ScalatraFilter

你可以继承两种基类来构造一个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 .

使用 ScalatraFilter :

  • 在同一个URL space中迁移老项目
  • 访问WAR中的静态资源而不是其他的servlet

使用ScalatraServlet :

  • 匹配带有前缀的routes .
  • 不确定用什么的时候!

Scalatra’s sbt 依赖

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 中.

 类似资料: