java Servlets কিভাবে কাজ করে? Instantiation, সেশন, শেয়ার ভেরিয়েবল এবং multithreading




3 Answers

দায়রা

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

Servlet Instantiation

লোড-অন-স্টার্টআপ মিথ্যা হলে :

লোড-অন-স্টার্টআপ সত্য হলে :

সে একবার পরিষেবা মোডে এবং খাঁজ উপর, একই servlet সমস্ত অন্যান্য ক্লায়েন্টদের অনুরোধে কাজ করবে।

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

এটি যদিও একটি ছোট ঝুঁকি সঙ্গে আসে। মনে রাখবেন: এই একক লোকটি তার পকেটে সমস্ত অর্ডার তথ্য রাখে: তাই যদি আপনি সার্লেটগুলিতে থ্রেড নিরাপত্তা সম্পর্কে সতর্ক না হন তবে সেটি নির্দিষ্ট ক্লায়েন্টকে ভুল অর্ডার দিতে পারে।

java multithreading servlets session-variables instance-variables

ধরুন, আমার একটি ওয়েব সার্ভার রয়েছে যা অনেক servlets ধারণ করে। যারা servlets মধ্যে ক্ষণস্থায়ী তথ্য জন্য আমি সেশন এবং ইনস্ট্যান্স ভেরিয়েবল সেটিং করছি।

এখন, যদি 2 বা ততোধিক ব্যবহারকারী এই সার্ভারকে অনুরোধ পাঠায় তাহলে সেশন ভেরিয়েবলগুলির কী হবে? তারা সব ব্যবহারকারীদের জন্য সাধারণ হবে অথবা তারা প্রতিটি ব্যবহারকারীর জন্য আলাদা হবে। যদি তারা আলাদা হয় তবে কিভাবে সার্ভার বিভিন্ন ব্যবহারকারীদের মধ্যে পার্থক্য করতে সক্ষম হয়েছিল?

একাধিক অনুরূপ প্রশ্ন, যদি কোনও বিশেষ সার্লেট অ্যাক্সেস করার জন্য n ব্যবহারকারীরা থাকে, তবে এই সর্লেটটি প্রথম ব্যবহারকারীর অ্যাক্সেসের প্রথমবারের মতো তা তাত্ক্ষণিকভাবে বা তা সব ব্যবহারকারীদের জন্য তাত্ক্ষণিকভাবে তাত্ক্ষণিক হয়ে যায়? অন্য কথায়, ঘটনা ভেরিয়েবল কি ঘটবে?




সার্লেট কন্টেইনার (যেমন Apache Tomcat) শুরু হলে, এটি ওয়েব.এক্সএমএল ফাইল (শুধুমাত্র একটি প্রতি অ্যাপ্লিকেশন থেকে) পড়বে যদি কিছু ভুল হয় বা কন্টেইনার সাইড কনসোলে একটি ত্রুটি দেখা দেয়, অন্যথা, এটি সমস্ত ওয়েব স্থাপন এবং লোড করবে web.xml ব্যবহার করে অ্যাপ্লিকেশন (তাই এটি স্থাপনা বর্ণনাকারী হিসাবে নামকরণ)।

Servlet এর তাত্ক্ষণিক পর্যায়ে, servlet ইনস্ট্যান্স প্রস্তুত হয় তবে এটি ক্লায়েন্ট অনুরোধটি সরবরাহ করতে পারে না কারণ এটি দুটি তথ্যের সাথে অনুপস্থিত:
1: প্রসঙ্গ তথ্য
2: প্রাথমিক কনফিগারেশন তথ্য

Servlet ইঞ্জিন servletConfig ইন্টারফেস অবজেক্ট তৈরি করে উপরের অনুপস্থিত তথ্যকে এনক্রিপুলিউটিং করে সার্কিট ইঞ্জিন কলটি servlet এর init () servletConfig বস্তুর রেফারেন্সগুলিকে একটি যুক্তি হিসেবে সরবরাহ করে। একবার init () সম্পূর্ণরূপে নির্বাহ করা হয় servlet ক্লায়েন্ট অনুরোধ পরিবেশন করতে প্রস্তুত।

