2

私のbuild.sbtには次のものがあります:

resourceDirectory in Compile <<= baseDirectory(_ / "src/main/webapp")

これは私の JettyLauncher.main です:

  def main(args: Array[String]) {
    val port = if(System.getenv("PORT") != null) System.getenv("PORT").toInt else 8080

    println(s"JettyLauncher: ${port}")
    val server = new Server(port)
    val context = new WebAppContext()
    context setContextPath "/"
    context.setResourceBase("src/main/webapp")
    context.addServlet(classOf[MyServlet], "/*")

    server.setHandler(context)

    server.start
    server.join
  }

私が持っているnotFound方法では:

notFound {
  // remove content type in case it was set through an action
  contentType = null
  serveStaticResource() getOrElse <h1>Not found. Bummer.</h1>
}

Web サービスはアクセス可能で、期待どおりに動作しますが、アプリケーションを起動すると静的コンテンツ (この場合は index.html) が見つかりません。

java -jar myapp.jar

私は自分のserveStaticResource関数を書く必要があると感じていますが、そうしないことを望んでいます。

これは私が見ているものであり、HTTP 200 は、ファイルが見つからないという「残念な」応答によるものです。

09:13:44.735 [qtp874703452-16 - /index.html] DEBUG org.eclipse.jetty.server.Server - REQUEST /index.html on AsyncHttpConnection@fb4871b,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=14,c=0},r=3
09:13:44.748 [qtp874703452-17] DEBUG org.eclipse.jetty.http.HttpParser - filled 0/0
09:13:44.752 [qtp874703452-16 - /index.html] DEBUG o.e.j.server.handler.ContextHandler - scope null||/index.html @ o.e.j.w.WebAppContext{/,file:/C:/Users/src/main/webapp}
09:13:44.759 [qtp874703452-16 - /index.html] DEBUG o.e.j.server.handler.ContextHandler - context=||/index.html @ o.e.j.w.WebAppContext{/,file:/C:/Users/src/main/webapp}
09:13:44.764 [qtp874703452-16 - /index.html] DEBUG org.eclipse.jetty.server.session - sessionManager=org.eclipse.jetty.server.session.HashSessionManager@5f8b459a
09:13:44.768 [qtp874703452-16 - /index.html] DEBUG org.eclipse.jetty.server.session - session=null
09:13:44.771 [qtp874703452-16 - /index.html] DEBUG o.e.jetty.servlet.ServletHandler - servlet ||/index.html -> gov.ornl.cyber.botmon.ui.BotMonServlet-1
09:13:44.774 [qtp874703452-16 - /index.html] DEBUG o.e.jetty.servlet.ServletHandler - chain=null
09:13:44.813 [qtp874703452-16 - /index.html] DEBUG org.eclipse.jetty.server.Server - RESPONSE /index.html  200 handled=true

Jetty Launcher が静的ファイルを適切に検出するように構成するにはどうすればよいですか?

src/main/webapp がリソース フォルダーであることを伝える方法はありますか?

私が抱えているもう1つの問題は、notFound関数内で、どのファイルが見つからなかったかを知る方法がわからないためthis.context.getResource("src/main/webapp" + missingfile)、Scalatraを使用して自分自身を呼び出すことができることです。それが私の困難の根底にあると思いますが、どのファイルが見つからなかったのかわかりません。

4

1 に答える 1

1

リソースベースを設定するためにそこにあった行は完全に問題ありません:

  context.setResourceBase("src/main/webapp")

そして、notFoundメソッドはそのままで良いです。リソースベースの下に置くと、Scalatra は index.html ファイルを取得します。

notFound {
  contentType = null // although probably you would want to set this to 'text/html'
  serveStaticResource() getOrElse <h1>Not found. Bummer.</h1>
}

実行可能な jar (sbt から実行されていない) を作成するには、 src/main/webappフォルダーと実行に関連するすべてのコンテンツがあるフォルダーから jar を実行する必要があります。

注: request.getRequestURL はリクエスト URL を提供しますが、うまく機能しているため、serveStaticResource を書き直すことはお勧めしません。

 notFound {
    println("Oh yeah: " + request.getRequestURL)
}

注 2: https://github.com/softwaremill/bootzookaを見てください。REST サービスと UI レイヤー (html+angularJS を使用) は非常にうまく分離されています。

于 2013-11-12T20:23:26.523 に答える