CodeGym /Java Blog /এলোমেলো /সার্লেট এবং জেএসপি ব্যবহার করে একটি সাধারণ ওয়েব অ্যাপ্লি...
John Squirrels
লেভেল 41
San Francisco

সার্লেট এবং জেএসপি ব্যবহার করে একটি সাধারণ ওয়েব অ্যাপ্লিকেশন তৈরি করা (পার্ট 1)

এলোমেলো দলে প্রকাশিত
নিবন্ধটি বোঝার জন্য প্রয়োজনীয় জ্ঞান: আপনি ইতিমধ্যেই কমবেশি জাভা কোর খুঁজে পেয়েছেন এবং JavaEE প্রযুক্তি এবং ওয়েব প্রোগ্রামিং দেখতে চান । বর্তমানে জাভা কালেকশন কোয়েস্ট অধ্যয়ন করা আপনার জন্য সবচেয়ে বোধগম্য হবে , যা নিবন্ধের কাছাকাছি বিষয়গুলির সাথে সম্পর্কিত।
servlets এবং JSPs ব্যবহার করে একটি সাধারণ ওয়েব অ্যাপ্লিকেশন তৈরি করা (পার্ট 1) - 1
এই উপাদানটি হল আমার নিবন্ধের যৌক্তিক ধারাবাহিকতা IntelliJ Idea Enterprise-এ সহজতম ওয়েব প্রকল্প তৈরি করা । সেই নিবন্ধে, আমি দেখিয়েছি কিভাবে একটি কার্যকরী ওয়েব প্রকল্প টেমপ্লেট তৈরি করতে হয়। এইবার আমি আপনাকে দেখাব কিভাবে Java Servlet API এবং JavaServer Pages API ব্যবহার করে একটি সহজ কিন্তু সম্পূর্ণ আকর্ষণীয় ওয়েব অ্যাপ্লিকেশন তৈরি করা যায় । আমাদের অ্যাপ্লিকেশনটিতে দুটি লিঙ্ক সহ একটি হোম পেজ থাকবে:
  • ব্যবহারকারীদের যোগ করার জন্য একটি পৃষ্ঠার একটি লিঙ্ক;
  • ব্যবহারকারীদের তালিকার একটি লিঙ্ক।
আগের মতো, আমি IntelliJ Idea Enterprise Edition , Apache Maven (আমরা কিছু নির্ভরতা সংযুক্ত করব), এবং Apache Tomcat ব্যবহার করব । শেষ পর্যন্ত, আমরা W3.CSS ফ্রেমওয়ার্ক ব্যবহার করে আমাদের অ্যাপ্লিকেশনটিকে "সুশোভিত" করব। আমরা ধরে নেব যে আপনার কাছে ইতিমধ্যে একটি খালি প্রকল্প আছে যা আমরা এখন যোগ করব। যদি না হয়, প্রথম নিবন্ধ মাধ্যমে চালান এবং একটি তৈরি. এটি মাত্র কয়েক মিনিট সময় নেবে :)

আমাদের ভবিষ্যত অ্যাপ্লিকেশন এর গঠন সম্পর্কে একটু

আমাদের হোম পেজ (/) একটি শিরোনাম এবং দুটি লিঙ্ক/বোতাম সহ একটি অতি সাধারণ স্ট্যাটিক HTML পৃষ্ঠা হবে :
  • একটি নতুন ব্যবহারকারী যোগ করুন (নেভিগেট করে / যোগ করুন );
  • ব্যবহারকারীদের তালিকা দেখুন (নেভিগেট করে / তালিকা )।
টমক্যাট এই ঠিকানাগুলির জন্য অনুরোধগুলি ধরবে এবং আমরা যে দুটি সার্লেট তৈরি করতে যাচ্ছি তার একটিতে সেগুলি পাঠাবে (আমরা web.xml এ ম্যাপিংটি নির্দিষ্ট করব )। সার্লেটগুলি তারপরে অনুরোধগুলি প্রক্রিয়া করবে, ডেটা প্রস্তুত করবে (অথবা ডেটা সংরক্ষণ করবে, যদি আমরা কোনও ব্যবহারকারী যোগ করি), এবং উপযুক্ত JSP ফাইলগুলিতে নিয়ন্ত্রণ স্থানান্তর করে , যা ফলাফলটিকে "রেন্ডার" করে। আমরা একটি প্লেইন ভ্যানিলা তালিকায় (তালিকা) ডেটা সংরক্ষণ করব।

