Tomcat 7.0 में वेब एप्लिकेशन का संदर्भ पथ कैसे सेट करें


162

मुझे पता है कि मैं अपने वेब का नाम बदल सकता हूं (या यह WAR फ़ाइल है) ROOT के लिए लेकिन यह करने के लिए एक भयानक तरीका है, IMHO। अब मैंने टॉमकट डॉक की जाँच की और यह कहता है

यह सीधे server.xml फ़ाइल में तत्वों को रखने के लिए अनुशंसित नहीं है

इसलिए मैंने इसे एक और तरीका बनाने की कोशिश की जो यह सुझाता है।

व्यक्तिगत संदर्भ तत्वों को स्पष्ट रूप से परिभाषित किया जा सकता है: आवेदन फाइलों के अंदर /META-INF/context.xml पर एक व्यक्तिगत फ़ाइल में।

इसलिए मैंने /META-INF/context.xmlनिम्नलिखित कोड बनाया,

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>

लेकिन तैनाती के बाद जब मैंने सर्वर को फिर से शुरू किया तो यह अभी भी संदर्भ को "/" पर लोड करने में विफल रहा, फिर भी इसे इसके साथ लोड किया "/<WEB_APP_NAME>"

कोई संकेत सहायक।


मैं कभी भी टॉमकैट 8 चेतावनी के
gavenkoa

1
डॉक्स में दिए गए तत्वों को "सर्वर में सीधे जगह देने की अनुशंसा नहीं की जाती है", डॉक्स में दिए गए अगले वाक्य में निम्नानुसार है: "ऐसा इसलिए है क्योंकि यह कॉनटेक्स्ट कॉन्फ़िगरेशन को मुख्य conf / server.xml फ़ाइल से अधिक आक्रामक बनाता है। टॉमकैट को फिर से शुरू किए बिना पुनः लोड किया जाए। " नीचे दिए गए स्वीकृत उत्तर सीधे समस्या को हल कर देते हैं, लेकिन यदि आप इस पथ को फिर से संशोधित करने की संभावना नहीं रखते हैं या पुनरारंभ करना बहुत विघटनकारी नहीं है, तो server.xml को संशोधित करना यह सब अनुचित नहीं लगता है।
rimsky

जवाबों:


236

आप जो कर सकते हैं वह निम्नलिखित है;

एक फ़ाइल बुलाया जोड़े ROOT.xmlमें<catalina_home>/conf/Catalina/localhost/

यह ROOT.xml उस इंजन और होस्ट (कैटालिना और लोकलहोस्ट) के लिए टॉमकैट इंस्टॉलेशन के मूल संदर्भ के लिए डिफ़ॉल्ट सेटिंग्स को ओवरराइड करेगा।

ROOT.xml फ़ाइल में निम्न दर्ज करें;

<Context 
  docBase="<yourApp>" 
  path="" 
  reloadable="true" 
/>

यहाँ, <yourApp>आपके ऐप का नाम है, .. :)

और आप वहां जाते हैं, आपका एप्लिकेशन अब डिफ़ॉल्ट एप्लिकेशन है और दिखाई देगा http://localhost:8080

हालांकि, एक पक्ष प्रभाव है; आपका आवेदन दो बार लोड किया जाएगा। एक बार के लिए localhost:8080और एक बार के लिए localhost:8080/yourApp। इसे ठीक करने के लिए आप अपना एप्लिकेशन <catalina_home>/webappsOUTSIDE डाल सकते हैं और ROOT.xml के docBase टैग में एक रिश्तेदार या निरपेक्ष पथ का उपयोग कर सकते हैं । कुछ इस तरह;

<Context 
  docBase="/opt/mywebapps/<yourApp>" 
  path="" 
  reloadable="true" 
/>

और फिर यह सब ठीक होना चाहिए!


32
नीचे मतदान हुआ? ठीक है, लेकिन क्यों? अगर कोई बेहतर विकल्प है, तो मुझे भी बताएं! : डी
पास्के

1
क्या यह नियमित वेबैप फ़ोल्डर में अन्य युद्धों के साथ काम करेगा?
क्रिसल्वेक् सीएमएन

