>

애플리케이션 초기화 메소드 내부의 기본 AssetBundle 인 dropwizard에서 정적 자산을 제공하고 있습니다. 1.3 정적 자산을 제공하는 DW .

bootstrap.addBundle(new AssetsBundle("/assets/", "/assets"));

정적 자산은 src/main/resources/assets/ 에 있습니다.

지금은 단지 .html 가 있습니다   localhost:port/assets/index.html 에서 제공하고 싶은 파일 .

내가 localhost:port/assets/index.html 에 갈 때  이상한 jetty-server 를 받고있는 것 같습니다  오류.

org.eclipse.jetty.util.SharedBlockingCallback: Blocker not complete Blocker@6aa2d91b{null}
WARN  [2018-05-02 19:10:32,492] org.eclipse.jetty.servlet.ServletHandler: Error for /assets/MultiFileUpload.html
! java.lang.ClassNotFoundException: org.eclipse.jetty.http.GzipHttpContent
! at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
! at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
! at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
! at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
! ... 43 common frames omitted
! Causing: java.lang.NoClassDefFoundError: org/eclipse/jetty/http/GzipHttpContent
! at org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor.commit(GzipHttpOutputInterceptor.java:229)
! at org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor.write(GzipHttpOutputInterceptor.java:104)
! at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:235)
! at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:219)
! at org.eclipse.jetty.server.HttpOutput.close(HttpOutput.java:269)
! at io.dropwizard.servlets.assets.AssetServlet.doGet(AssetServlet.java:197)
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
! at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
! at io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49)
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772)
! at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:35)
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:45)
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:39)
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
! at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
! at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
! at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
! at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
! at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:239)
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:52)
! at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:493)
! at io.dropwizard.jetty.BiDiGzipHandler.handle(BiDiGzipHandler.java:69)
! at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:56)
! at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:169)
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
! at org.eclipse.jetty.server.Server.handle(Server.java:534)
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
! at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
! at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
! at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:240)
! at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
! at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
! at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
! at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
! at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
! at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
! at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
! at java.lang.Thread.run(Thread.java:745)
0:0:0:0:0:0:0:1 - - [02/May/2018:19:10:32 +0000] "GET /assets/index.html HTTP/1.1" 500 265 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" 27

여기를 읽었습니다 DropwizardViews 를 사용하는 것이 더 좋습니다. 그럼에도 불구하고 부두에서 오류를 일으키는 gziphttpContent 클래스의 문제가 무엇인지 잘 모르겠습니다.


  • 답변 # 1

    명예에 대한 뻔뻔한 입찰에서 답변에 댓글 스레드 요약 :)

    Gzip은 HTTP 요청에 사용되는 인코딩 전략입니다. 브라우저가 Accept-Encoding: gzip 를 추가하고있을 가능성이 큽니다.  요청 헤더. 어떤 이유로 든 dropwizard는 응답 내용을 압축 할 수 없으며 이것이 게시 한 스택 추적입니다.

    브라우저에서이 헤더를 추가하고 있는지 확인할 수 있습니다.

    curl -vk https://localhost:<port>/assets/index.html

    같은 요청을하고 같은 예외가 있는지 확인하십시오. 그렇지 않은 경우 브라우저에서 zip으로 압축 된 콘텐츠를 요청하고있을 수 있으며 이는 드롭 위저드에서 제공 할 수 없습니다. 결정을 내리기 위해 Wireshark 또는 Charles Proxy와 같은 스니핑 도구를 사용하여 브라우저가 수행하는 전체 HTTP 요청을 검사 할 수 있습니다.

    해결책으로 dropwizard 서버 설정에서 gzip을 비활성화 할 수 있습니다 :

    server:
      gzip:
        enabled: false
    
    

    최적의 솔루션 일 필요는 없지만 트릭을 수행해야합니다. 근본 원인이 dropwizard의 버그인지 아니면 gzip 구성과 관련이 있는지 모르겠습니다.

  • 이전 c# - XAML에서 ListView의 Bindig List가 작동하지 않습니까?
  • 다음 azure service fabric - Net Core 2 IHttpContextAccessor는 인증이 클레임 기반 인 경우에도 WindowsPrincipal을 반환합니다