একটি স্ট্যাটিক হোম পেজ তৈরি করুন

আপনি যদি আপনার ওয়েব ফোল্ডারে index.jsp , এটি মুছে দিন। পরিবর্তে, এই ফোল্ডারে index.html নামে একটি সাধারণ HTML ফাইল তৈরি করুন:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My super project!</title>
</head>
<body>
    <!-- header -->
    <div>
        <h1>Super app!<//h1>
    </div>

    <div>       <!-- content -->
        <div>    <!-- button holder -->
            <button onclick="location.href='/list'">List users<//button>
            <button onclick="location.href='/add'">Add user<//button>
        </div>
    </div>
</body>
</html>
এখানে জটিল কিছু নেই। শিরোনাম ট্যাগে , আমরা আমাদের পৃষ্ঠার শিরোনাম নির্দেশ করি। পেজ বডিতে, আমাদের দুটি প্রধান ডিভ রয়েছে: হেডার এবং কন্টেন্ট । বিষয়বস্তু ডিভ আমাদের বোতামগুলির জন্য একটি ধারক অন্তর্ভুক্ত করে। এবং সেখানে আমাদের দুটি বোতাম রয়েছে যা আপনাকে একটি ক্লিকের সাথে সংশ্লিষ্ট ঠিকানায় নিয়ে যায়। আপনি প্রকল্পটি চালাতে পারেন এবং দেখতে পারেন এটি এখন কেমন দেখাচ্ছে। আপনি বোতামগুলিতে ক্লিক করলে, আপনি 404-ত্রুটি পৃষ্ঠা পাবেন, কারণ আমরা সংশ্লিষ্ট পৃষ্ঠাগুলি এখনও বিদ্যমান নেই৷ কিন্তু আমরা বলতে পারি যে বোতামগুলি কাজ করে। মনে রাখবেন যে এটি সর্বজনীন পদ্ধতি নয়: যদি ব্রাউজারে জাভাস্ক্রিপ্ট বন্ধ থাকে, তাহলে এই বোতামগুলি কাজ করবে না। কিন্তু আমরা অনুমান করব যে কেউ জাভাস্ক্রিপ্ট নিষ্ক্রিয় করে না। :) স্পষ্টতই, আপনি সহজ লিঙ্ক দিয়ে পেতে পারেন, কিন্তু আমি বোতাম পছন্দ. আপনি আপনার পছন্দ অনুযায়ী এটি করতে পারেন। এবং এই সত্য সম্পর্কে চিন্তা করবেন না যে আমার উদাহরণগুলিতে অনেকগুলি ডিভ থাকবে । আমরা পরে শৈলী সঙ্গে তাদের পূরণ করব, এবং সবকিছু আরো সুন্দর দেখাবে। :)

ফলাফল রেন্ডার করতে JSP ফাইল তৈরি করুন

একই ওয়েব ডিরেক্টরিতে, একটি ফোল্ডার তৈরি করুন যেখানে আমরা আমাদের JSP ফাইলগুলি যুক্ত করব । আমি এটিকে ' ভিউ ' বলেছি, তবে আপনি আবার ইম্প্রোভাইজ করতে পারেন। এই ফোল্ডারে, আমরা দুটি JSP ফাইল তৈরি করব:
  • add.jsp — ব্যবহারকারীদের যোগ করার জন্য একটি পৃষ্ঠা;
  • list.jsp — ব্যবহারকারীদের তালিকা প্রদর্শনের জন্য পৃষ্ঠা।
তাদের উপযুক্ত পৃষ্ঠা শিরোনাম বরাদ্দ করুন. " নতুন ব্যবহারকারী যোগ করুন " এবং " ব্যবহারকারীর তালিকা " এর মত কিছু , এবং আমরা এটিকে সেভাবেই ছেড়ে দেব।