5
डबल-परिनियोजन को हल करने के लिए आप दोनों "परिनियोजनस्टार्टअप" और "autoDeploy" सर्वर में होस्ट विशेषता का झूठा सेट कर सकते हैं। xml
Sefler

8
मैंने पाया है कि यदि आप "वेब पर कैट वापस आता है" के तहत डिफ़ॉल्ट रूट फ़ोल्डर का नाम नहीं बदलते हैं और यह ROOT.xml में docBase को रीसेट करता है। यह VMWare के vfabric टीसी डेवलपमेंट सर्वर के साथ है ... सावधान रहें।
होसेरुडे २६'१३ को

3
ऐसा प्रतीत होता है कि टॉमकैट 7 अब / वेबपृष्ठों के अंदर डॉकबेस की अनुमति नहीं देगा, इसलिए यह कहीं और युद्ध फ़ाइल का पता लगाना अनिवार्य होगा।
मोजो

12

यहाँ केवल समाधान है कि मेरे लिए काम किया है। इसे conf / server.xml में होस्ट नोड में जोड़ें

<Context path="" docBase="yourAppContextName">

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

Tomcat server.xml फ़ाइल पर जाएं और पथ रिक्त सेट करें


1
पर होगा server.xmlया context.xml? मैं <Context>अपने xml टैग को देखता हूंcontext.xml
सैफ़

6
Server.xml में एक संदर्भ xml टैग भी है। हालांकि संदर्भ को परिभाषित करने के लिए server.xml उपयोग हतोत्साहित किया जाता है
Octsmail Yavuz

4

टॉमकैट 9.0 में, मुझे केवल निम्नलिखित को बदलना होगा server.xml

<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

सेवा

<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>

3

वर्चुअल मेजबानों का उपयोग करते हुए इस छोटे कोड ने मेरे लिए काम किया

<Host name="my.host.name" >
   <Context path="" docBase="/path/to/myapp.war"/>
</Host>

इस में है server.xml? उदाहरण के लिए, उपरोक्त समस्या के अनुसार Ali.Mojtehedy। इसके अलावा, अन्य उत्तर बताते हैं कि सामान्य वेबपैप पथ के बाहर/path/to होना चाहिए ।
जीन जोर्डन

ठीक काम करने लगता है। बेशक, आप नहीं चाहते हैं कि ROOT एप्लिकेशन आपके साथ संघर्ष करने के लिए एक ही webapps फ़ोल्डर में मौजूद हो।
एंथनी हेवर्ड

2

सबसे तेज और सबसे अच्छा समाधान हो सकता है कि इसमें सामग्री नीचे दी गई हो <TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

<Context 
  docBase="/your_webapp_location_directory" 
  path="" 
  reloadable="true" 
/>

और आपका webapp पर उपलब्ध होगा http://<host>:<port>/


1
क्या वह docBase निर्देशिका निरपेक्ष है या किसी विशिष्ट फ़ोल्डर के सापेक्ष है?
जोस मार्टिनेज

3
मैंने यह कोशिश की, लेकिन इसका काम नहीं हुआ। मेरे पास एक ऐप है जिसका नाम Foobarहै /opt/tomcat/webapps/Foobar। मैंने docBase को सेट करने की कोशिश की Foobarऔर इसके लिए भी /opt/tomcat/webapps/Foobar, लेकिन जब मैं `http: // <host>: <port> / / पर जाता हूं, तब भी मैं अपने Foobar ऐप के बजाय Tomcat होम पेज देखता हूं। मैंने भी टॉमकैट को फिर से शुरू किया। मैं क्या गलत कर रहा हूं?
किंबौड़ी

जब मैं पथ को अशक्त बनाता हूं तो यह मेरे ऐप तक नहीं पहुंचता):
Snickers3192

1

मुझे एक महीने के लिए इस समस्या का सामना करना पड़ा, server.xml के अंदर संदर्भ टैग लगाना सुरक्षित नहीं है यह अन्य सभी होस्ट के लिए तैनात संदर्भ तत्वों को प्रभावित करता है, बड़े एप्लिकेशन के लिए यह कनेक्शन त्रुटियां लेता है उदाहरण के लिए अच्छा अलगाव नहीं है आप फ़ोल्डर नाम domain2 द्वारा अन्य साइटों तक पहुंच सकते हैं .com / domain1Folder !! दो बार लोड किया गया डेटाबेस सत्र कनेक्शन भी! दूसरा रास्ता ROOT.xml फ़ाइल है जिसमें पूर्ण पथ के साथ संदर्भ टैग है:

 <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />

in / catalina / webappsfoldername और युद्ध फाइल को ROOT.war के रूप में webappsfoldername के अंदर तैनात करें और इस तरह का विवरण दें

 <Host name="domianname"  appBase="webapps2" unpackWARs="true"  autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false" >

        <Logger className="org.apache.catalina.logger.FileLogger"
               directory="logs"  prefix="localhost_log." suffix=".txt"
          timestamp="true"/>
</Host>

इस प्रकार में भी इसी प्रकार के ऐप्स के लिए उपयोगकर्ता सत्रों में अच्छा अलगाव नहीं है! यदि आप app1 के अंदर app1 के रूप में ही कर सकते हैं तो आप app1 के अंदर हो सकता है आप सर्वर साइड सत्र द्वारा लॉगिन करने के बाद स्वचालित रूप से app2 में प्रवेश कर सकते हैं! तो आपको यूजर सेशन को क्लाइंट साइड कैश में रखना है न कि jsessionid के साथ! हम इसे हल करने के लिए लोकलहोस्ट से इंजन का नाम बदल सकते हैं। लेकिन कहते हैं कि अन्य बिल्लियों के साथ खेलने की तुलना में टॉमकैट के साथ खेलने के लिए अधिक समय की आवश्यकता है!


1

यह Server.xml या ROOT.xml जैसे सर्वर कॉन्फ़िगरेशन को अपडेट करने के लिए अनुशंसित नहीं है।

आप अपने वेब-एप्लिकेशन META-INF निर्देशिका के अंतर्गत एक reference.xml कॉन्फ़िगरेशन फ़ाइल डाल सकते हैं, जिसमें संदर्भ पथ सेटिंग शामिल है। यह डिफ़ॉल्ट सर्वर सेटिंग को ओवरराइड करेगा?

अर्थात:

<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">


1

Tomcat 8: कई खोजों के बाद यह केवल काम करने वाला कोड है: server.xml में

<!-- Set /apple as default path -->
    <Host name="localhost"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
     <Context path="" docBase="apple">
         <!-- Default set of monitored resources -->
         <WatchedResource>WEB-INF/web.xml</WatchedResource>
     </Context>
    </Host>

टोमैट को पुनरारंभ करें, सुनिश्चित करें कि जब आप 127.0.0.1:8080 तक पहुंचते हैं, तो यह 127.0.0.1:8080/apple में सामग्री को प्रदर्शित करेगा।

मेरा प्रोजेक्ट java web application witch netbeans द्वारा बनाया गया था, मैंने प्रोजेक्ट कॉन्फ़िगरेशन में रेफरेंस पाथ सेट किया, कोई और बात नहीं, यहाँ तक कि मैंने apple.war को भी वेबैप फोल्डर में रखा।


1

मेरे लिए दोनों जवाब काम कर गए।

  1. ROOT.xml नामक फाइल को / conf / Catalina / localhost / में जोड़ना
<Context
    docBase="/tmp/wars/hpong"
  path=""
  reloadable="true"
/>
  1. Server.xml में प्रविष्टि जोड़ना
<Service name="Catalina2">
    <Connector port="8070" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8743" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost"
            unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="/tmp/wars/hpong"  reloadable="true">
                <WatchedResource>WEB-INF/web.xml</WatchedResource>
            </Context>
      </Host>
    </Engine>
</Service>

नोट: जब आप संदर्भ के तहत docBase की घोषणा करते हैं तो होस्ट पर appBase को अनदेखा करें।

  1. हालाँकि मैंने अपने युद्ध नाम को रूपांतरित करना ROOT.warऔर इसे वेबप के अंतर्गत रखना पसंद किया है। इसलिए अब अन्य युद्धों (संदर्भों) से बेजोड़ यूआरएल अनुरोध इस युद्ध में उतरेंगे। यह ROOT ("/ **") संदर्भ पथ को संभालने का बेहतर तरीका है।

दूसरा विकल्प (डबल) वेबैप्स फ़ोल्डर से युद्धों को लोड करना है। यह भी केवल असंपीड़ित युद्ध फ़ोल्डर की जरूरत है जो एक सिरदर्द है।




1

Tomcat 8.X में, tomcat home directory / conf / folder के <Context>तहत server.xml में आप टैग के नीचे <Host>टैग जोड़ सकते हैं जैसा कि नीचे दिखाया गया है। लेकिन आपको प्रभावी होने के लिए सर्वर को पुनरारंभ करना होगा

  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

     <Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
  </Host>

या यदि आप Tomcat 7.X का उपयोग कर रहे हैं, तो आप अपने प्रोजेक्ट में WEB-INF फ़ोल्डर में reference.xml फ़ाइल जोड़ सकते हैं। मेरे द्वारा उपयोग की गई फ़ाइल की सामग्री इस प्रकार है। और यह मेरे लिए ठीक काम किया। आपको इस मामले में सर्वर को पुनरारंभ करने की आवश्यकता नहीं है।

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />

टॉमकैट में परीक्षण किया गया: 9.0 डॉकटर और यह आपके द्वारा उल्लेखित 8.0 के रूप में काम करता है। localhost:8080/<Your App Directory Name>/और localhost:8080/<your app path you wish>/ये दोनों 2 URL एक ही समय में काम करते हैं। के तहत इन दो निकाले गए फ़ोल्डरों को मिला $CATALINA_HOME/webapps/
१३:३ian में नियामिंगजियन

1

सबसे सरल और लचीला समाधान नीचे है: $ {Tomcat_home} /config/server.xml के अंदर

AutoDeploy में परिवर्तन करें = "false" परिनियोजनस्टार्टअप = "असत्य" होस्ट तत्व के अंतर्गत जैसे नीचे यह है।

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="false" deployOnStartup="false">

होस्ट तत्व के तहत नीचे पंक्ति जोड़ें ।

<Context path="" docBase="ServletInAction.war"  reloadable="true">
            <WatchedResource>WEB-INF/web.xml</WatchedResource>
        </Context>

उपरोक्त दृष्टिकोण के साथ हम अलग-अलग संदर्भ पथ नामों के साथ webapps के तहत कई एप्लिकेशन जोड़ सकते हैं।


विन्यास के बिना डिनफ के बिना वैकल्पिक समाधान बस अपनी युद्ध फ़ाइल को root.war में बदल देता है और इसे webapps डायरेक्टरी के अंतर्गत डाल देता है। स्वचालित रूप से संदर्भ पथ / पर सेट हो जाएगा।
रवि गुप्ता

-6

नीचे की चाल ने मेरे लिए काम किया।

1) कमेंट / टेंकैट के सर्वर.एक्सएमएल फाइल (इनफोल्डर के अंदर) से नीचे के विन्यास को हटा दें।

2) मौजूदा आरओटी फ़ोल्डर (यदि कोई हो) को टीकैट वेबैप्स फ़ोल्डर के अंदर हटा दें। और अपना नाम (उदा: test.war) फ़ाइल का नाम बदलकर ROOT.war रखें।

याद रखें कि ROOT.war में "ROOT" युद्ध फ़ाइल का नाम बदलने के दौरान कैप में होना चाहिए।

सीमा: आप केवल एक आवेदन को एक टॉमकैट उदाहरण के अंदर तैनात कर सकते हैं।


3
प्रश्न से: "मुझे पता है कि मैं अपने वेब का नाम बदल सकता हूं (या यह WAR फ़ाइल है) ROOT के लिए लेकिन यह ऐसा करने का एक भयानक तरीका है, IMHO।"
जीन जोर्डन

1
मैं अपने आप को सिर्फ एक वेबएप का उपयोग नहीं करना चाहूंगा।
ulrich
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.