2009-04-29 13 views
5

मूल रूप से मैं एक सर्वलेट पथ की परवाह किए बिना सभी आने वाली अनुरोध को पूरा करना चाहते हैं। मैं अपने स्वयं के web.xml फ़ाइल को कॉन्फ़िगर करने के लिए साझा होस्टिंग वातावरण पर हूं।सभी इनकमिंग अनुरोधों को संभालने के लिए एक सर्वलेट के लिए web.xml (टोमकैट 5) कॉन्फ़िगर करें?

मैं web.xml में विन्यस्त निम्नलिखित है, लेकिन यह बिलाव 5 पर काम नहीं करता:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation= 
     "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>Redirect</display-name> 
    <servlet> 
     <display-name>Redirect</display-name> 
     <servlet-name>Redirect</servlet-name> 
     <servlet-class>com.Redirect</servlet-class> 
     <init-param> 
      <param-name>host</param-name> 
      <param-value>www.myredirectdomain.com</param-value> 
     </init-param> 
     <init-param> 
      <param-name>redirect-type</param-name> 
      <param-value>301</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Redirect</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

ऊपर कुछ भी के लिए काम किया जैसे रास्ते में एक निर्देशिका के साथ शुरू:

www.mydomain.com/anypath1/anypath2... 
www.mydomain.com/anypath1 

www.mydomain.com/ or 
www.mydomain.com 

मैं भी निम्नलिखित सर्वलेट मानचित्रण की कोशिश की:

हालांकि, के लिए काम नहीं किया

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

इसी परिणाम के साथ। न तो काम किया ... किसी के पास कोई सुझाव है?

उत्तर

-1

आप

<url-pattern>*</url-pattern> 

की कोशिश की?

+1

नहीं, मैं इसे आज़मा दूंगा, लेकिन यह सुनिश्चित नहीं करता कि यह एक कानूनी वाक्यविन्यास है या नहीं। –

0

पैटर्न/* निश्चित रूप से अपने पुनर्निर्देशन सर्वलेट आह्वान करेंगे। क्या आपने यह यूआरएल के लिए अनुरोध प्राप्त करने के लिए अपने सर्वलेट को डीबग किया था? तुम्हारा क्या मतलब है काम नहीं किया? क्या आपको कोई त्रुटि मिली या क्या हुआ?

+0

रीडायरेक्ट सर्वलेट केवल अनुरोध प्राप्त हुआ जिसमें कम से कम एक निर्देशिका शामिल थी। अगर मैं सीधे डोमेन पर गया तो www.mydomain.com या www.mydomain.com/ रीडायरेक्ट सर्वलेट नहीं बुलाया गया था। रीडायरेक्ट सर्वलेट इरादे के रूप में काम करता है। मुझे मिली त्रुटि 403 निषिद्ध है। हालांकि, अगर मैं रूट पर index.jsp फ़ाइल डालता हूं तो मुझे कोई त्रुटि नहीं मिलती है। –

+0

यदि आप किसी इंडेक्स पेज का उपयोग नहीं करना चाहते हैं तो <स्वागत-फ़ाइल-सूची> का उपयोग करें। –

+0

मुझे लगता है कि आपने अभी अपना प्रश्न संपादित किया है। क्या आपके पास अपने वेबप्लिकेशंस के लिए कोई संदर्भ नाम नहीं है जहां आपने web.xml कॉन्फ़िगर किया है या web.xml टोमकैट का रूट संदर्भ है? मुझे संदेह है कि यह काम करेगा। आप index.jsp को स्वागत-फ़ाइल-सूची में परिभाषित कर सकते हैं और jsp में अनुरोध को आपके सर्वलेट पर रीडायरेक्ट कर सकते हैं। –

1

<url-pattern>/*</url-pattern> काम करना चाहिए। रूट वेब संदर्भ में आपके वेबपैप को तैनात करने की आवश्यकता है। डिफ़ॉल्ट रूप से, टोमकैट रूट नामक वेबैप का उपयोग करता है; हालांकि, आप इसे अपने server.xml में किसी अन्य वेबपैप को देखने के लिए बदल सकते हैं।

एक और दृष्टिकोण काम करते हैं और इसे उसी तरह मैप करने के लिए एक ServletFilter बनाने के लिए किया जाएगा। प्रत्येक दृष्टिकोण (सर्वलेट और सर्वलेट फ़िल्टर) के लिए पेशेवर और विपक्ष हैं। हालांकि, आपके उदाहरण से, ऐसा लगता है कि आप बस सब कुछ दूसरी साइट पर भेजना चाहते हैं, इसलिए या तो काम करना चाहिए।

4

बिलाव 5 सर्वलेट 2.4 विनिर्देश लागू करता है। इसे यहां डाउनलोड किया जा सकता है: JCP Servlet 2.4 Spec

पृष्ठ पर। 86 - एसआरवी.11.2 यह बताता है कि सर्वलेट मैपिंग कैसे निर्दिष्ट करें। अगर मैं समझता हूं कि आप सही तरीके से क्या करने की कोशिश कर रहे हैं, तो आप एक ही सर्वलेट के साथ अपने सर्वर पर हर अनुरोध (कोई फर्क नहीं पड़ता) को रोकने की कोशिश कर रहे हैं। इसके लिए काम करने के लिए, आपके वेबपैम को टॉमकैट के मामले में डिफ़ॉल्ट संदर्भ ("रूट") पर आरोहित करने की आवश्यकता है और आपके सर्वलेट को आपके web.xml में डिफ़ॉल्ट सर्वलेट में मैप करने की आवश्यकता है। आपके web.xml में आपका मैपिंग सही है।

<servlet-mapping> 
    <servlet-name>Redirect</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

मुझे लगता है कि आपके पास जो समस्या हो रही है वह रूट संदर्भ के साथ है। Www.mydomain.com/ और www.mydomain.com डिस्प्ले तक पहुंच क्या है? आप उल्लेख नहीं करते हैं कि आपका साझा होस्टिंग वातावरण आपको अपनी टॉमकैट कॉन्फ़िगरेशन तक पूर्ण पहुंच प्रदान करता है, लेकिन यदि आप अपनी $ TOMCAT5_HOME/conf निर्देशिका को एक्सेस और संशोधित कर सकते हैं, तो यह आपके लिए यह काम करने के कुछ तरीके हैं।

शायद स्पष्ट तरीका निम्नलिखित जोड़ने के लिए है:

< Context path="" debug="0" docBase="your-app"> 
$ TOMCAT5_HOME/conf/server.xml को

। यह आपके एप्लिकेशन को "your-app.war" कहलाता है।

उम्मीद है कि इससे मदद मिलती है।

+2

क्या इससे कोई फर्क पड़ता है यदि संदर्भ पथ = "" या पथ = "/"? मैंने इसे अतीत में "/" के रूप में परिभाषित किया है। –

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

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