2013-01-21 26 views
10

Jetty dökümantasyon örneklerini izleyerek gömülü bir Jetty sunucusunda basit bir yeniden yazma kuralı uygulamaya çalışıyorum.Embedded Jetty yeniden düzgün çalışmaz yeniden yazıyor

/admin.html dosyasına yeniden yazmak için /admin/ isteklerini istiyorum. Şu anda /admin/ istesem /admin.html ile 404 hatası alıyorum. Ama doğrudan /admin.html talep ederse, işe yarıyor!

Stackoverflow üzerinde 2 tane daha benzer ileti var ancak soruya cevap yok!

WebAppContext _ctx = new WebAppContext(); 
_ctx.setContextPath("/"); 
_ctx.setDefaultsDescriptor(JETTY_DEFAULTS_DESCRIPTOR); 
_ctx.setParentLoaderPriority(true);  
_ctx.setWar(getShadedWarUrl()); 
_ctx.setResourceBase(getShadedWarUrl()); 

RewriteHandler rewriter = new RewriteHandler(); 
rewriter.setRewritePathInfo(true); 
rewriter.setRewriteRequestURI(true); 
rewriter.setOriginalPathAttribute("requestedPath"); 

RewritePatternRule admin = new RewritePatternRule(); 
admin.setPattern("/admin/"); 
admin.setReplacement("/admin.html"); 
admin.setTerminating(true); // this will stop Jetty from chaining the rewrites 
rewriter.addRule(admin); 

_ctx.setHandler(rewriter); 

HandlerCollection _handlerCollection = new HandlerCollection(); 
_handlerCollection.setHandlers(new Handler[] {_ctx}); 
server.setHandlers(_result); 

cevap

16

2 satırları değiştirin ...

_ctx.setHandler(rewriter); 
_handlerCollection.setHandlers(new Handler[] {_ctx}); 

rewriter.setHandler(_ctx); 
_handlerCollection.setHandlers(new Handler[] {rewriter}); 

ile yeniden yazım kuralları normale önce tekme yapacaktır: Burada

kod içerik kullanımı.

İçerik işlemeyi bir ağaç olarak düşünün. senin örneğin kodunda sahip ....

WebAppContext isteği işleyemezse gelir
server 
+-- HandlerCollection 
    [0]-- WebAppContext 
      +-- Your servlets and filters in web.xml 
      +-- DefaultServlet 
       +-- RewriteHandler 

ardından RewriteHandler o isteği işleyebilir olmadığını görmek için yürütülür. Hiçbir zaman, WebAppContext, DefaultServlet kullanmak için ayarlandığı gibi olmaz.

basit bir değişiklik

server 
+-- HandlerCollection 
    [0]-- RewriteHandler 
      +-- WebAppContext 
       +-- Your servlets and filters in web.xml 
       +-- DefaultServlet 

Bu WebAppContext bile istenmeden önce RewriteHandler onun şey sağlayacaktır ... Bu gibi görünmek yer değişimi ağacı önerdi. Not: Ayrıca bu kod için HandlerCollection kodunuzu biraz daha uygun bir şekilde kullanabilirsiniz.

// _ctx.setHandler(rewriter); 
// rewriter.setHandler(_ctx); 
_handlerCollection.setHandlers(new Handler[] { rewriter, _ctx }); 

Bu aşağıdaki ağacın çok yararlı

server 
+-- HandlerCollection 
    [0]-- RewriteHandler 
    [1]-- WebAppContext 
      +-- Your servlets and filters in web.xml 
      +-- DefaultServlet 
+0

neden olacaktır! Teşekkürler! – Melissa

İlgili konular