2016-12-16 7 views
2

Я хочу использовать akka-http, как http-сервер (например, tomcat или nginx-сервер).
с помощью этого простого кода может загружать источники html из веб-браузеров, но не может загружать другой источник, связанный с файлом html.Akka-Http load css & js resources

import akka.actor.ActorSystem 
import akka.http.scaladsl.Http 
import akka.http.scaladsl.server.Directives._ 
import akka.stream.ActorMaterializer 

import scala.io.StdIn 

object MainRunner extends App { 

    implicit val system = ActorSystem("mySystem") 
    implicit val materializer = ActorMaterializer() 
    implicit val ec = system.dispatcher 

    val staticResources = 
    get { 
     path("admin") { 
      getFromResource("admin/index.html") 
     } ~ pathPrefix("admin") { 
     getFromResourceDirectory("admin") 
     } 
    } 

    val bindingFuture = Http().bindAndHandle(staticResources, "localhost", 8080) 

    println(s"Server online at http://localhost:8080/\nPress RETURN to stop...") 
    StdIn.readLine() // let it run until user presses return 
    bindingFuture 
    .flatMap(_.unbind()) // trigger unbinding from the port 
    .onComplete(_ => system.terminate()) // and shutdown when done 
} 

это мой HTML-файл:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
    <link rel="stylesheet" href="main.css"> 
</head> 
<body> 
<h1>Admin area</h1> 
</body> 
</html> 

и получить эту ошибку в браузере: enter image description here
Это структура каталогов:
enter image description here

Как можно решить эту проблему?

ответ

2

Вам потребуются свой маршрут, чтобы добавить завершающий слэш при ударе статических путей ресурсов. Директива redirectToTrailingSlashIfMissing должна сделать трюк:

val staticResources = 
    (get & pathPrefix("admin")){ 
     (pathEndOrSingleSlash & redirectToTrailingSlashIfMissing(TemporaryRedirect)) { 
     getFromResource("admin/index.html") 
     } ~ { 
     getFromResourceDirectory("admin") 
     } 
    } 
0

Вам необходимо следующей директива

get { 
    getFromResourceDirectory("admin") 
}