2009-06-22 18 views
13

example documentation कहती है कि आपको बस अपनी फाइलें युद्ध/(या एक उपनिर्देशिका) में रखने की आवश्यकता है और उन्हें मेजबान से एक्सेस किया जाना चाहिए (जब तक वे जेएसपी नहीं हैं या वेब-आईएनएफ में)। उदाहरण के लिए, यदि आप युद्ध में foo.css डालते हैं/तो आप इसे http://localhost:8080/foo.css पर एक्सेस करने में सक्षम होना चाहिए। हालांकि, यह मेरे लिए बिल्कुल काम नहीं कर रहा है। मेरी स्थिर फाइलों में से कोई भी सुलभ नहीं है।(जावा) ऐप इंजन में स्थिर फाइलें

appengine-web.xml पर दस्तावेज़ कहते हैं कि आप विशेष रूप से कुछ प्रकार के स्थिर के रूप में भी निर्दिष्ट कर सकते हैं। मैंने यह भी कोशिश की है और इससे कोई फर्क नहीं पड़ता।

क्या मुझे कुछ याद आ रही है?

अद्यतन: मेरे वेब.एक्सएमएल में मैपिंग में से एक को थोड़ा आक्रामक था।

<servlet> 
    <servlet-name>Main</servlet-name> 
    <servlet-class>MainServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Main</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

ऐसा लगता है कि यह सब कुछ है कि अन्य नियमों में से एक हो पकड़ा नहीं किया गया था हथियाने गया था, जो मुझे समझ नहीं आता, क्योंकि वहाँ था url- के अंत पर कोई *: निम्नलिखित अपराधी था पैटर्न। यह भी सीधे the documentation जो कहता है के विपरीत हो रहा है:

नोट: स्टेटिक फ़ाइलें, फ़ाइलों कि इस तरह की छवियों, सीएसएस या जावास्क्रिप्ट के रूप में उपयोगकर्ताओं के लिए शब्दशः सेवा कर रहे हैं, तैनाती डिस्क्रिप्टर में उल्लेख किया रास्तों से अलग से नियंत्रित किया जाता है । एक यूआरएल पथ के लिए अनुरोध जो WAR में फ़ाइल के पथ से मेल खाता है जिसे स्थिर फ़ाइल माना जाता है, परिनियोजन वर्णनकर्ता में सर्वलेट और फ़िल्टर मैपिंग के बावजूद फ़ाइल की सेवा करेगा। आप appengine-web.xml फ़ाइल का उपयोग कर स्थिर फ़ाइलों के रूप में उन लोगों से फ़ाइलों को बहिष्कृत कर सकते हैं।

