2009-12-28 17 views
28

के लिए अस्थायी डेटा संग्रहीत करने का सर्वोत्तम अभ्यास मेरा नवीनतम प्रोजेक्ट डेटाबेस से जानकारी के साथ दस्तावेज़ उत्पन्न करने में सक्षम है।वेबपैप

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

बाद में उपयोगकर्ता को मेरे वेबपैड से एक डाउनलोड लिंक के माध्यम से अपने दस्तावेज़ से सम्मानित किया जाता है।

मेरा प्रश्न: क्या वेबपैड डेटा संग्रहीत करने के लिए कोई सर्वोत्तम अभ्यास है? मैंने सोचा कि temp इसके लिए अच्छा होगा। लेकिन चूंकि मुझे डेटा खुद को हटाना है, इसलिए मैंने इसे अपने वॉर फ़ोल्डर के अलावा टॉमकैट वेबपैप फ़ोल्डर में रखने का विचार किया।

मैं विंडोज 2003 का उपयोग टॉमकैट के साथ एक मेजबान सिस्टम के रूप में करता हूं। मैं अपने प्रोजेक्ट के लिए Grails, Java और Maven का उपयोग करता हूं ... यह नहीं पता कि यह जानकारी आवश्यक है या नहीं।

संपादित करें:
मुख्य कारण है कि मैं पूछता हूँ इस तुच्छ सवाल यह है कि ... अगर मैं बनाने/मेरी अस्थायी डेटा को हटाने का ख्याल रखना ... यह अभी भी सिस्टम पर अस्थायी फ़ोल्डर का उपयोग करने के लिए एक अच्छा अभ्यास है? मैं इस बारे में निश्चित नहीं हूँ ...

उत्तर

33

जब webapp में (संवेदनशील) उपयोगकर्ता-विशिष्ट फ़ाइलों को संग्रहीत करने, सुनिश्चित करें कि आप इसे /WEB-INF में कहीं संग्रहीत और Servlet जो (परोक्ष रूप से) उपयोगकर्ता द्वारा प्रवेश की जाँच करता है के साथ उन तक पहुँचने, अन्यथा यह विश्वव्यापी वेब पर किसी भी उपयोगकर्ता/हैकर के लिए सुलभ है। लाभ यह है कि यह आसानी से ServletContext#getResource() या #getRealPath() द्वारा प्रोग्रामेटिक रूप से सुलभ है। नुकसान यह है कि जब भी आप वेबपैप को फिर से तैनात करते हैं तो वे खो जाएंगे।

आप उन्हें डिफ़ॉल्ट अस्थायी फ़ोल्डर में भी स्टोर कर सकते हैं। इसका फायदा यह है कि यह मानक एपीआई जैसे File#createTempFile() या System.getProperty("java.io.tmpdir") द्वारा सुलभ है। अस्थायी फ़ोल्डर का नुकसान यह है कि ओएस-नियंत्रित फ़ोल्डर क्लीनअप जावा से नियंत्रित नहीं है, इसलिए जब भी आप संसाधन बंद करते हैं तो आप खोने वाली चीजों को जोखिम दे सकते हैं लेकिन फिर भी इसकी आवश्यकता है।

आप उन्हें वेबपैड के बाहर एक निश्चित फ़ोल्डर में भी स्टोर कर सकते हैं। इसका लाभ यह है कि जब भी आप वेबपैप को फिर से तैनात करते हैं तो सामान खो नहीं जाता है। नुकसान यह है कि आपको अपने आप को पर्याप्त ओएस अधिकारों के साथ फ़ोल्डर बनाने की आवश्यकता है, जो कि तृतीय पक्ष होस्ट में लागू नहीं हो सकता है।

अपने स्वयं के अस्थायी संसाधनों को साफ करना निश्चित रूप से उन कार्यों से संबंधित है जिन्हें आपको स्वयं करने की आवश्यकता है। मैं इसे चिंता के रूप में नहीं मानूंगा।

बस फायदे/नुकसान से अधिक है।

+0

मुझे पता है कि ओएस अस्थायी फ़ोल्डर को साफ करने का फैसला कर सकते नहीं था। क्या आप इसे विस्तार में बताने में सक्षम हैं? –

+1

अधिकांश सर्वर सिस्टम एक दिन/सप्ताह/महीने में एक बार क्रॉन नौकरी चलाते हैं जो एन दिनों से पुरानी सभी फ़ाइलों को/tmp से हटा देता है। यह सुनिश्चित करने के लिए है कि डिस्क स्थान समाप्त नहीं होता है क्योंकि कोई खुद को साफ करने के लिए भूल गया है। –

+1

@EliAcherkan: 'tmp' को घंटी बजाना चाहिए –

5

मुझे विश्वास है कि अस्थायी फ़ाइलें अस्थायी फ़ोल्डर में हैं। आपके मामले में, आप फ़ाइलों को स्वयं हटाते हैं, लेकिन अगर फ़ाइल हटाना ऑपरेशन में कोई बग है तो क्या होगा? या फाइलों को हटाए जाने से पहले सर्वर बंद होने पर क्या होगा? यदि आप एक अस्थायी फ़ोल्डर में लिखते हैं, तो कम से कम कुछ आशा है कि फ़ाइलों को बाद में साफ किया जाएगा (मैन्युअल रूप से या कुछ प्रक्रिया द्वारा)।

