2013-01-21 30 views
10

मैं जेटी दस्तावेज उदाहरणों के बाद एम्बेडेड जेट्टी सर्वर में एक सरल पुनर्लेखन नियम लागू करने की कोशिश कर रहा हूं।एंबेडेड जेट्टी ठीक से काम नहीं कर रहा है

मैं /admin.html को फिर से लिखने के लिए /admin/ पर अनुरोध चाहता हूं। फिलहाल अगर मैं /admin/ का अनुरोध करता हूं तो मुझे /admin.html के साथ 404 त्रुटि मिलती है। लेकिन अगर मैं सीधे /admin.html का अनुरोध करता हूं, तो यह काम करता है!

स्टैक ओवरफ्लो पर 2 अन्य समान पोस्ट हैं लेकिन प्रश्न के उत्तर नहीं!

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); 

उत्तर

16

2 लाइनों बदलें ...

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

साथ

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

rewriter नियम सामान्य से पहले में किक कर देगा कि:

कोड यह संदर्भ हैंडलिंग।

एक पेड़ के रूप में संदर्भ के संदर्भ के बारे में सोचें। अपने उदाहरण कोड में आप है ....

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

इसका मतलब है कि अगर WebAppContext अनुरोध नहीं संभाल कर सकते हैं, तो RewriteHandler देखने के लिए अगर यह अनुरोध संभाल कर सकते हैं निष्पादित किया जाता है। ऐसा कभी नहीं होगा, WebAppContextDefaultServlet का उपयोग करने के लिए सेटअप है यदि कुछ और मेल नहीं खाता है।

सरल परिवर्तन परिवर्तन पेड़ सुझाव इस तरह देखने के लिए ...

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

यह RewriteHandler अपनी बात करने से पहले WebAppContext भी पूछा जाता है की अनुमति देगा।

नोट: आप इस परिदृश्य के लिए HandlerCollection को थोड़ा और अधिक उचित तरीके से उपयोग कर सकते हैं।

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

यह निम्न पेड़

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

कि बहुत उपयोगी है में परिणाम होगा! धन्यवाद! – Melissa

संबंधित मुद्दे