2013-10-17 8 views
5

मेरे पास जेटी सर्वर और रूट संदर्भ युद्ध द्वारा दी गई सहायता फ़ाइलों से भरे दो स्थिर युद्ध हैं।वेबपैड किसी अन्य वेबैप पर कैसे आगे बढ़ता है?

  • help.war - अंग्रेज़ी मदद फ़ाइलों
  • help_CS.war - चेक मदद फ़ाइलों
  • ROOT.war

    अनुरोध के स्थान के आधार पर, मैं चाहता हूँ किसी उपयोगकर्ता को उनके लिए प्रासंगिक भाषा में बदलने के लिए। यानी उपयोगकर्ता /help/index.htm अनुरोध करता है और जब वे चेक लोकेल से अनुरोध कर रहे हैं, तो उन्हें /help_CS/index.htm मिलता है। विचार यह है कि भाषा पैक को बिना किसी झगड़े के जरूरी जोड़ा जा सकता है।

    I tried एक कस्टम RewriteHandler, Jetty.xml में निर्दिष्ट जो Request और या तो आगे से वातावरण पकड़ लेता है या हैंडल() पर पुनर्निर्देश जोड़ने। दोनों शिकायत करते हैं क्योंकि प्रतिक्रिया बिंदु इस बिंदु से भेजे गए हैं ... किसी भी तरह ?!

    मैं ROOT.war जो मैं मैच के लिए */मदद/** कोई बात नहीं क्या यूआरएल पैटर्न मैंने कोशिश की भिन्नता नहीं मिल सका के web.xml में एक कस्टम Filter की कोशिश की।

    मैं तो एक ही Filter अंतिम प्रयास के रूप में के लिए एक संदर्भ वेब-INF में/web.xml मेरी help.war को जोड़ा गया है जो मेल खाएगा और यूआरएल उत्पन्न किया जा सकता है, लेकिन मैं इस पर URL रीराइट नहीं कर सकते बिंदु क्योंकि यह हमेशा /सहायता/ द्वारा प्रीपेड किया जाता है, इसलिए help_CS के साथ प्रतिस्थापित सहायता वाला यूआरएल डोमेन/सहायता/help_CS/index.htm के रूप में समाप्त होता है।

    तो मेरा प्रश्न। यह कैसे किया जा सकता है?

+2

इसके लिए जावास्क्रिप्ट का उपयोग करें। अगर (isCS) {window.location.href = hostname/help_CS}, जहांCS bolean चर है। –

+0

अच्छी योजना है लेकिन मैं नहीं कर सकता। सहायता फ़ाइलों को गतिशील रूप से कुछ तृतीय पक्ष सॉफ़्टवेयर द्वारा उत्पन्न किया जाता है जो बहुत कम अनुकूलन की अनुमति देता है। इसका मतलब यह होगा कि यदि एक दिन में पचास भाषाओं में जावास्क्रिप्ट को हर बार सहायता उत्पन्न होने पर 50 * एन (एन भाषाओं की संख्या) के लिए हाथ में प्रवेश करने की आवश्यकता होगी। –

+1

आप सही हैं।मुख्य वेब एप्लिकेशन में उप-निर्देशिकाओं में अपनी सहायता फ़ाइलों को स्टोर करें। मुझे लगता है कि यह कठोर तरीका है। –

उत्तर

1

तो! इसके साथ गड़बड़ करने के कुछ दिनों बाद मुझे something मिल गया है जो थोड़ा हैकी महसूस करता है लेकिन यह काम करता है।

मैं तो मेरे कस्टम Filter का उपयोग यह इतना

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/help_CS</url-pattern> 
</servlet-mapping> 
के रूप में प्रत्येक युद्ध फ़ाइल के लिए एक व्यक्ति सर्वलेट-मानचित्रण (लेकिन अन्यथा समान) के साथ प्रत्येक help_XX.war के लिए WEB_INF/web.xml में डाल

फिर Filter अंदर मैं आवश्यक युद्ध के ServletContext हो और कि का उपयोग करते हुए, मैन्युअल रूप से इतना

की तरह अनुरोध पते से /मदद को हटाने के आगे
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
           throws IOException, ServletException 
    { 
    HttpServletRequest request = (HttpServletRequest) req; 
    String requestAddress = request.getRequestURI(); 
    String country_code = req.getLocale().getCountry(); 

    if (requestAddress.contains("/help/")) 
    { 
     ServletContext forwardContext = config.getServletContext().getContext("/help_" + country_code); 

     forwardContext.getRequestDispatcher(requestAddress.replace("/help", "")).forward(req, res); 
    } 
    else 
    { 
     chain.doFilter(req, res); 
    } 
    } 
संबंधित मुद्दे