2017-06-02 49 views
0

我在Scala上實現一個簡單的Web服務器與AKK http路由DSL等。我有(例如):Akka HTTP響應HTML字符串與循環的CSS或圖像鏈接

val route = get { 
    path("test") { 
     complete((new ViewTemplate).response) 
    } 
} 

凡ViewTemplateis類誰讀一些HTML模板,一些價值注入它可能使一些轉換和收益作爲HttpResponse對象...

class ViewTemplate(val filename: String = "test.html") { 
    import scala.io.Source 
    private val template = Source.fromResource(filename) 
    override def toString: String = template.mkString 
    def entity: ResponseEntity = HttpEntity(ContentTypes.`text/html(UTF-8)`, toString) 
    def response: HttpResponse = HttpResponse(entity = entity) 
} 

這一切的作品直到我加入

<link rel="stylesheet" href="style.css"/> 

into test.html的頭部。瀏覽器完全忽略了這個參考。與圖像和a的東西相同的情況。我想,像遊戲噴劑這樣的事情處理這種情況很好,我正在發明另一輛自行車,但我只是在尋找根。那麼你有什麼建議?

+0

這個問題已經關閉。 getFromResourceDirectory(「」)發揮了魔力。 –

回答

1

要添加一個解釋,你有什麼只有服務生成的模板,它不提供任何其他路徑,這意味着當您的瀏覽器要求「http://yourserver/style.css」服務器將回復404找不到,因爲有沒有爲「/style.css」定義的路由。

在Akka HTTP(以及Spray)中,您必須明確定義您希望Web服務器執行的所有操作的路由。但是,您可以定義從請求中提取路徑並從文件系統提供相應文件的路由。

你可以看到這個頁面的文檔對這樣的各種指令:http://doc.akka.io/docs/akka-http/10.0.7/scala/http/routing-dsl/directives/file-and-resource-directives/index.html

注意getFromResourceDirectory,你已經找到自己,從classpath提供的文件和文件系統不直接,這可能是可能不適合你的用例。