2017-06-02 6 views
0

私はakka http routes dslなどでScala上で簡単なWebサーバーを実装しています。私は、(例えば)持っている:Akka HTTPレスポンスhtml文字列、反復的なCSSまたは画像リンク

いくつかの値でそれを注入し、いくつかのHTMLテンプレートを読み込み、クラスをViewTemplateisおそらくの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) 
} 

すべて、この作品のように、いくつかの変換とリターンを作る

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

私が追加するまでうまくいく。

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

test.htmlの頭に。ブラウザはこのrefsをまったく無視します。画像と同じもので同じ状況。私は、このスプーンのようなものはこのケースをうまく処理し、私は別の自転車を発明していると思うが、私は根を探しているだけだ。だからあなたは何をアドバイスできますか?

+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、月またはそのあなたのユースケースに合わないことがあります。

関連する問題