জাভা ইই ওয়েব অ্যাপ্লিকেশনটিতে ওয়েবে-আইএনএফ কী ব্যবহৃত হয়?


177

আমি নিম্নলিখিত উত্স কোড কাঠামো সহ একটি জাভা ইই ওয়েব অ্যাপ্লিকেশনটিতে কাজ করছি:

src/main/java                 <-- multiple packages containing java classes
src/test/java                 <-- multiple packages containing JUnit tests
src/main/resources            <-- includes properties files for textual messages
src/main/webapp/resources     <-- includes CSS, images and all Javascript files
src/main/webapp/WEB-INF
src/main/webapp/WEB-INF/tags
src/main/webapp/WEB-INF/views

যে বিটটি সম্পর্কে আমি আগ্রহী WEB-INFতা হ'ল - এতে web.xmlসার্ভলেট স্থাপনের জন্য এক্সএমএল ফাইল, স্প্রিং শিমের ওয়্যারিং প্রসঙ্গ এবং জেএসপি ট্যাগ এবং ভিউ রয়েছে।

আমি এই কাঠামোটিকে কীভাবে বাধা / সংজ্ঞা দেয় তা বোঝার চেষ্টা করছি। উদাহরণস্বরূপ, জেএসপি ফাইলগুলি সর্বদা থাকা উচিত WEB-INFবা সেগুলি অন্য কোথাও হতে পারে? এবং অন্য কিছু আছে যা ভিতরে যেতে পারে WEB-INF? উইকিপিডিয়া এর ওয়ার ফাইলগুলিতেclasses জাভা ক্লাস এবং libজেআর ফাইলগুলির জন্য এন্ট্রি উল্লেখ রয়েছে - নিশ্চিত না যে অন্যান্য উত্স ফাইলের অবস্থানের পাশাপাশি যখন এগুলি প্রয়োজন হবে তখন আমি পুরোপুরি উপলব্ধি করেছি।


1
এটি সহায়ক হতে পারে: gordondickens.com/wordpress/2012/07/03/…
স্মুইকিপিডিয়া

1
এফওয়াইআই… সার্লেট পাত্রে কীভাবে লোড হয় WEB-INFএবং অন্যান্য অবস্থানগুলি কীভাবে প্রশ্নটি দেখে তা জানতে, একটি সার্লেটে ক্লাসপথ নিয়ন্ত্রণ করে , বিশেষত এই উত্তরটি
বাসিল বাউর্ক

উত্তর:


216

দ্য সার্ভলেট ২.৪ স্পেসিফিকেশন ওয়েবে -আইএনএফ (পৃষ্ঠা )০) সম্পর্কে এটি বলে:

নামকরণ অ্যাপ্লিকেশন শ্রেণিবদ্ধের মধ্যে একটি বিশেষ ডিরেক্টরি বিদ্যমান WEB-INF। এই ডিরেক্টরিটিতে অ্যাপ্লিকেশন সম্পর্কিত সমস্ত জিনিস রয়েছে যা অ্যাপ্লিকেশনটির নথিতে নেই। নোড আবেদন প্রকাশ্য দলিল বৃক্ষ অংশ নয় । ডিরেক্টরিতে অন্তর্ভুক্ত কোনও ফাইল সরাসরি কোনও ক্লায়েন্টের কাছে ধারক দ্বারা পরিবেশন করা হতে পারে। তবে ডিরেক্টরিটির বিষয়বস্তু সার্ভলেট কোডে ও মেথড কলগুলি তে এবং মেথড কলগুলি ব্যবহার করে দৃশ্যমান এবং কলগুলি ব্যবহার করে উন্মুক্ত করা যেতে পারে ।WEB-INFWEB-INFWEB-INFgetResourcegetResourceAsStreamServletContextRequestDispatcher

এর অর্থ হ'ল WEB-INFসংস্থানগুলি আপনার ওয়েব-অ্যাপ্লিকেশনটির রিসোর্স লোডারটিতে অ্যাক্সেসযোগ্য এবং জনসাধারণের জন্য সরাসরি দৃশ্যমান নয়।

