আমাদের যুদ্ধ / WEB-INF ফোল্ডারে রিসোর্সের ফাইল ফাইল?


95

আমি আমার অ্যাপ ইঞ্জিন প্রকল্পের আমার যুদ্ধ / WEB-INF ফোল্ডারে একটি ফাইল পেয়েছি। আমি প্রায়শই জিজ্ঞাসিত প্রশ্নে পড়েছি যে আপনি সেখান থেকে কোনও সার্লেট প্রসঙ্গে একটি ফাইল পড়তে পারেন। আমি কীভাবে উত্সের পথটি তৈরি করব জানি না:

/war/WEB-INF/test/foo.txt

উপরের মতো ঠিক কীভাবে ফাইল () ব্যবহার করার জন্য আমি কীভাবে সেই সংস্থানটিতে আমার পথটি তৈরি করব?

ধন্যবাদ

উত্তর:


138

এটি করার কয়েকটি উপায় রয়েছে। যতক্ষণ না ওয়ার ফাইলটি প্রসারিত হবে (এক .war ফাইলের পরিবর্তে ফাইলগুলির একটি সেট), আপনি এই API টি ব্যবহার করতে পারেন:

ServletContext context = getContext();
String fullPath = context.getRealPath("/WEB-INF/test/foo.txt");

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/SerletContext.html#getRealPath(java.lang.String)

এটি আপনাকে যে সংস্থানটি সন্ধান করছে তার পুরো সিস্টেমের পথ পাবে। তবে সার্ভলেট কনটেইনার কখনও ওয়ার ফাইলটি (টমক্যাটের মতো) প্রসারিত না করলে এটি কাজ করবে না। সার্ভলেট কনটেক্সট এর getResourceপদ্ধতিগুলি ব্যবহার করে কী কাজ করবে ।

ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/test/foo.txt");

অথবা বিকল্পভাবে যদি আপনি কেবল ইনপুট স্ট্রিমটি চান:

InputStream resourceContent = context.getResourceAsStream("/WEB-INF/test/foo.txt");

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/SerletContext.html#getResource(java.lang.String)

পরের পন্থাটি আপনি যে কোনও সার্লেট পাত্রে ব্যবহার করেন এবং অ্যাপ্লিকেশনটি কোথায় ইনস্টল করা হবে তা বিবেচনা করেই কাজ করবে। প্রাক্তন পদ্ধতির কাজ কেবলমাত্র ওয়ার্ড ফাইল মোতায়েনের আগে আনজিপ করা থাকলে।

সম্পাদনা: getContext () পদ্ধতিটি অবশ্যই আপনাকে প্রয়োগ করতে হবে। জেএসপি পৃষ্ঠাগুলি এটি contextক্ষেত্র হিসাবে উপলব্ধ করে । একটি সার্লেটে আপনি এটি আপনার কাছ থেকে পাবেন ServletConfigযা সার্লেটের init()পদ্ধতিতে পাস করা হবে । আপনি যদি সেই সময়ে এটি সঞ্চয় করেন তবে তার পরে আপনি যে কোনও সময় আপনার সার্লেটলেট কনটেক্সটটি পেতে পারেন।


4
এটি উল্লেখ করার মতো যে এটির কাজটি করার জন্য আমার প্রাথমিক / পাত্রে প্রবেশ করা দরকার, যেমন: প্রসঙ্গ.সেটআর রিসোর্সএস্ট্রিম ("/ ওয়েবে-আইএনএফ / পরীক্ষা / foo.txt");
মিক সিয়ার

4
অ্যাপেনজিনে এতটা সহজ কাজ করে না, যেমন প্রশ্নটির জন্য ট্যাগ করা হয়।
রেনাসিয়েনজা

4
এটি 6 বছর আগে সঠিক উত্তর হিসাবে চিহ্নিত করা হয়েছিল। হয় গুগল অ্যাপ ইঞ্জিন এপিআই পরিবর্তন করেছে অথবা আপনার স্থাপনার মধ্যে একটি বাগ রয়েছে। যদি আপনি একটি স্ট্যান্ডার্ড সার্লেট চালাচ্ছেন তবে আপনার context.getResourceAsStream()প্রকরণটি ব্যবহার করতে সক্ষম হওয়া উচিত ।
বেরিন লরিটস

4
এটি দুর্দান্ত বলে মনে হচ্ছে তবে আমি জাভা ১.৮ ব্যবহার করছি এবং getContext () ডিফল্টরূপে বিদ্যমান নেই, কোন জার ফাইলটি এটি ব্যবহার করার প্রয়োজন?
f1wade

4
সার্লেটলেট কনটেক্সট javax.servletআপনার জে 2 ই ই লাইব্রেরির প্যাকেজের অংশ । আপনি সার্লেট ক্লাস (যার অর্থ প্রসারিত হয় java.servlet.GenericServlet) থেকে এটির একটি রেফারেন্স পাবেন । বিটিডাব্লু, জেনেরিক সার্লেটের এখন ডকস.অরাকল.com/ জাভা / / / এপি / জাভাক্স / সার্লেট / …এর জন্য একটি পদ্ধতি getServletContext() রয়েছে
বারিন লরিটস

3

এখন জাভা ইই 7 এর সাহায্যে আপনি আরও সহজে রিসোর্সটি খুঁজে পেতে পারেন

InputStream resource = getServletContext().getResourceAsStream("/WEB-INF/my.json");

https://docs.oracle.com/javaee/7/api/javax/servlet/ জেনেরিক সার্লেট html#getServletContext--


কোথা getServletContext()থেকে আসে?
অ্যাডাম হুরউইজ

অ্যাডাম আপনি এটি জাভা সার্লেট ৩.১ এর পরে পাবেন।
ড্যানিয়েল ডি লিয়ন

1

আমি জানি এটি দেরি হয়ে গেছে, তবে আমি সাধারণত এটি এটি করি,

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();           
InputStream stream = classLoader.getResourceAsStream("../test/foo.txt");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.