1

finatra で html ファイルを返そうとしましたが、ファイル自体は正常に読み込まれましたが、すべてのアセットを読み込むことができず、css、ico、および js が含まれています。ブラウザの応答 404: リソースを読み込めません。
ページの下部にあるドキュメントを見つけます:
-com.twitter.finatra.config.assetPath='/public': アセットへのパス

public フォルダーをsrc/main/resources/publicの下に置きましたが、失敗しました。:-(

私のコードは次のように単純です:

class Login extends Controller {

  get("/signin") { request: Request =>
    val content = Source.fromURL(getClass.getResource("/forwardend/signin.html")).mkString
    response.created.html(content).toFuture
  }
}
4

3 に答える 3

0

私はいくつかの苦労でそれを解決しました:)
方法は、すべてのアセットを処理するコントローラーを追加することです。コードは次のとおりです。

import com.twitter.finagle.http.Request
import com.twitter.finatra.http.Controller

class Resources extends Controller {
  get("/assets/:*") { request: Request =>
    response.ok.file("/public/" + request.params("*"))
  }
}

参照 : http://twitter.github.io/finatra/user-guide/files/#file-server
また、以下のコードを使用してアセット パスを変更し、見栄えを良くしようとしましたが、失敗しました。したがって、「/ public /」をプレフィックスとしてファイルパスを設定する必要があります。より良い選択肢があれば、指摘してください、ありがとう。

  System.setProperty("com.twitter.finatra.config.assetPath", "src/main/resources/public")
  System.setProperty("local.doc.root", "src/main/resources/public")  

UPDATE
System.setProperty が機能しません。@Christopherありがとう思い出させてください。
Flag("doc.root",...) または Flag("local.doc.root",...) を設定する方法は次のとおり
です。 1. モジュールを定義します。

object AssetsPathConfigModule extends TwitterModule {
  val keyFileDoc = flag("local.doc.root", "./finatra/src/main/scala/com/myfinatra/public", "The key to use.") // file path
  val keyDoc = flag("doc.root", "/com/myfinatra/public/", "class path") // class path

//@Singleton
  @Provides
  def providesThirdPartyFoo: FileResolver = {
    new FileResolver("", keyDoc())
//  or new FileResolver(keyFileDoc(),"")
  }
}

2. モジュールを HttpServer のモジュール seq に追加します。

class HelloWorldServer extends HttpServer {
  override val modules = Seq(
    ...,
    AssetsPathConfigModule
  )
  ...
}
  1. リソースは次のように書くことができます

    class Resources extends Controller { get("/assets/: ") { request: Request => response.ok.file(request.params(" ")) } }

于 2016-01-23T15:04:39.547 に答える