এ কারণেই অনেকগুলি প্রকল্প তাদের সংস্থান যেমন জেএসপি ফাইল, জেআর / লাইব্রেরি এবং তাদের নিজস্ব শ্রেণি ফাইল বা সম্পত্তি ফাইল বা অন্য কোনও সংবেদনশীল তথ্য WEB-INFফোল্ডারে রাখে। অন্যথায় এগুলি একটি সহজ স্ট্যাটিক URL (উদাহরণস্বরূপ CSS বা জাভাস্ক্রিপ্ট লোড করতে দরকারী) ব্যবহার করে অ্যাক্সেসযোগ্য হবে।

প্রযুক্তিগত দৃষ্টিকোণ থেকে আপনার জেএসপি ফাইলগুলি যে কোনও জায়গায় হতে পারে। উদাহরণস্বরূপ বসন্তে আপনি এগুলিকে WEB-INFস্পষ্টভাবে কনফিগার করতে পারেন :

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" 
    p:suffix=".jsp" >
</bean>

WEB-INF/classesএবং WEB-INF/libফোল্ডার উইকিপিডিয়ার উল্লেখ যুদ্ধ ফাইল নিবন্ধ রানটাইম এ সার্ভলেট স্পেসিফিকেশন প্রয়োজনীয় ফোল্ডার উদাহরণ।

কোনও প্রকল্পের কাঠামো এবং ফলস্বরূপ ওয়ার্ড ফাইলের কাঠামোর মধ্যে পার্থক্য তৈরি করা গুরুত্বপূর্ণ।

প্রকল্পের কাঠামোটি কিছু ক্ষেত্রে ওয়ার ফাইলের কাঠামোর আংশিক প্রতিফলন ঘটবে (স্ট্যাটিক রিসোর্সের জন্য যেমন জেএসপি ফাইল বা এইচটিএমএল এবং জাভাস্ক্রিপ্ট ফাইলগুলি, তবে এটি সবসময় হয় না।

প্রকল্পের কাঠামো থেকে ফলাফল ওয়ার ফাইলটিতে রূপান্তরটি একটি বিল্ড প্রক্রিয়া দ্বারা সম্পন্ন হয়।

আপনি সাধারণত নিজের বিল্ড প্রক্রিয়াটি ডিজাইনের জন্য নিখরচায় থাকাকালীন আজকাল বেশিরভাগ লোকেরা আপাচি মাভেনের মতো একটি মানক পদ্ধতির ব্যবহার করবে । অন্যান্য জিনিসের মধ্যে মাভেন ডিফল্টগুলি সংজ্ঞায়িত করে যার জন্য প্রকল্প কাঠামো মানচিত্রে সংস্থানগুলি কী কী সংস্থানগুলিতে ফলাফল প্রাপ্ত শিল্পীকরণের (ফলাফলস্বরূপ শৈল্পিক এই ক্ষেত্রে ওয়ার ফাইল)। কিছু ক্ষেত্রে ম্যাপিংয়ের ক্ষেত্রে একটি সরল অনুলিপি প্রক্রিয়া থাকে অন্য ক্ষেত্রে ম্যাপিং প্রক্রিয়াতে রূপান্তর অন্তর্ভুক্ত থাকে যেমন ফিল্টারিং বা সংকলন এবং অন্যান্য।

একটি উদাহরণ : WEB-INF/classesফোল্ডারে পরে সমস্ত সংকলিত জাভা ক্লাস এবং সংস্থান ( src/main/javaএবং src/main/resources) থাকবে যা অ্যাপ্লিকেশনটি শুরু করার জন্য ক্লাসলোডার দ্বারা লোড করা দরকার।

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



2
Servlet 3.0 এবং 3.1 ( জেএসআর 340 ) এর পরিবর্তন WEB-INF / lib এ সঞ্চিত JAR এর মধ্যে থেকে স্থিতিশীল সংস্থান এবং JSP গুলি সরবরাহ করার অনুমতি দেয় allows সার্ভলেট ৩.১ অনুচ্ছেদের অংশটি ১০.৫ উদ্ধৃত করা: WEB-INF / lib ডিরেক্টরিতে থাকা একটি JAR ফাইলের মেটা- INF / সংস্থাগুলিতে প্যাকেটযুক্ত স্ট্যাটিক রিসোর্স এবং জেএসপি ব্যতীত WEB-INF ডিরেক্টরিতে থাকা অন্য কোনও ফাইল হতে পারে না ধারক দ্বারা সরাসরি একটি ক্লায়েন্ট পরিবেশন করা। : তাই ব্যতিক্রম শুধুমাত্র এতে প্রয়োগ WAR> WEB-INF> lib> JARফাইল>resources
বেসিল Bourque

1
ওহো, উপরে, পরিবর্তন আমার মন্তব্য যে শেষ বাক্য থেকে: স্ট্যাটিক ফাইল থেকে কাজ করা যেতে পারে WARফাইল> WEB-INF> lib> JARফাইল> META-INF> resources> yourStaticFilesGoHere
তুলসী বার্ক

@ এমএইচডাব্লু আমি আপনাকে নতুন উত্তর 3 সেকশন দিয়ে নিজের উত্তরটি সংশোধন করার পরামর্শ দিচ্ছি এবং আপনার বর্তমান সামগ্রীটি একটি সার্লেট 2 বিভাগ হিসাবে লেবেল করব।
তুলসী বার্ক

61

আপনি যখন কোনও জাভা ইই ওয়েব অ্যাপ্লিকেশন স্থাপন করেন (ফ্রেমওয়ার্কগুলি ব্যবহার করেন বা না), এর কাঠামোটি অবশ্যই কিছু প্রয়োজনীয়তা / নির্দিষ্টকরণ অনুসরণ করবে। এই বৈশিষ্ট্যগুলি থেকে আসে:

  • সার্লেট পাত্রে (যেমন টমক্যাট)
  • জাভা সার্লেট এপিআই
  • আপনার অ্যাপ্লিকেশন ডোমেন
  1. সার্লেট ধারক প্রয়োজনীয়তা
    আপনি যদি অ্যাপাচি টমক্যাট ব্যবহার করেন তবে আপনার অ্যাপ্লিকেশনটির মূল ডিরেক্টরিটি ওয়েব অ্যাপ্লিকেশন ফোল্ডারে অবশ্যই স্থাপন করা উচিত। আপনি যদি অন্য কোনও সার্লেট পাত্রে বা অ্যাপ্লিকেশন সার্ভার ব্যবহার করেন তবে এটি ভিন্ন হতে পারে।

  2. জাভা সার্লেট এপিআই প্রয়োজনীয়তা
    জাভা সার্লেট এপিআইতে বলা হয়েছে যে আপনার মূল অ্যাপ্লিকেশন ডিরেক্টরিটিতে অবশ্যই নিম্নলিখিত কাঠামো থাকতে হবে:

    ApplicationName
    |
    |--META-INF
    |--WEB-INF
          |_web.xml       <-- Here is the configuration file of your web app(where you define servlets, filters, listeners...)
          |_classes       <--Here goes all the classes of your webapp, following the package structure you defined. Only 
          |_lib           <--Here goes all the libraries (jars) your application need

এই প্রয়োজনীয়তাগুলি জাভা সার্লেটলেট এপিআই দ্বারা সংজ্ঞায়িত করা হয়েছে।

৩. আপনার অ্যাপ্লিকেশন ডোমেন
এখন আপনি সার্লেট ধারক (বা অ্যাপ্লিকেশন সার্ভার) এবং জাভা সার্লেটলেট এপিআই প্রয়োজনীয়তাগুলি অনুসরণ করেছেন, আপনি যা প্রয়োজন তার উপর ভিত্তি করে আপনি আপনার ওয়েব অ্যাপের অন্যান্য অংশগুলি সংগঠিত করতে পারেন।
- আপনি আপনার অ্যাপ্লিকেশন রুট ডিরেক্টরিতে আপনার সংস্থানগুলি (জেএসপি ফাইলগুলি, প্লেইন টেক্সট ফাইলগুলি, স্ক্রিপ্ট ফাইলগুলি) রাখতে পারেন। কিন্তু তারপরে, লোকেরা তাদের অ্যাপ্লিকেশন দ্বারা সরবরাহিত কিছু যুক্তি দ্বারা তাদের অনুরোধগুলির পরিবর্তে সরাসরি তাদের ব্রাউজার থেকে এগুলি অ্যাক্সেস করতে পারে। সুতরাং, আপনার সংস্থানগুলিকে এর মতো সরাসরি অ্যাক্সেস না হওয়া থেকে রক্ষা করতে আপনি সেগুলি WEB-INF ডিরেক্টরিতে রাখতে পারেন, যার বিষয়বস্তু কেবল সার্ভার দ্বারা অ্যাক্সেসযোগ্য।
- আপনি যদি কিছু ফ্রেমওয়ার্ক ব্যবহার করেন তবে এগুলি প্রায়শই কনফিগারেশন ফাইল ব্যবহার করে। এই ফ্রেমওয়ার্কগুলির বেশিরভাগ (স্ট্রুটস, স্প্রিং, হাইবারনেট) আপনাকে তাদের কনফিগারেশন ফাইলগুলি ক্লাসপথে ("শ্রেণি" ডিরেক্টরি) স্থাপন করা প্রয়োজন।


12

আপনি ওয়েব-আইএনএফ কোনও পৃষ্ঠা, বা পৃষ্ঠাগুলির টুকরো স্থাপন করা উচিত, যা আপনি সর্বজনীন হতে চান না। সাধারণত, জেএসপি বা ফেসলেটগুলি ওয়েবে-আইএনএফের বাইরে পাওয়া যায় তবে এই ক্ষেত্রে এগুলি যে কোনও ব্যবহারকারীর জন্য সহজেই অ্যাক্সেসযোগ্য। আপনার যদি কিছু অনুমোদনের সীমাবদ্ধতা থাকে তবে ওয়েবে-আইএনএফ এর জন্য ব্যবহার করা যেতে পারে।

ওয়েব-আইএনএফ / লিবিতে তৃতীয় পক্ষের লাইব্রেরি থাকতে পারে যা আপনি সিস্টেম পর্যায়ে প্যাক করতে চান না (জেআরগুলি আপনার সার্ভারে চলমান সমস্ত অ্যাপ্লিকেশনের জন্য উপলব্ধ হতে পারে), তবে কেবল এই বিশেষ অ্যাপ্লিকেশনটির জন্য।

সাধারণভাবে বলতে গেলে, অনেকগুলি কনফিগারেশন ফাইলগুলি ওয়েবে-আইএনএফ-এও যায়।

ওয়েব-আইএনএফ / ক্লাসগুলির ক্ষেত্রে - এটি যে কোনও ওয়েব-অ্যাপে বিদ্যমান, কারণ এটি সেই ফোল্ডার যেখানে সমস্ত সংকলিত উত্স স্থাপন করা হয় (জআআরএস নয়, তবে জাভা ফাইলগুলি যে আপনি নিজেরাই লিখেছিলেন) সংকলিত।


4

সুরক্ষা কারণে এই সম্মেলনটি অনুসরণ করা হয়। উদাহরণস্বরূপ, যদি অননুমোদিত ব্যক্তিকে সরাসরি ইউআরএল থেকে রুট জেএসপি ফাইল অ্যাক্সেসের অনুমতি দেওয়া হয় তবে তারা কোনও প্রমাণীকরণ ছাড়াই পুরো অ্যাপ্লিকেশনটির মাধ্যমে নেভিগেট করতে পারে এবং তারা সমস্ত সুরক্ষিত ডেটা অ্যাক্সেস করতে পারে।


জেএসপি ফাইলটি এখনও কোনও অনুরোধের সেশনের সন্ধান করবে না? এবং যদি এটির কোনও সন্ধান না করে তবে এটি সাইটের কিছু অংশ প্রদর্শন করবে না।
পার্সিকার

3

ওয়েবে-আইএনএফ ডিরেক্টরিতে jsp পৃষ্ঠাগুলি স্থাপনের একটি কনভেনশন রয়েছে (প্রয়োজনীয় নয়) যাতে তারা গভীর লিঙ্কযুক্ত বা বুকমার্ক করতে না পারে। এই ভাবে jsp পৃষ্ঠাতে সমস্ত অনুরোধগুলি অবশ্যই আমাদের অ্যাপ্লিকেশনটির মাধ্যমে নির্দেশিত হওয়া উচিত, যাতে ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.