यहां तक ​​कि जब कोई एप्लिकेशन लगातार डेटा (यानी अस्थायी नहीं) को स्टोर करना चाहता है, तो मुझे लगता है कि इसे अभी भी टोमकैट निर्देशिका में संग्रहीत नहीं किया जाना चाहिए, क्योंकि जब भी आप अपने नए संस्करण को तैनात करते हैं तो उन निर्देशिकाओं को हटाया या ओवरराइट किया जाता है आवेदन (या टॉमकैट का एक नया संस्करण भी स्थापित करें)।

उपयोगी तरीके:

12
  • वेब अनुप्रयोग फ़ोल्डर के भीतर सूचना भंडारण हमेशा काम नहीं करता। कुछ एप्लिकेशन सर्वर तैनात WAR फ़ाइल का विस्तार नहीं करते हैं और इसलिए वेब अनुप्रयोग के लिए कोई "कार्यशील निर्देशिका" नहीं है। कुछ sys व्यवस्थापक भी वेब अनुप्रयोग फ़ाइल सिस्टम पहुंच को रोकते हैं (जो सुरक्षा प्रबंधक नीतियों पर निर्भर करता है)।
  • अस्थायी फ़ाइलों का उपयोग, अस्थायी डेटा के लिए किया जाना चाहिए। डेटा जिसे मांग पर पुनर्निर्मित किया जा सकता है। अस्थायी फ़ाइलों का उपयोग न करें जिन्हें उपयोगकर्ताओं द्वारा डाउनलोड किया जाना चाहिए। जैसे जब आपका सिस्टम सोचता है कि इसे अस्थायी फ़ाइलों को साफ़ करना चाहिए या जब आप एप्लिकेशन सर्वर को पुनरारंभ करते हैं, तो उपयोगकर्ता अभी भी इन फ़ाइलों को डाउनलोड करना चाहता है हालांकि वे औसत समय में हटा दिए जा सकते हैं।
  • ऐसे डेटा को स्टोर करने के लिए सही जगह डेटाबेस है। आपके दस्तावेज़ अस्थायी फ़ाइलों के माध्यम से वास्तव में अस्थायी नहीं हैं। दस्तावेज़ों को संग्रहीत करने के लिए डेटाबेस का उपयोग करें और डेटाबेस के लिए दस्तावेज़ों के लिए कैश के रूप में उपयोग करें। फिर आप अपनी खुद की सफाई रणनीति लागू कर सकते हैं। यह एक सतत भंडारण के रूप में भी कार्य करता है, इसलिए आपको सर्वर पुनरारंभ करने की चिंता करने की आवश्यकता नहीं है। साथ ही, आपके पास अतिरिक्त मेटा-डेटा हो सकता है, जैसे कि अंतिम एक्सेस टाइम या एक्सेस काउंटर और आसानी से उपयोगकर्ता को बनाए गए दस्तावेज़ों की एक सूची प्रदान करता है। यदि आपके दस्तावेज़ प्रसंस्करण लाइब्रेरी को मैनिपुलेशन के लिए java.io.File की आवश्यकता है, तो केवल दस्तावेज़ को डेटाबेस से एक temp फ़ाइल में संग्रहीत करें, प्रसंस्करण प्रारंभ करें और उसे डेटाबेस में वापस पढ़ें।

    सर्वलेट कल्पना SRV.3.7.1 अस्थाई कार्य निर्देशिकाएँ

    एक अस्थायी संग्रह निर्देशिका प्रत्येक सर्वलेट संदर्भ के लिए आवश्यक है:

6

एक वेब कंटेनर एक संदर्भ विशेषता है कि एक अस्थायी निर्देशिका के लिए अंक प्रदान करता है। सर्वलेट कंटेनरों को प्रति सर्वलेट संदर्भ के लिए एक निजी अस्थायी निर्देशिका प्रदान करनी होगी, और को ServletContext.TEMPDIR (javax.servlet.context.tempdir) संदर्भ विशेषता के माध्यम से उपलब्ध कराएं। विशेषता के साथ जुड़े ऑब्जेक्ट्स java.io.File प्रकार का होना चाहिए।

उदाहरण:

File appTempDir = getServletContext().getAttribute(ServletContext.TEMPDIR); 
File tempFile = File.createTempFile("process1", ".txt", appTempDir); 
tempFile.deleteOnExit(); 
try { 
    ... 
} finally { 
    tempFile.delete(); 
} 
+2

बस इसमें जोड़ने के लिए: 'फ़ाइल tmpDir = (फ़ाइल) getServletContext() प्राप्त करें। GetAttribute (ServletContext.TEMPDIR);' आपको सर्वलेट कंटेनर द्वारा प्रदान किए गए वर्तमान वेबपैप के लिए अस्थायी फ़ाइल निर्देशिका मिलेगी। – megaflop

+0

यह कोड मान्य प्रतीत नहीं होता है ... – Jeef

+0

@Jeef आप ऐसा क्यों सोचते हैं? – dajood

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