দুটি সার্লেট তৈরি করুন

সার্ভলেটগুলি টমক্যাট তাদের পাঠানো অনুরোধগুলি গ্রহণ করবে এবং প্রক্রিয়া করবে । src/main/java ফোল্ডারে , অ্যাপ প্যাকেজ তৈরি করুন, যেখানে আমরা আমাদের সোর্স কোড রাখব। অন্যান্য প্যাকেজও সেখানে যাবে। সুতরাং, এই প্যাকেজগুলিকে একে অপরের মধ্যে তৈরি হওয়া থেকে বিরত রাখতে, আমরা অ্যাপ প্যাকেজে কিছু ক্লাস তৈরি করব (আমরা এটি পরে মুছে দেব)। এখন অ্যাপ প্যাকেজে তিনটি ভিন্ন প্যাকেজ তৈরি করুন :
  • entities — আমাদের সত্তা (যে শ্রেণী ব্যবহারকারীর বস্তুর বর্ণনা দেয়) এখানে যান;
  • মডেল — এখানেই আমাদের মডেল যায় (আমরা এই বিষয়ে একটু পরে কথা বলব);
  • servlets — এবং এই যেখানে আমাদের servlets যেতে.
একবার আপনি এটি করে ফেললে, আপনি শান্তভাবে সেই ক্লাসটি অ্যাপ প্যাকেজ থেকে মুছে ফেলতে পারেন (যদি আপনি এটি তৈরি করেন তবে অবশ্যই)। servlets প্যাকেজে , দুটি ক্লাস তৈরি করুন:
  • AddServlet — প্রসেস অনুরোধ পাঠানো/ সংযোজন করে ;
  • ListServlet — প্রসেস অনুরোধ পাঠানো হয় / তালিকা .

মাভেনে নির্ভরতা সংযুক্ত করা হচ্ছে

Tomcat 9 .* Servlet 4.0 এবং JavaServer পেজ 2.3 এর স্পেসিফিকেশন প্রয়োগ করে । টমক্যাট 9 এর অফিসিয়াল ডকুমেন্টেশনের প্রথম অনুচ্ছেদের দ্বিতীয় লাইনে এটিই বলা হয়েছে । এর মানে হল যে আপনি যদি আমার মতো, Tomcat এর এই সংস্করণটি ব্যবহার করেন , তাহলে আপনি যে কোডটি লিখবেন এবং চালাবেন তা এই সংস্করণগুলি ব্যবহার করবে। কিন্তু আমরা আমাদের প্রকল্পে এই স্পেসিফিকেশন থাকতে চাই, যাতে আমাদের কোড, যা তাদের ব্যবহার করে, অন্তত সফলভাবে কম্পাইল করে। এবং এটি করার জন্য, আমাদের সেগুলিকে আমাদের প্রকল্পে লোড করতে হবে। এখানেই মাভেন উদ্ধার করতে আসে।

সাধারণ নিয়ম হল: আপনি যদি Maven ব্যবহার করে আপনার প্রকল্পে কিছু সংযোগ করতে চান:

  • Maven থেকে সংগ্রহস্থল ওয়েবসাইটে যান;
  • প্রয়োজনীয় লাইব্রেরির প্রয়োজনীয় সংস্করণের জন্য সন্ধান করুন;
  • নির্ভরতা কোডটি পান যা আপনার pom.xml এ আটকাতে হবে;
  • পেস্ট :)
চল শুরু করি. প্রথমে, POM ফাইলটি প্রস্তুত করুন । /version এন্ট্রির পরে কোথাও , কিন্তু /project এর আগে , নিম্নলিখিতটি সন্নিবেশ করুন:

<dependencies>

