2012-12-04 24 views
6

के लिए रूट यूआरएल के रूप में प्रोजेक्ट नाम का उपयोग नहीं करता है जब मैं स्प्रिंगसोर्स आईडीई के साथ स्प्रिंग एमवीसी टेम्पलेट प्रोजेक्ट बनाता हूं, तो मैं एप्लिकेशन चलाता हूं और रूट यूआरएल डिफ़ॉल्ट पैकेज नाम के अंतिम शब्द के रूप में सेट होता है:स्प्रिंगसोर्स आईडीई स्प्रिंग एमवीसी एप्लिकेशन

उदाहरण के लिए, जब मैं प्रोजेक्ट बनाता हूं, तो मैंने डिफ़ॉल्ट पैकेज को com.sample.myapp के रूप में सेट किया है। जब मैं एप्लिकेशन चलाता हूं, तो यह http://localhost:8080/myapp पर खुलता है। रूट यूआरएल मेरे प्रोजेक्ट नाम, MyProject का उपयोग क्यों नहीं करता है?

यह एक समस्या है क्योंकि मुझे अपने आवेदन में सभी यूआरएल /myapp/resources/css/mycss.css पर निर्दिष्ट करना है, लेकिन जब मैं एक .war निर्यात करता हूं और इसे टॉमकैट सर्वर पर तैनात करता हूं, तो टोमकैट परियोजना के नाम की अपेक्षा करता है (यह मुझे उपयोग करना चाहता है /MyProject/resources/css/mycss.css। नतीजतन, मेरे लिंक के सभी टूट रहे हैं जब मैं तैनात (लेकिन जब मैं स्थानीय स्तर पर बिल्ला पर नहीं चल SpringSource आईडीई के भीतर ...)

इस समस्या में किसी और रन है?


नीचे टिप्पणी चर्चा के लिए उदाहरण:

<bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties"> 
    <property name="service" 
     value="https://localhost:8443/MyProject/j_spring_cas_security_check" /> 
    <property name="sendRenew" value="false" /> 
</bean> 

उत्तर

10

यह आप कैसे पर निर्भर करता है (केवल आपके, Maven निर्दिष्ट नहीं किया है ओह अच्छी तरह से महसूस किया) आवेदन चलाओ। मुझे लगता है कि आपने स्प्रिंगसोर्स आईडीई (एसटीएस) के भीतर से "सर्वर पर चलाएं" चुना है? यदि आप एसटीएस में सर्वर परिभाषा पर डबल क्लिक करते हैं, तो आपको एक "मॉड्यूल" टैब दिखाई देगा। वहां से, आप "पथ" को संपादित कर सकते हैं और इसे जो कुछ भी चाहते हैं उसे सेट कर सकते हैं। जब आप "सर्वर पर चलाएं" का चयन करते हैं, तो एसटीएस को संदर्भ पथ को परिभाषित करना होता है और इसे डिफ़ॉल्ट पैकेज के अंतिम तत्व पर डिफ़ॉल्ट रूप से डिफ़ॉल्ट करना होता है। अगर मैं सही ढंग से याद करता हूं, डिफ़ॉल्ट रूप से टोमकैट ज़िप या विस्फोटित .war के फ़ाइल नाम का नाम उपयोग करता है। किसी भी मामले में, आप इसे अधिक सवारी कर सकते हैं।

उम्मीद है कि मदद करता है।

+0

आपकी धारणा सही थी, और यह वही है जो मैं ढूंढ रहा था। आपका बहुत बहुत धन्यवाद! – littleK

+0

अच्छा जवाब, मेरी समस्या हल की गई +1 – SpringLearner

0
एसटीएस के बारे में नहीं

यकीन है, लेकिन युद्ध फ़ाइल नाम पोम फ़ाइल में सेट किया गया है:

</dependencies>  
<build> 
<finalName>yourProject</finalName> 

3

मेजबान और बंदरगाह के बाद यूआरएल में पहला भाग संदर्भ-पथ कहा जाता है। आपके मामले में myapp। टोमकैट में संदर्भ-पथ युद्ध-फ़ाइल के नाम के बराबर है। यदि आप युद्ध फ़ाइल ROOT.war का नाम देते हैं तो कोई संदर्भ-पथ का उपयोग किया जाता है।

जैसा कि बिम्सपी ने उल्लेख किया है कि आप एसटीएस में संदर्भ-पथ भी बदल सकते हैं।

लेकिन: आप अपने ऐप को संदर्भ-पथ से स्वतंत्र कर सकते हैं और बनाना चाहिए। आप JSP उपयोग कर रहे हैं तो <c:url /> टैग के साथ लिंक का निर्माण:

<c:url value="/resources/css/mycss.css" /> 

यह वास्तविक संदर्भ पथ सहित सही यूआरएल आउटपुट। या अपने एक चर में संग्रहीत और बाद में उसका उपयोग कर सकते हैं:

<c:url value="/items/index" var="cancel-url" /> 
<a href="${cancel-url}">Cancel</a> 

जावा कोड में आप के साथ संदर्भ पथ प्राप्त कर सकते हैं:

request.getContextPath() 

जहां अनुरोध वर्तमान HttpServletRequest वस्तु है। इसका उपयोग करके आपका ऐप वास्तविक संदर्भ-पथ से पूरी तरह से स्वतंत्र हो जाता है जो तैनाती को बहुत सरल बनाता है।

+0

यह बहुत जानकारीपूर्ण था, धन्यवाद। मैं इस तरह से देखना शुरू कर रहा था कि मुझे अपने यूआरएल में एप्लिकेशन नाम को हार्ड कोड नहीं करना पड़ेगा, और ऐसा लगता है कि यह चाल करेगा! धन्यवाद! – littleK

+0

फ्लोरियन, एक और सवाल। मेरे पास मेरे एप्लिकेशन कॉन्टैक्ट-सुरक्षा.एक्सएमएल में कुछ यूआरएल भी है जिसमें मैं संदर्भ पथ में हार्डकोड करता हूं। क्या आप यूआरएल को बीन परिभाषाओं के सापेक्ष बनाने के लिए अनुशंसित तरीका जानते हैं? – littleK

+0

यह किस प्रकार का यूआरएल है? यदि यह वसंत-सुरक्षा के लिए है तो केवल संदर्भ-पथ के बिना सापेक्ष यूआरएल प्रदान करें, जैसे: