Почему Jetty обслуживает CSS с типом содержимого text/html
Я использую встроенный сервер Jetty в приложении Scalatra. Проблема в том, что он служит css
файлы с text/html
Тип содержимого:
Вот основной метод:
package yard.web
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.webapp.WebAppContext
import org.scalatra.servlet.ScalatraListener
object JettyMain {
def main(args: Array[String]) {
val server = new Server(9080)
val context: WebAppContext = new WebAppContext("src/main/webapp", "/")
context.setServer(server)
context.setInitParameter(ScalatraListener.LifeCycleKey, "yard.web.ScalatraBootstrap")
context.addEventListener(new ScalatraListener())
server.setHandler(context)
server.start()
println("Press ENTER to stop server")
Console.readLine()
server.stop()
server.join()
}
}
Файл находится по адресу src/main/webapp/libs/bootstrap/css/bootstrap.css
и подается с:
$ curl --head http://localhost:9080/libs/bootstrap/css/bootstrap.css
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Last-Modified: Sat, 06 Apr 2013 14:30:35 GMT
Content-Length: 127247
Accept-Ranges: bytes
Server: Jetty(8.1.10.v20130312)
Почему Jetty думает, что это HTML-файл?
Здесь ScalatraBootstrap
класс для полноты:
package yard.web
import org.scalatra.LifeCycle
import javax.servlet.ServletContext
import yard.Settings
import yard.db.Store
class ScalatraBootstrap extends LifeCycle {
override def init(context: ServletContext) {
val settings = Settings.default
val db = Store(settings).db
context mount (new MainServlet, "/")
}
}
Обновление: Использование ResourceHandler
заставляет css быть обслуженным с правильным типом контента. Тем не менее, приложение не работает:(
1 ответ
Файл CSS обычно подается из org.eclipse.jetty.servlet.DefaultServlet
,
Который объявлен в etc/webdefault.xml
файл в раздаче.
Поскольку вы используете встроенный режим, вам нужно будет указать это вручную, вызвав WebAppContext.setDefaultsDescriptor(String) с путем к вашемуetc/webdefault.xml
файл.
И, наконец, сами типы пантомимы загружаютсяDefaultServlet
черезmime.properties
файл, который загружается Jetty через вызов Classloader.getResource("/org/eclipse/jetty/http/mime.properties")
,
Обратите внимание mime.properties
файл находится в jetty-http-8.1.10.v20130312.jar
файл.