2011-10-30 13 views
5

क्या इस वेबपैप के लिए सिर्फ एक वेब साइट/संदर्भ को एक पुनर्लेख फ़ाइल निर्दिष्ट करने का कोई तरीका है? वर्तमान में यह काम करने का एकमात्र तरीका कमांड लाइन के माध्यम से होता है जब आप इसे शुरू करते हैं। मैं शायद override.xml फ़ाइल में या यहां तक ​​कि संदर्भ xml फ़ाइल में एक सेटिंग सोच रहा था।क्या आप Jetty में प्रति वेब ऐप jetty-rewrite.xml फ़ाइलों को असाइन कर सकते हैं?

+0

https://github.com/eclipse/jetty.project/blob/master/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ पर ऐसा करने से संबंधित कुछ हो सकता है RewriteHandler.java लेकिन यह स्पष्ट नहीं है। –

उत्तर

1

context.xml तो आप का उपयोग deployables आप अनुप्रयोग विशिष्ट संदर्भ एक्सएमएल में RewriteHandler नियम एकीकृत कर सकते हैं।

उदाहरण: इस घाट-वितरण में पाया ${jetty.home}/contexts/test.xml के स्थान पर context.xml है। यह एक नियम जोड़ता है जो सभी अनुरोधों के जवाब पर बस एक कुकी (विज़िट = हां) जोड़ता है।

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<Configure class="org.eclipse.jetty.server.handler.ContextHandler"> 
    <Set name="contextPath">/</Set> 
    <Set name="handler"> 
    <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> 
     <Set name="handler"> 
     <New class="org.eclipse.jetty.webapp.WebAppContext"> 
      <Set name="contextPath">/</Set> 
      <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test.war</Set> 
      <Set name="extractWAR">true</Set> 
      <Set name="copyWebDir">false</Set> 
      <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> 
      <Set name="overrideDescriptor"><SystemProperty name="jetty.home" default="."/>/contexts/test.d/override-web.xml</Set> 
     </New> 
     </Set> 
     <Set name="rewriteRequestURI">true</Set> 
     <Set name="rewritePathInfo">false</Set> 
     <Set name="originalPathAttribute">requestedPath</Set> 

     <!-- add a cookie to each path visited --> 
     <Call name="addRule"> 
     <Arg> 
      <New class="org.eclipse.jetty.rewrite.handler.CookiePatternRule"> 
      <Set name="pattern">/*</Set> 
      <Set name="name">visited</Set> 
      <Set name="value">yes</Set> 
      </New> 
     </Arg> 
     </Call> 
    </New> 
    </Set> 
</Configure> 

सत्यापित करने के लिए कि इस नियम काम करता है, घाट, गोटो http://localhost:8080/ शुरू करें और फिर "सत्र" परीक्षण घटक का उपयोग, आप देखेंगे कि visited=true शीर्ष पर एक कुकी के रूप में दिखाई जाएगी।

+0

_ "आप context.xml deployables का उपयोग करते हैं" _ - मुझे लगता है कि इसका मतलब क्या है पता नहीं है, लेकिन मैं प्रत्येक व्यक्ति के संदर्भ '{घाट} में परिभाषित/संदर्भों/{नाम} है .xml' - मैं एक परीक्षण की जरूरत नहीं है .xml या किसी भी परीक्षण घटक। –

+0

मैं (स्थानांतरित सेट अपने उदाहरण में संबंधित नया टैग करने के लिए WebAppContext विन्यस्त से आदेश द्वारा) एक मौजूदा संदर्भ config को यह उदाहरण लागू करने का प्रयास किया, लेकिन वह 'org.eclipse.jetty.server.Dispatcher $ पर एक StackOverflowError में हुई ForwardAttributes.setAttribute (Dispatcher.java:410) '([पूर्ण ट्रेस] (http://pastebin.com/vZEvmDRj)) जब तक पहुँचने के लिए'/'कोशिश कर - ऐसा लगता है कि यह काम करता है (प्रतिक्रिया के साथ सेट-कुकी शीर्ष लेख भी शामिल है) एक विशिष्ट फ़ाइल पर जाकर। –

+0

मुझे नहीं पता कि यह जेटी बग है, या कुछ गलत कॉन्फ़िगरेशन या कुछ और वजह से? इस हैंडलर रैपिंग सामान कैसे काम करता है इसका एक विवरण शायद उपयोगी होगा। (इस मुद्दे को डिबग करने के लिए कोशिश कर रहा है, मैं शीर्ष स्तर के contextPath बाहर ले - यह कुछ भी बदलने की प्रकट नहीं किया था, इसलिए यदि यह आवश्यक है मैं सोच रहा हूँ) –

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

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