Jakarta Server Pages
জাকার্তা সার্ভার পেজ (জেএসপি; পূর্বে জাভা সার্ভার পেজ) হল প্রযুক্তির একটি সংগ্রহ যা সফ্টওয়্যার ডেভেলপারদের এইচটিএমএল, এক্সএমএল, এসওএপি বা অন্যান্য নথির ধরণের উপর ভিত্তি করে গতিশীলভাবে তৈরি ওয়েব পেজ তৈরি করতে সহায়তা করে। 1999 সালে সান মাইক্রোসিস্টেমস দ্বারা প্রকাশিত, জেএসপি পিএইচপি এবং এএসপি-র অনুরূপ, তবে জাভা প্রোগ্রামিং ভাষা ব্যবহার করে। জাকার্তা সার্ভার পেজ স্থাপন এবং চালানোর জন্য, অ্যাপাচি টমক্যাট বা জেটির মতো সার্ভলেট ধারকের সাথে সামঞ্জস্যপূর্ণ একটি ওয়েব সার্ভার প্রয়োজন। স্থাপত্যগতভাবে, জেএসপি-কে জাভা সার্ভলেটের একটি উচ্চ-স্তরের বিমূর্ততা হিসাবে দেখা যেতে পারে। জেএসপিগুলি রানটাইমে সার্ভলেটগুলিতে অনুবাদ করা হয়, তাই জেএসপি একটি সার্ভলেট; প্রতিটি জেএসপি সার্ভলেট ক্যাশে করা হয় এবং মূল জেএসপি সংশোধন না হওয়া পর্যন্ত পুনরায় ব্যবহার করা হয়। জাকার্তা সার্ভার পেজগুলি স্বাধীনভাবে বা সার্ভার-সাইড মডেল-ভিউ-কন্ট্রোলার ডিজাইনের ভিউ উপাদান হিসাবে ব্যবহার করা যেতে পারে, সাধারণত জাভাবিন্স মডেল হিসাবে এবং জাভা সার্ভলেটগুলি (বা অ্যাপাচি স্ট্রুটসের মতো একটি কাঠামো) নিয়ামক হিসাবে। এটি এক ধরনের মডেল 2 স্থাপত্য। জেএসপি জাভা কোড এবং নির্দিষ্ট পূর্বনির্ধারিত ক্রিয়াকলাপগুলিকে এইচটিএমএল-এর মতো স্ট্যাটিক ওয়েব মার্কআপ বিষয়বস্তুর সাথে সংযুক্ত করার অনুমতি দেয়। ফলস্বরূপ পৃষ্ঠাটি একটি নথি সরবরাহ করার জন্য সার্ভারে সংকলিত এবং কার্যকর করা হয়। সংকলিত পৃষ্ঠাগুলির পাশাপাশি যে কোনও নির্ভরশীল জাভা লাইব্রেরিতে মেশিন কোডের পরিবর্তে জাভা বাইটকোড থাকে। অন্য যে কোনও. জার বা জাভা প্রোগ্রামের মতো, কোড অবশ্যই একটি জাভা ভার্চ্যুয়াল মেশিনের (জেভিএম) মধ্যে কার্যকর করা উচিত যা একটি বিমূর্ত, প্ল্যাটফর্ম-নিরপেক্ষ পরিবেশ সরবরাহ করতে সার্ভারের হোস্ট অপারেটিং সিস্টেমের সাথে যোগাযোগ করে। জেএসপিগুলি সাধারণত এইচটিএমএল এবং এক্সএমএল নথি সরবরাহ করতে ব্যবহৃত হয়, তবে আউটপুটস্ট্রিম ব্যবহারের মাধ্যমে তারা অন্যান্য ধরনের তথ্যও সরবরাহ করতে পারে। ওয়েব ধারক অনুরোধ, প্রতিক্রিয়া, অধিবেশন, অ্যাপ্লিকেশন, কনফিগারেশন, পৃষ্ঠা, পৃষ্ঠার প্রসঙ্গ, আউট এবং ব্যতিক্রমের মতো জেএসপি অন্তর্নিহিত বস্তু তৈরি করে। জেএসপি ইঞ্জিন অনুবাদ পর্যায়ে এই বস্তুগুলি তৈরি করে। সিনট্যাক্স নির্দেশিকা, স্ক্রিপ্টলেট এবং অভিব্যক্তি, ঘোষণা জেএসপি স্ক্রিপ্টিং ফাংশনের জন্য বেশ কয়েকটি সীমানা নির্ধারণকারী ব্যবহার করে। সবচেয়ে মৌলিক হল <%.%>, যা একটি জেএসপি স্ক্রিপ্টলেটকে আবদ্ধ করে। স্ক্রিপ্টলেট হল জাভা কোডের একটি অংশ যা ব্যবহারকারী যখন পৃষ্ঠাটির জন্য অনুরোধ করে তখন চলে। অন্যান্য সাধারণ ডিলিমিটারগুলির মধ্যে রয়েছে অভিব্যক্তিগুলির জন্য <% =.%>, যেখানে স্ক্রিপ্টলেট এবং ডিলিমিটারগুলি অভিব্যক্তিটির মূল্যায়নের ফলাফলের সাথে প্রতিস্থাপিত হয় এবং নির্দেশাবলী, যা <% @.%> দিয়ে চিহ্নিত করা হয়। জাভা কোড একটি একক স্ক্রিপ্টলেট ব্লকের মধ্যে সম্পূর্ণ বা স্বয়ংসম্পূর্ণ হওয়ার প্রয়োজন নেই। এটি মার্কআপ বিষয়বস্তুকে ছড়িয়ে দিতে পারে, যদি সামগ্রিকভাবে পৃষ্ঠাটি বাক্যবিন্যাসগতভাবে সঠিক হয়। উদাহরণস্বরূপ, যে কোনও জাভা যদি/জন্য/একটি স্ক্রিপ্টলেটে খোলা ব্লকগুলি পৃষ্ঠাটি সফলভাবে সংকলন করার জন্য পরবর্তী স্ক্রিপ্টলেটে সঠিকভাবে বন্ধ করতে হবে। এটি কোডকে মিশ্রিত করার অনুমতি দেয় এবং এর ফলে দুর্বল প্রোগ্রামিং অনুশীলন হতে পারে। জাভা কোডের একটি বিভক্ত ব্লকের (একাধিক স্ক্রিপ্টলেট বিস্তৃত) মধ্যে থাকা বিষয়বস্তু সেই কোডের সাপেক্ষে। একটি আইএফ ব্লকের অভ্যন্তরে থাকা বিষয়বস্তু শুধুমাত্র আউটপুটে প্রদর্শিত হবে যখন আইএফ শর্তটি সত্য বলে মূল্যায়ন করা হবে। একইভাবে, লুপ বডি কতবার চলে তার উপর নির্ভর করে একটি লুপ গঠনের অভ্যন্তরে বিষয়বস্তু আউটপুটে একাধিকবার উপস্থিত হতে পারে। উদাহরণ একটি জেএসপি পৃষ্ঠায় লুপের জন্য নিম্নলিখিতটি বৈধ হবেঃ <p> তিন পর্যন্ত গণনাঃ </p> <% এর জন্য (int i = 1; i <4; i + +) {%> <p> এই সংখ্যাটি <% = i%>। </p> <%}%> <p> ঠিক আছে। </p> ব্যবহারকারীর ওয়েব ব্রাউজারে প্রদর্শিত আউটপুট হবেঃ তিন পর্যন্ত গণনাঃ এই সংখ্যাটি 1। এই সংখ্যাটি হল 2। এই সংখ্যাটি হল 3। ঠিক আছে। স্ট্যান্ডার্ড জেএসপি ট্যাগ ব্যবহার-বিন ট্যাগ জেএসপি ব্যবহার-বিন ট্যাগ ডেভেলপারকে জাবাবিন অ্যাক্সেস করতে এবং তৈরি করতে সক্ষম করে। যদিও ব্যবহার-বিন ট্যাগটি দেখতে এইচ. টি. এম. এল ট্যাগের মতো, জাভাবীনের জন্য সমস্ত জে. এস. পি ট্যাগ এক্স. এম. এল সিনট্যাক্স ব্যবহার করে। অতএব ইউজবিয়ান ট্যাগ ধারণকারী কোডটি কেস-সংবেদনশীল। ইউজবিয়ান ট্যাগে বেশ কয়েকটি বৈশিষ্ট্য রয়েছে। আইডি বৈশিষ্ট্যটি সেই নামটি ঘোষণা করে যা শিমের প্রবেশাধিকার পাওয়ার জন্য ব্যবহৃত হয়। শ্রেণী বৈশিষ্ট্যটি শিমের জন্য প্যাকেজ এবং শ্রেণী ঘোষণা করে। সুযোগটি শিম সংরক্ষণের জন্য দায়ী বস্তুটিকে ঘোষণা করে। সুযোগের মানটি জাভা অ্যাপ্লিকেশনের বাকি অংশের ব্যবহারের জন্য শিমটি যে সময়ের জন্য উপলব্ধ তা নির্ধারণ করে। সুযোগটি নিম্নলিখিত চারটি মানের মধ্যে একটি হতে পারেঃ সুযোগটি বোঝায় যে শিমটি অন্তর্নিহিতভাবে সংজ্ঞায়িত বস্তুর মধ্যে অবস্থিত এবং শুধুমাত্র বর্তমান পৃষ্ঠার জন্য উপলব্ধ। ডিফল্টরূপে, সমস্ত মটরশুঁটির একটি সুযোগ থাকে। সুযোগটি বোঝায় যে শিমটি বস্তুটির মধ্যে পাওয়া যেতে পারে। এই শিমটি অন্যান্য সমস্ত জেএসপি এবং সার্ভলেট দ্বারা অ্যাক্সেস করা যেতে পারে যার বর্তমান অনুরোধ বস্তুর অ্যাক্সেস রয়েছে। সুযোগটি বোঝায় যে শিমটি বস্তুটির মধ্যে পাওয়া যেতে পারে। এই শিমটি অন্যান্য সমস্ত জেএসপি এবং সার্ভলেট দ্বারা অ্যাক্সেস করা যেতে পারে যার নির্দিষ্ট বস্তুর অ্যাক্সেস রয়েছে। সুযোগটি বোঝায় যে শিমটি বস্তুটির মধ্যে পাওয়া যেতে পারে। এই শিমটি অন্যান্য সমস্ত জেএসপি এবং সার্ভলেট দ্বারা অ্যাক্সেস করা যেতে পারে যার নির্দিষ্ট বস্তুর অ্যাক্সেস রয়েছে। 'গেটপ্রপার্টি' এবং 'সেটপ্রপার্টি ট্যাগস' 'ইউজবিয়ান' ট্যাগ ব্যবহার করে একটি শিম তৈরি করার পরে, 'গেটপ্রপার্টি' এবং 'সেটপ্রপার্টি' ট্যাগগুলি শিমের বৈশিষ্ট্যগুলি পেতে এবং সেট করার জন্য ব্যবহার করা যেতে পারে। তৈরি শিমের সম্পত্তি পেতে জেএসপি গেটপ্রপার্টি ব্যবহার করা হয়। একটি শিমের বৈশিষ্ট্য নির্ধারণ করতে জেএসপি সেটপ্রপার্টি ট্যাগ ব্যবহার করা হয়। গেটপ্রপার্টি এবং সেটপ্রপার্টি ট্যাগের জন্য, নাম বৈশিষ্ট্যটি শিমের নাম নির্দিষ্ট করতে ব্যবহৃত হয়। সুতরাং নাম বৈশিষ্ট্যটি অবশ্যই ইউজবিয়ান ট্যাগ দ্বারা প্রদত্ত আইডি বৈশিষ্ট্যের সাথে মেলে। জেএসপি স্পেসিফিকেশনের এক্সপ্রেশন ল্যাঙ্গুয়েজ ভার্সন 2 এক্সপ্রেশন ল্যাঙ্গুয়েজ (ইএল)-এর জন্য সমর্থন যোগ করেছে, যা জাভা অবজেক্টে ডেটা এবং ফাংশন অ্যাক্সেস করতে ব্যবহৃত হয়। জেএসপি 2.1-এ, এটি ইউনিফাইড এক্সপ্রেশন ল্যাঙ্গুয়েজে ভাঁজ করা হয়েছিল, যা জাভা সার্ভার ফেসগুলিতেও ব্যবহৃত হয়। জেএসপি এক্সপ্রেশন ল্যাঙ্গুয়েজ একটি কম্প্যাক্ট সিনট্যাক্স ব্যবহার করে যা ডেভেলপারকে প্রদত্ত অনুরোধ বস্তু থেকে অ্যাট্রিবিউট এবং জাভাবিয়ান বৈশিষ্ট্য পেতে সক্ষম করে। ইএল ব্যবহার করার সময়, কোডের শুরুতে একটি ডলার চিহ্ন ("$") অবশ্যই যোগ করতে হবে। ডলার চিহ্নের পরে একটি খোলার ব্রেস ("{"), পাশাপাশি একটি ক্লোজিং ব্রেস ("}") থাকে। কোডটি তারপর খোলার এবং বন্ধ করার ধনুর্বন্ধনীগুলির মধ্যে লেখা হয়। উদাহরণ EL বাক্যবিন্যাসের একটি উদাহরণ নিম্নরূপঃ জাভাবিয়ান বস্তুর পরিবর্তনশীলের মান হল ${javabean.variable}। অতিরিক্ত ট্যাগ জেএসপি সিনট্যাক্স অন্তর্নির্মিত কার্যকারিতা আহ্বান করতে জেএসপি অ্যাকশন নামে অতিরিক্ত ট্যাগ যুক্ত করে। উপরন্তু, প্রযুক্তিটি কাস্টম জেএসপি ট্যাগ লাইব্রেরি তৈরির অনুমতি দেয় যা স্ট্যান্ডার্ড জেএসপি সিনট্যাক্সের এক্সটেনশন হিসাবে কাজ করে। এমনই একটি গ্রন্থাগার হল জে. এস. টি. এল। জাকার্তা স্ট্যান্ডার্ড ট্যাগ লাইব্রেরি (জে. এস. টি. এল) সাধারণ কাজগুলিকে সমর্থন করে যা জে. এস. পি-তে সম্পাদন করা আবশ্যক। উদাহরণগুলির মধ্যে পুনরাবৃত্তি এবং শর্তাধীন (জাভাতে "জন্য" এবং "যদি" বিবৃতির সমতুল্য) অন্তর্ভুক্ত রয়েছে। জে. এস. টি. এল-এর সমস্ত গ্রন্থাগারের মধ্যে জে. এস. টি. এল-এর মূল গ্রন্থাগারটি সর্বাধিক ব্যবহৃত হয়। একটি প্রিফিক্স ব্যবহার করে জে. এস. টি. এল কোর লাইব্রেরির ইউ. আর. আই নির্দিষ্ট করার জন্য একটি ট্যাগলিব নির্দেশিকা ব্যবহার করতে হবে। যদিও উপসর্গের জন্য অনেকগুলি ভিন্ন বিকল্প রয়েছে, "সি" উপসর্গটি সাধারণত এই গ্রন্থাগারের জন্য ব্যবহৃত হয়। এক্স. এম. এল-অনুবর্তী জে. এস. পি জে. এস. পি পৃষ্ঠাগুলি সম্পূর্ণ বৈধ এক্স. এম. এল বাক্যবিন্যাসেও লেখা যেতে পারে। এই ধরনের জেএসপি ফাইলগুলি সাধারণত বিকল্প. জেএসপিএক্স ফাইল এক্সটেনশন ব্যবহার করে, যা সাধারণত অ্যাপ্লিকেশন সার্ভারকে এক্সএমএল সিনট্যাক্স যাচাই করতে বাধ্য করে। যেহেতু সাধারণ জেএসপি সিনট্যাক্স <%.%> এক্সএমএল-এ বৈধ নয়, তাই একজন ডেভেলপারকে অবশ্যই জেএসপি দ্বারা প্রদত্ত বিকল্প ট্যাগ ব্যবহার করতে হবে। উদাহরণস্বরূপ, সাধারণ <% @পৃষ্ঠা.%> নির্দেশটি পরিবর্তে একটি <জেএসপিঃ directive.page./> ট্যাগ হিসাবে লেখা যেতে পারে এবং ট্যাগ লাইব্রেরিগুলি সাধারণ <% @ট্যাগলিব.%> ট্যাগের পরিবর্তে এক্সএমএল নেমস্পেস ব্যবহার করে আমদানি করা হয়। কম্পাইলার একটি জাভা সার্ভার পেজ কম্পাইলার এমন একটি প্রোগ্রাম যা জেএসপিগুলি বিশ্লেষণ করে এবং সেগুলিকে এক্সিকিউটেবল জাভা সার্ভলেটগুলিতে রূপান্তরিত করে। এই ধরনের একটি প্রোগ্রাম সাধারণত অ্যাপ্লিকেশন সার্ভারে এম্বেড করা থাকে এবং প্রথমবার কোনও জেএসপি অ্যাক্সেস করার সময় স্বয়ংক্রিয়ভাবে চলে, তবে পৃষ্ঠাগুলি আরও ভাল পারফরম্যান্সের জন্য পূর্ব-সংকলিত হতে পারে, বা ত্রুটিগুলি পরীক্ষা করার জন্য বিল্ড প্রক্রিয়ার অংশ হিসাবে সংকলিত হতে পারে। কিছু জেএসপি ধারক পৃষ্ঠাটি পরিবর্তিত হয়েছে কিনা তা দেখতে ধারকটি জেএসপি ফাইলের টাইমস্ট্যাম্পগুলি কত ঘন ঘন পরীক্ষা করে তা কনফিগার করতে সহায়তা করে। সাধারণত, এই টাইমস্ট্যাম্পটি সফ্টওয়্যার বিকাশের সময় একটি সংক্ষিপ্ত বিরতি (সম্ভবত সেকেন্ড) এবং একটি নিযুক্ত ওয়েব অ্যাপ্লিকেশনের জন্য একটি দীর্ঘ বিরতি (সম্ভবত মিনিট, বা এমনকি কখনও নয়) সেট করা হয়। "মুরাচের জাভা সার্ভলেটস এবং জেএসপি" বইয়ের লেখক জোয়েল মুরাচ এবং মাইকেল আরবানের মতে, জেএসপি-তে জাভা কোড এম্বেড করা সাধারণত খারাপ অভ্যাস। একটি ভাল পদ্ধতি হ 'ল জেএসপি-তে এম্বেড করা ব্যাক-এন্ড লজিককে জাভা কোডে স্থানান্তরিত করা। এই পরিস্থিতিতে, প্রসেসিংয়ের জন্য দায়বদ্ধ এবং জেএসপি এইচটিএমএল প্রদর্শনের জন্য দায়বদ্ধ, উদ্বেগের একটি স্পষ্ট পৃথকীকরণ বজায় রাখে। 2000 সালে, "জাভা সার্ভলেট প্রোগ্রামিং"-এর লেখক জেসন হান্টার জাভা সার্ভার পেজগুলির সাথে বেশ কয়েকটি "সমস্যা" বর্ণনা করেছেন। তা সত্ত্বেও, তিনি লিখেছেন যে যদিও জেএসপি "জাভা প্ল্যাটফর্মের জন্য সর্বোত্তম সমাধান" নাও হতে পারে তবে এটি ছিল "জাভা সমাধান যা জাভা নয় এমন সমাধানের মতো", যার দ্বারা তিনি মাইক্রোসফ্টের অ্যাক্টিভ সার্ভার পেজগুলি বোঝাতে চেয়েছিলেন। পরে, তিনি তাঁর সাইটে একটি নোট যোগ করে বলেছিলেন যে 2000 সাল থেকে জেএসপি উন্নত হয়েছে, তবে এর প্রতিযোগী, অ্যাপাচি ভেলোসিটি এবং চা (টেমপ্লেট ভাষা)-এর কথাও উল্লেখ করেছেন। আজ, বড় ওয়েব অ্যাপ্লিকেশনগুলিতে বেশ কয়েকটি বিকল্প এবং বেশ কয়েকটি জেএসপি-ভিত্তিক পৃষ্ঠাগুলি প্রযুক্তিগত ঋণ হিসাবে বিবেচিত হয়। এছাড়াও দেখুন সার্ভলেট পাত্রে অ্যাপাচি টমক্যাট অ্যাপাচি টমি জেটি (ওয়েব সার্ভার) গ্লাসফিশ ওরাকল আইপ্ল্যানেট ওয়েব সার্ভার ওয়েবস্ফিয়ার অ্যাপ্লিকেশন সার্ভার জাভা-ভিত্তিক টেমপ্লেট বিকল্প অ্যাডোবি কোল্ডফিউশন লুসি ফ্রিমার্কার জেএইচটিএমএল থাইমিলিফ রেফারেন্স ওয়ার্কস উদ্ধৃত আরও পড়া বাহ্যিক লিঙ্ক জেএসপি v2.0 সিনট্যাক্স রেফারেন্স জাভা সার্ভার পেজ v2.0 সিনট্যাক্স কার্ড (v1.2) জাকার্তা সার্ভার পেজ নির্দিষ্টকরণ, সর্বশেষ অফিসিয়াল টিউটোরিয়ালঃ জাভা EE 5 টিউটোরিয়াল, অধ্যায় 5, জাভা সার্ভার পেজ প্রযুক্তি সার্ভলেট ইতিহাস জাভা এন্টারপ্রাইজ প্ল্যাটফর্ম টেমপ্লেট ইঞ্জিন নির্দিষ্টকরণ অনুরোধ করে