Play(一):搭建项目
2019-02-13 本文已影响0人
aix91
1. 项目结构
app/
<main Scala sources>
conf/
配置文件
routes(路由文件)
project/
build.properties
plugins.sbt (配置plugin)
Dependencies(object) (配置公用库)
Resolvers(object) (配置资源库)
sbt.build
2. build.sbt文件
sbt首先会读取该文件,创建模块,添加依赖..
- 创建项目
方式一:如果没有指定project的ID,则使用val的参数名当作project的ID
lazy val root = (project in file("."))
方式二:指定project ID
lazy val server = Project("server",file("server"))
- 设置公共的配置
lazy val commonSettings = Seq(
organization := "com.test",
version := "0.1.0",
scalaVersion := "2.12.8"
)
- enable PlayScala plugin, 引入MVC包
java MVC相关类在play包下;Scala MVC相关包在play.api包下
lazy val server = Project("server",file("server"))
.enablePlugins(PlayScala)
.settings(
resolvers ++= resolvers,
commonSettings,
basicSettings
)
3. plugins.sbt文件
在这个文件里,指定要添加的plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.5")
这个plugin会帮助sbt找到项目的入口(NettyServer)
4. routes 路由文件
- route可以将HttpRequest转换成Action.
- play可以根据routes文件和定义的controller生成ReverseRoutes文件
class ReverseHelloController(_prefix: => String) {
def _defaultPrefix: String = {
if (_prefix.endsWith("/")) "" else "/"
}
// @LINE:1
def hello(): Call = {
Call("GET", _prefix)
}
}
reverseController返回的Call,提供类HTTP 方法和URI。通过reverseController,我们可以在代码里面直接访问(Redirect)路由。
- play同时还会生成Routes类,该类继承了GeneratedRouter,并可以通过反射的方式执行controller里面的方法。
5. 错误处理
- GZIP format 问题
sbt clean,清除target文件 - RuntimeException: No application loader is configured
添加guice依赖