</dependencies>
আমরা এই ট্যাগের মধ্যে প্রয়োজনীয় নির্ভরতা তালিকাভুক্ত করব তা নির্দেশ করার জন্য এটি করি। এখন mvnrepository.com এ যান । শীর্ষে একটি অনুসন্ধান ক্ষেত্র আছে. শুরু করতে, ' servlet ' অনুসন্ধান করুন । প্রথম ফলাফল, যা সাত হাজারেরও বেশি বার ব্যবহার করা হয়েছে, আমাদের জন্য উপযুক্ত। মনে রাখবেন, আমাদের 4.0 সংস্করণ দরকার ( টমক্যাট 9 এর জন্য) অন্যান্য সংস্করণগুলি পুরানো বাস্তবায়নের জন্য উপযুক্ত হতে পারে। এটি একটি মোটামুটি সাম্প্রতিক সংস্করণ, তাই খুব বেশি ব্যবহার নেই। কিন্তু আমরা এটা প্রয়োজন. একটি পৃষ্ঠা খোলে যেখানে আপনি বিভিন্ন প্যাকেজ পরিচালকদের জন্য এই নির্ভরতার জন্য কোড পেতে পারেন, অথবা আপনি এটি ডাউনলোড করতে পারেন। কিন্তু যেহেতু আমরা এটি Maven ব্যবহার করে সংযোগ করতে চাই, তাই আমরা Maven ট্যাবে কোডটি নির্বাচন করব। আমরা আমাদের POM ফাইলের নির্ভরতা বিভাগে অনুলিপি এবং পেস্ট করি। আপনি যদি IDEA এর নীচের ডানদিকে স্বয়ংক্রিয়-আমদানি সক্ষম করতে চান কিনা জিজ্ঞাসা করার জন্য একটি বিজ্ঞপ্তি পান , এগিয়ে যান এবং এতে সম্মত হন। আপনি যদি ভুলবশত প্রত্যাখ্যান করেন, " সেটিংস " এ যান এবং স্বয়ংক্রিয়ভাবে আমদানি চালু করুন: সেটিংস (Ctrl + Alt + S) -> বিল্ড, এক্সিকিউশন, ডিপ্লয়মেন্ট -> মাভেন -> ইম্পোর্টিংএবং এই প্রকল্পের জন্য IDEA কনফিগারেশন ফাইলগুলি সিঙ্কে। একই নীতি অনুসরণ করে, আমরা JavaServer পেজ 2.3 ("JSP" অনুসন্ধান) খুঁজে বের করব এবং সংযুক্ত করব। এবং যেহেতু আমরা ইতিমধ্যেই ম্যাভেন শুরু করেছি, আসুন শুধু এটাকে বলি যে আমাদের সোর্স ফাইলগুলি জাভা 8 সিনট্যাক্স অনুসরণ করে এবং সেই সংস্করণের জন্য আমাদেরকে বাইটকোডে কম্পাইল করতে হবে। এই সমস্ত পদক্ষেপের পরে, আমাদের pom.xml এইরকম কিছু দেখাবে:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cc.codegym.info.fatfaggy</groupId>
    <artifactId>my-super-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compile.source>1.8</maven.compile.source>
        <maven.compile.target>1.8</maven.compile.target>
    </properties>

    <dependencies>
        <!-- Servlet API 4.0 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- JavaServer Pages API 2.3 for tomcat 9 -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

আমাদের servlets বাস্তব servlets মধ্যে করুন

এই মুহুর্তে, আমরা যে জোড়া সার্লেট তৈরি করেছি তা আসলে সাধারণ ক্লাস। তাদের কোন কার্যকারিতা নেই। কিন্তু এখন আমরা আমাদের প্রজেক্টের সাথে Servlet API সংযুক্ত করেছি , এবং সেই অনুযায়ী আমরা এর ক্লাস ব্যবহার করতে পারি। আমাদের সার্ভলেটগুলিকে "বাস্তব" করার জন্য আমাদের যা করতে হবে তা হল সেগুলিকে HttpServlet ক্লাসের উত্তরাধিকারী করা।

ম্যাপিং বা মার্কআপ