तो, मेरे पास एक नियम है जो मेरे डोमेन के आधार से मेल खाता है (उदाहरण के लिए http://www.example.com/) और फिर भी स्थिर फ़ाइलों को फ़िल्टर करने की अनुमति देता है?

+0

नमूने है कि एसडीके काम के साथ आते हैं? आवेदन कैसे लॉन्च करें। मुझे लगता है कि आप पहले ही जांच चुके हैं कि फाइलें वास्तव में युद्ध में हैं/ – jitter

+0

हाँ, अतिथि पुस्तिका ऐप मुझे इसकी सीएसएस फ़ाइल को ठीक करने देता है। –

उत्तर

-2

इस तरह पैटर्न निर्दिष्ट करने के लिए स्थिर फ़ाइलों की सेवा के लिए, उदा, बिल्ला का उपयोग करते समय एक है:

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.css</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>*.js</url-pattern> 
</servlet-mapping> 

शायद तुम भी ऐसा ही करने की कोशिश कर सकते?

11

मैन्युअल

<static-files> 
    <include path="/favicon.ico" expiration="1d" /> 
    <include path="/static/**" /> 
    <include path="/**.css" />  
</static-files> 

यह भी

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

और

तरह सर्वलेट्स के साथ मेरे लिए काम करता है जैसे ऐप्लिकेशन इंजन-web.xml में स्टैटिक फ़ाइलें को परिभाषित करने का प्रयास करें
<servlet-mapping> 
<servlet-name>testServlet</servlet-name> 
<url-pattern>/*</url-pattern> 
</servlet-mapping> 

Static Files and Resource Files

देखें
2

... ऐसा लगता है कि यह उन सभी चीजों को पकड़ रहा था जो पकड़े नहीं गए थे, जिन्हें मैं समझ नहीं पाया क्योंकि यूआरएल-पैटर्न के अंत में कोई नहीं था। ...

[[दुर्भाग्य से, शब्द "डिफ़ॉल्ट सर्वलेट" शब्द अलग-अलग चीजों के लिए अधिभारित है - भ्रम की ओर अग्रसर है। मैं स्पष्ट होने की कोशिश करूंगा।]]

यूआरएल-पैटर्न "/" विशेष है (दुष्ट वेव इसे "डिफ़ॉल्ट मानचित्रण" कहते हैं)।यह एप्लिकेशन के "डिफ़ॉल्ट सर्वलेट" को परिभाषित करता है, जिसका उपयोग तब किया जाता है जब यूआरएल अनुरोध अन्य पैटर्न से मेल नहीं खाता (SRV.11.2 बुलेट 3 और एसआरवी 11.1 आइटम # 4)। जाहिर है, "/" को संभाला जाता है जैसे आपने "/ *" निर्दिष्ट किया है।

... यह भी सीधे प्रलेखन के विपरीत हो रहा है ...

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

मुझे आश्चर्य है कि क्या होगा यदि आपने एक स्थिर फ़ाइल से मेल खाने वाले यूआरएल पैटर्न के लिए सर्वलेट निर्दिष्ट करने का प्रयास किया। क्या यह फ़ाइल (जैसा कि दस्तावेज़ों द्वारा इंगित किया गया है) की सेवा करेगा या सर्वलेट को आमंत्रित करेगा (जैसा कि इस सिद्धांत द्वारा इंगित किया गया है)।

... तो, मैं एक नियम है कि मेरे डोमेन (जैसे। http://www.example.com/) के आधार से मेल खाता है और अभी भी अनुमति देता है स्थिर फ़ाइलों के माध्यम से फिल्टर करने के लिए हो सकता है? ...

सिद्धांत सही है, तो याकूब द्वारा प्रदान समाधान (गूगल एप इंजन के लिए अनुकूलित) और zockman की तरह वे काम करेंगे लगता है - वे कंटेनर की "डिफ़ॉल्ट" के लिए स्टैटिक फ़ाइलें नक्शा "डिफ़ॉल्ट सर्वलेट "।

मेरे पास एकमात्र अन्य विचार है कि यह देखने के लिए कि क्या अनुरोध "/" है या नहीं, यह देखने के लिए आपके ऐप के "डिफ़ॉल्ट सर्वलेट" को लिखना है। यदि ऐसा है, तो इसे संभाल लें। यदि नहीं, तो (किसी भी तरह) अनुरोध को संसाधित करने के लिए कंटेनर के "डिफ़ॉल्ट" "डिफ़ॉल्ट सर्वलेट" का आह्वान करें (जो उम्मीद है कि फ़ाइल को कैश करेगा)। उम्मीद है कि, एक बार स्थिर फ़ाइल एक बार सेवा दी गई है, तो कैशिंग भविष्य में सर्वलेट को बाईपास कर देगी।

क्षमा करें, मैं अधिक विशिष्ट नहीं हो सकता या कोड प्रदान नहीं कर सकता - मैंने Google ऐप इंजन (अभी तक!) के साथ काम नहीं किया है।


रेफरी:

+1

[यह क्यू एंड ए] (http://stackoverflow.com/a/3505227/4270992) इस पागल समस्या के पागल जवाब पर आ गया है। – Nick

1

मुझे एहसास है कि यह वास्तव में एक पुराना सवाल है लेकिन मैं बस एक ही समस्या में भाग गया। मैंने css/*.css, js/*.css, और favicon.ico/war/static/ के तहत रखा था और /static पर इंगित करने के लिए में public_root निर्देश का उपयोग किया था। यह मेरे स्थानीय देव सर्वर पर ठीक काम करता था लेकिन जब मैंने ऐप अपलोड नहीं किया था। /static से छुटकारा पाएं और मेरे लिए एक स्तर पर सबकुछ बढ़ाना।

एसडीके v1.5.2 (जावा) पर मैक OSX 10.6.8 जावा SE 6 के साथ (MacOS एक्स डिफ़ॉल्ट)

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