প্রশ্নঃ সার্টিফিকেটের জীবদ্দশায় কতবার তাত্ক্ষণিকতা ও প্রবর্তন ঘটে ??

A) শুধুমাত্র একবার (প্রতিটি ক্লায়েন্ট অনুরোধের জন্য একটি নতুন থ্রেড তৈরি করা হয়) সার্লেটের কেবলমাত্র একটি উদাহরণ ক্লায়েন্ট অনুরোধের কোনও নম্বর প্রদান করে অর্থাৎ, একটি ক্লায়েন্ট অনুরোধ সার্ভারের পরে সার্ভারটি মারা যায় না। এটি অন্যান্য ক্লায়েন্ট অনুরোধের জন্য অপেক্ষা করছে যেমনটি CGI (প্রতিটি ক্লায়েন্ট অনুরোধের জন্য একটি নতুন প্রক্রিয়া তৈরি করা হয়) সীমাটি সর্লেট (অভ্যন্তরীণভাবে সর্লেট ইঞ্জিন থ্রেড তৈরি করে) অতিক্রম করে।

প্রশ্নঃ কিভাবে সেশন ধারণা কাজ করে?

A) যখনই Session () HttpServletRequest বস্তুতে বলা হয়

পদক্ষেপ 1 : অনুরোধ বস্তু ইনকামিং সেশন আইডি জন্য মূল্যায়ন করা হয়।

পদক্ষেপ 2 : যদি আইডি উপলব্ধ না হয় তবে একটি ব্র্যান্ড নতুন HttpSession অবজেক্ট তৈরি করা হয় এবং এর সংশ্লিষ্ট সেশন আইডি তৈরি হয় (হ্যাশটেবেল) সেশন আইডিটি httpservlet প্রতিক্রিয়া বস্তুতে সংরক্ষিত হয় এবং HttpSession অবজেক্টের রেফারেন্স servlet (doGet / doPost) -এ ফেরত পাঠানো হয়। ।

ধাপ 3 : যদি আইডি উপলব্ধ ব্র্যান্ড নতুন সেশন অবজেক্ট তৈরি না হয় তবে সেশন আইডিটি থেকে সেশন সংগ্রহ করা হলে অনুরোধ আইডি থেকে সেশন ID টি বাছাই করা হয়।

অনুসন্ধান সফল হলে সফল আইডিটি HttpServletResponse এ সংরক্ষণ করা হয় এবং বিদ্যমান সেশন অবজেক্ট রেফারেন্সগুলি UserGefineservlet এর doGet () বা doPost () তে ফেরত পাঠানো হয়।

বিঃদ্রঃ:

1) সার্লেট কোড থেকে ক্লায়েন্ট থেকে কন্ট্রোল পাতাগুলি ভুলে যান না যে সেশন অবজেক্টটি সর্লেট কন্টেইনার দ্বারা অনুষ্ঠিত হচ্ছে অর্থাৎ সার্লেট ইঞ্জিন

2) মাল্টিথ্রেডিং ডেভেলপারদেরকে বাস্তবায়ন করার জন্য ডেভেলপারদেরকে ছেড়ে দেওয়ার জন্য বাকি আছে। ক্লায়েন্টের একাধিক অনুরোধগুলিকে মাল্টিথ্রেড কোড সম্পর্কে বিরক্ত করা

অন্তর্গত ফর্ম:

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




সার্লেট স্পেসিফিকেশন JSR-315 পরিষেবাটিতে (এবং DOGET, DOPost, DOPUT ইত্যাদি) পদ্ধতিতে ওয়েব ধারক আচরণকে স্পষ্টভাবে সংজ্ঞায়িত করে (2.3.3.1 মাল্টিথ্রেডিং সমস্যাগুলি, পৃষ্ঠা 9):

একটি servlet ধারক servlet এর পরিষেবা পদ্ধতির মাধ্যমে একযোগে অনুরোধ পাঠাতে পারে। অনুরোধগুলি পরিচালনা করার জন্য, Servlet বিকাশকারী অবশ্যই পরিষেবা পদ্ধতিতে একাধিক থ্রেড সহ সমতুল্য প্রক্রিয়াকরণের জন্য পর্যাপ্ত বিধান করতে হবে।

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

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






Related