এখন টমক্যাটকে কোনোভাবে জানালে ভালো হবে যে/অ্যাডড্রেসের জন্য অনুরোধগুলি আমাদের AddServlet দ্বারা প্রসেস করা হয় , এবং / লিস্ট অ্যাড্রেসের জন্য অনুরোধগুলি ListServlet দ্বারা পরিচালিত হয় । এই প্রক্রিয়াটিকে ম্যাপিং (মার্কআপ) বলা হয়। এটি একই নীতি ব্যবহার করে web.xml এ করা হয় :
  • শুরু করতে, সার্লেট বর্ণনা করুন (কিছু নাম দিন এবং ক্লাসের পথটি নির্দিষ্ট করুন);
  • তারপর এই সার্লেটটিকে একটি নির্দিষ্ট ঠিকানায় আবদ্ধ করুন (সার্ভলেটের নামটি নির্দিষ্ট করুন, যা আমরা এইমাত্র দিয়েছি, এবং ঠিকানাটি উল্লেখ করুন যার অনুরোধগুলি এই সার্লেটে পাঠানো উচিত)।
সার্লেট বর্ণনা করুন:

<servlet>
    <servlet-name>add</servlet-name>
    <servlet-class>app.servlets.AddServlet</servlet-class>
</servlet>
এখন এটি ঠিকানায় আবদ্ধ করুন:

<servlet-mapping>
    <servlet-name>add</servlet-name>
    <url-pattern>/add</url-pattern>
</servlet-mapping>
আপনি দেখতে পাচ্ছেন, সার্লেট-নাম উভয় ক্ষেত্রেই একই। ফলস্বরূপ, Tomcat জানে যে যদি /add-এর জন্য একটি অনুরোধ গৃহীত হয় তবে তা অবশ্যই app.servlets.AddServlet-এ পাঠাতে হবে। আমরা দ্বিতীয় সার্লেটের সাথে একই জিনিস করি। শেষ পর্যন্ত, আমাদের web.xml-এ প্রায় নিম্নলিখিত বিষয়বস্তু রয়েছে:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!-- add servlet -->
    <servlet>
        <servlet-name>add</servlet-name>
        <servlet-class>app.servlets.AddServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>add</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>

    <!-- list servlet -->
    <servlet>
        <servlet-name>list</servlet-name>
        <servlet-class>app.servlets.ListServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>list</servlet-name>
        <url-pattern>/list</url-pattern>
    </servlet-mapping>
</web-app>
যাইহোক, আমরা হোম পেজের (/) জন্য মার্কআপ তৈরি করিনি। আসল বিষয়টি হল এই ক্ষেত্রে আমাদের এটির প্রয়োজন নেই। আমাদের হোম পেজ একটি সাধারণ HTML ফাইল যা শুধু দুটি বোতাম প্রদর্শন করে। এতে কোনো গতিশীল বিষয়বস্তু নেই, তাই আমাদের থেকে অনুরোধের জন্য আলাদা সার্লেট তৈরি করতে হবে না / যা আমাদের জন্য দুটি বোতাম আঁকতে কিছু JSP (যা তৈরি করতে হবে) ফরওয়ার্ড এক্সিকিউশন ছাড়া আর কিছুই করবে না। আমাদের এই দরকার নেই। একটি স্ট্যাটিক পেজ আমাদের জন্য উপযুক্ত। যখন টমক্যাট একটি অনুরোধ পায়, তখন এটি পরীক্ষা করবে যে একটি একক সার্লেট আছে কিনা যা সেই ঠিকানাটির জন্য অনুরোধটি প্রক্রিয়া করতে পারে এবং তারপর দেখতে পাবে যে এই ঠিকানাটিতে ইতিমধ্যেই প্রস্তুত HTML ফাইল রয়েছে, যা এটি পরিবেশন করা হবে. আমরা আমাদের অ্যাপ্লিকেশনটি আবার চালাতে পারি (সার্ভারটি পুনরায় চালু করুন বা এটিকে পুনরায় স্থাপন করুন—আপনি যা পছন্দ করেন) এবং নিশ্চিত করুন যে হোম পেজটি রেন্ডার হয়েছে, কিছুই ভাঙছে না এবং যখন আমরা বোতামে ক্লিক করি তখন পরিবর্তনগুলি ঘটে (যদিও আমরা আবার একটি ত্রুটি পাই)। যাইহোক, আগে যেখানে আমরা একটি 404 ত্রুটি পেয়েছি, এখন আমরা একটি 405 পেয়েছি। এর মানে ম্যাপিং কাজ করেছে এবং সার্লেটগুলি পাওয়া গেছে, কিন্তু অনুরোধটি পরিচালনা করার জন্য তাদের কাছে কোন উপযুক্ত পদ্ধতি ছিল না।

সংক্ষিপ্ত ডিগ্রেশন: "হুডের নীচে" কী ঘটে?

টমক্যাটে আমাদের অ্যাপ্লিকেশন কীভাবে কাজ করে সে সম্পর্কে আপনি সম্ভবত ইতিমধ্যেই চিন্তা করেছেন। সেখানে কি হয়? এবং প্রধান() পদ্ধতি কোথায়? আপনি আপনার ব্রাউজারে localhost:8080 এ যাওয়ার সাথে সাথে ব্রাউজার HTTP প্রোটোকল ব্যবহার করে এই ঠিকানায় একটি অনুরোধ পাঠায়। আমি আশা করি আপনি ইতিমধ্যেই সচেতন যে বিভিন্ন ধরণের অনুরোধ রয়েছে এবং সর্বাধিক জনপ্রিয় হল GET এবং POST৷ প্রতিটি অনুরোধের উত্তর দিতে হবে। একটি GET অনুরোধের জন্য রেডি-টু-ব্যবহারের HTML কোডের একটি প্রতিক্রিয়া পাওয়ার আশা করা হচ্ছে, ব্রাউজারে ফিরে এসেছে। ব্রাউজার তারপর কোড প্রতিস্থাপন করবে সব সুন্দর অক্ষর, বোতাম, এবং ফর্ম. একটি POST অনুরোধ একটু বেশি আকর্ষণীয়, যেহেতু এটি কিছু তথ্যও বহন করে। উদাহরণস্বরূপ, ধরুন আপনি একটি ওয়েবসাইটে নিবন্ধন বা সাইন-ইন ফর্মে শংসাপত্রগুলি প্রবেশ করান এবং "পাঠান" এ ক্লিক করুন৷ এটি সার্ভারে পাঠানোর জন্য আপনার ব্যক্তিগত তথ্য সহ একটি POST অনুরোধ ঘটায়। সার্ভার এই তথ্য গ্রহণ করে, এটি প্রক্রিয়া করে এবং কিছু প্রতিক্রিয়া প্রদান করে (উদাহরণস্বরূপ, আপনার প্রোফাইলের সাথে একটি HTML পৃষ্ঠা)। তাদের মধ্যে প্রধান পার্থক্য হল GET অনুরোধগুলি শুধুমাত্র সার্ভার থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়, যখন POST অনুরোধগুলি কিছু তথ্য বহন করে (এবং সার্ভারের ডেটা পরিবর্তন হতে পারে)। উদাহরণস্বরূপ, আপনি যখন সার্ভারে আপনার ছবি আপলোড করেন, তখন এটি একটি POST অনুরোধে সেখানে বহন করা হয় এবং সার্ভার এটিকে ডাটাবেসে যুক্ত করে, অর্থাৎ একটি পরিবর্তন ঘটে। এখন টমক্যাটে ফিরে যান। যখন এটি একটি ক্লায়েন্টের কাছ থেকে একটি অনুরোধ পায়, এটি ঠিকানাটি দেখে। এটি সেই ঠিকানার জন্য অনুরোধগুলি প্রক্রিয়া করার জন্য একটি উপযুক্ত সার্লেট আছে কিনা তা পরীক্ষা করে (বা একটি উপলব্ধ সংস্থান যা অবিলম্বে ফেরত দেওয়া যেতে পারে)। যদি ফেরার মত কিছু না পায়, তারপর এটি একটি HTML পৃষ্ঠার পরিবর্তে একটি 404-ত্রুটির সাথে প্রতিক্রিয়া জানায়। কিন্তু যদি এটি সেই ঠিকানায় একটি উপযুক্ত সার্লেট "বসা" খুঁজে পায়, তবে এটি অনুরোধের ধরণটি দেখে (GET, POST, বা অন্য কিছু) এবং সার্লেটকে জিজ্ঞাসা করে যে এটির কাছে এই ধরনের প্রশ্ন পরিচালনা করতে পারে এমন একটি পদ্ধতি আছে কিনা৷ যদি servlet বলে যে এটি কীভাবে এই ধরনের পরিচালনা করতে হয় তা জানে নাটমক্যাট একটি 405 কোড প্রদান করে। এবং এই আমাদের প্রকল্প কি ঘটেছে. কিন্তু যদি একটি উপযুক্ত সার্লেট পাওয়া যায়, এবং এটির একটি উপযুক্ত পদ্ধতি থাকে, তাহলে টমক্যাট একটি সার্লেট বস্তু তৈরি করে, এটি একটি নতুন থ্রেডে শুরু করে(যা এটিকে নিজে থেকে চলতে দেয়), এবং টমক্যাট তার নিজস্ব কাজ চালিয়ে যায়, অনুরোধ গ্রহণ করে এবং প্রেরণ করে। অতিরিক্তভাবে, টমক্যাট আরও দুটি বস্তু তৈরি করে: একটি HttpServletRequest (যাকে আমি সংক্ষেপে "অনুরোধ" বলব), এবং একটি HttpServletResponse (যাকে আমি "প্রতিক্রিয়া" বলব)। এটি ক্লায়েন্টের অনুরোধ থেকে প্রাপ্ত সমস্ত ডেটা প্রথম অবজেক্টে রাখে, যাতে সমস্ত ডেটা এটি থেকে বের করা যায়। এবং তারপর এত কিছুর পরে, এটি এই দুটি বস্তুকে সার্লেটের উপযুক্ত পদ্ধতিতে পাস করে যা একটি পৃথক থ্রেডে শুরু হয়েছিল। যত তাড়াতাড়ি সার্লেট তার কাজ শেষ করে এবং ক্লায়েন্টের কাছে পাঠানোর জন্য একটি প্রতিক্রিয়া প্রস্তুত থাকে, এটি টমক্যাটে একটি পতাকা নাড়িয়ে বলে "আমার কাজ শেষ। সবকিছু প্রস্তুত"। টমক্যাট প্রতিক্রিয়া গ্রহণ করে এবং ক্লায়েন্টের কাছে পাঠায়। এটি টমক্যাটকে অনুরোধ গ্রহণ করতে এবং প্রতিক্রিয়া পাঠাতে দেয়, বিভ্রান্ত না হয়ে, এবং সমস্ত কাজ আলাদা থ্রেডে চলমান servlets দ্বারা সম্পন্ন করা হয়। এর মানে হল যে আমরা যখন সার্লেট কোড লিখি তখন আমরা নির্ধারণ করি কোন কাজটি করা হবে। এবং আপনি main() পদ্ধতিটিকে টমক্যাটের ভিতরে অবস্থিত বলে মনে করতে পারেন (হ্যাঁ, এটি জাভাতে লেখা), এবং যখন আমরা টমক্যাট "লঞ্চ" করি, তখন main() পদ্ধতিটি শুরু হয়। সার্লেট এবং জেএসপি ব্যবহার করে একটি সাধারণ ওয়েব অ্যাপ্লিকেশন তৈরি করা (পার্ট 1) - 2

GET পদ্ধতি ধরতে এবং অতি সাধারণ প্রতিক্রিয়া পাঠাতে servlets ব্যবহার করুন

এই মুহুর্তে, আমাদের servlets এর কোন উপযুক্ত পদ্ধতি নেই (GET), তাই Tomcat একটি 405 ত্রুটি প্রদান করে। আসুন তাদের তৈরি করি! HttpServlet ক্লাস, আমরা আমাদের সার্বলেট উত্তরাধিকারসূত্রে পেয়েছি, বিভিন্ন পদ্ধতি ঘোষণা করে। পদ্ধতিতে নির্দিষ্ট কোড বরাদ্দ করতে, আমরা কেবল তাদের ওভাররাইড করি। এই ক্ষেত্রে, আমাদের doGet()উভয় সার্লেটে পদ্ধতিটিকে ওভাররাইড করতে হবে।

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
আপনি দেখতে পাচ্ছেন, এই পদ্ধতিটি দুটি আর্গুমেন্ট নেয়: অনুরোধ (অনুরোধ) এবং প্রতিক্রিয়া (প্রতিক্রিয়া)। এগুলিই সেই বস্তু যা টমক্যাট আমাদের জন্য তৈরি করে এবং পপুলেট করে যখন এটি সার্লেটে উপযুক্ত পদ্ধতিকে কল করে। শুরু করার জন্য, আমরা সবচেয়ে সহজ প্রতিক্রিয়া তৈরি করব। এটি করার জন্য, আমরা resp অবজেক্টটি নেব এবং এটি থেকে একটি PrintWriter অবজেক্ট পাব। এই ধরনের অবজেক্ট একটি প্রতিক্রিয়া রচনা করতে ব্যবহৃত হয়। আমরা এটি একটি সাধারণ স্ট্রিং আউটপুট করতে ব্যবহার করব।

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    writer.println("GET method from AddServlet");
}
আমরা ListServlet এ অনুরূপ কিছু করব, এবং তারপর আমরা আমাদের সার্ভার পুনরায় চালু করব। আপনি দেখতে পারেন, সবকিছু কাজ করে! আপনি যখন বোতামগুলিতে ক্লিক করেন, আপনি প্রিন্ট রাইটারের সাথে আমরা "লিখেছি" এমন পাঠ্য সহ পৃষ্ঠাগুলি পান৷ কিন্তু প্রতিক্রিয়া সহ পৃষ্ঠা তৈরি করার জন্য আমরা যে JSP ফাইলগুলি তৈরি করেছি সেগুলি ব্যবহার করা হচ্ছে না। যে শুধুমাত্র কারণ তারা মৃত্যুদন্ড কার্যকর করা হয় না. আমাদের সার্লেট নিজেই প্রতিক্রিয়া তৈরি করে এবং দৌড় শেষ করে, টমক্যাটকে সংকেত দেয় যে এটি ক্লায়েন্টকে প্রতিক্রিয়া জানাতে প্রস্তুত। টমক্যাট শুধু প্রতিক্রিয়া নেয় এবং ক্লায়েন্টের কাছে ফেরত পাঠায়। servlets থেকে JSP ফাইলে নিয়ন্ত্রণ পাস করা যাক। আমরা আমাদের পদ্ধতির কোড নিম্নরূপ পরিবর্তন করব:
  • আমরা রিকোয়েস্ট অবজেক্ট থেকে একটি রিকোয়েস্ট ডিসপ্যাচার অবজেক্ট পাই এবং এটিকে JSP পেজের অ্যাড্রেস দিয়ে দিই যেখানে আমরা কন্ট্রোল হস্তান্তর করতে চাই;
  • আমরা নির্দিষ্ট JSP পৃষ্ঠায় নিয়ন্ত্রণ স্থানান্তর করতে এই বস্তুটি ব্যবহার করি, আমরা টমক্যাট থেকে প্রাপ্ত অনুরোধ এবং প্রতিক্রিয়া অবজেক্টগুলি পাস করতে ভুলবেন না।

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
    requestDispatcher.forward(req, resp);
}
JSP পৃষ্ঠাগুলির বডি ট্যাগে, আপনি কিছু যোগ করতে পারেন যাতে আমরা স্পষ্টভাবে দেখতে পারি কোন পৃষ্ঠাটি প্রদর্শিত হচ্ছে। একবার আপনি এটি সম্পন্ন করার পরে, সার্ভার পুনরায় চালু করুন এবং পরীক্ষা করুন। আমরা মূল পৃষ্ঠার বোতামগুলিতে ক্লিক করি এবং পৃষ্ঠাগুলি খোলা হয়, যার মানে অনুরোধগুলি সার্লেটগুলিতে পাঠানো হচ্ছে। তারপর নিয়ন্ত্রণ JSP পৃষ্ঠাগুলিতে প্রেরণ করা হয়, যা এখন রেন্ডার করা হচ্ছে। এখন এ পর্যন্তই. এই নিবন্ধের পরবর্তী অংশে , আমরা আমাদের অ্যাপ্লিকেশনটির কার্যকারিতা নিয়ে কাজ করব।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION