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

পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই। একটি সাধারণ ওয়েব অ্যাপ্লিকেশন লেখা

এলোমেলো দলে প্রকাশিত
সদস্যগণ
এই উপাদানটি "এন্টারপ্রাইজ ডেভেলপমেন্টের ভূমিকা" সিরিজের অংশ। পূর্ববর্তী নিবন্ধ: পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সহজ ওয়েব অ্যাপ্লিকেশন লেখা - 1আপনি কি ইতিমধ্যে জাভা অ্যাপ্লিকেশনগুলি লিখতে জানেন যা কনসোলে পাঠ্য প্রদর্শন করে, কিন্তু আপনি এখনও জানেন না কিভাবে আপনার প্রথম ওয়েব অ্যাপ্লিকেশন তৈরি করবেন? দুর্দান্ত, নিজেকে আরামদায়ক করুন। এই নিবন্ধে, আমরা সার্লেটগুলির সাথে পরিচিত হব এবং একটি অ্যাপ্লিকেশন লিখব যা আপনি আপনার বন্ধুদের কাছে একটি JAR ফাইল না পাঠিয়ে এবং তাদের জাভা ডাউনলোড করতে বাধ্য না করেই বড়াই করতে পারেন৷ আসুন একটি সাধারণ ওয়েব অ্যাপ্লিকেশন লিখি । আপনি যদি ওয়েব ডেভেলপমেন্টে ব্যবহৃত পন্থাগুলির সাথে ইতিমধ্যে পরিচিত না হন তবে আমি সুপারিশ করছি যে আপনি " এন্টারপ্রাইজ ডেভেলপমেন্টের ভূমিকা " সিরিজের প্রথম নিবন্ধটি পড়ে শুরু করুন৷

একটি servlet কি?

প্রথমে, আসুন জেনে নেওয়া যাক সার্লেটগুলি কী এবং কেন আপনি সেগুলি সম্পর্কে প্রায়শই শুনতে পান। জাভা সার্ভলেট API হল একটি প্রমিত API যা সার্ভারে প্রয়োগ করার উদ্দেশ্যে। এটি একটি অনুরোধ-প্রতিক্রিয়া স্কিম অনুযায়ী ক্লায়েন্টদের সাথে যোগাযোগ করে। একটি servlet একটি শ্রেণী যা একটি ক্লায়েন্ট থেকে অনুরোধ গ্রহণ করতে পারে এবং ক্লায়েন্টের কাছে প্রতিক্রিয়া ফেরত দিতে পারে। আসলে, servlets হল ঠিক সেই বিল্ডিং ব্লক যা আমরা জাভাতে একটি ক্লায়েন্ট-সার্ভার আর্কিটেকচার তৈরি করতে ব্যবহার করি। আপনি মনে করতে পারেন যে আমরা ইতিমধ্যে সিরিজের অন্য একটি নিবন্ধে সেই স্থাপত্য সম্পর্কে কথা বলেছি। আমরা ঝোপের চারপাশে মারতে যাচ্ছি না: আসুন এখনই কিছু কোড লিখি।

একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে আপনার যা প্রয়োজন

Java servlets এর সাথে কাজ করার সময় সর্বাধিক সুবিধার জন্য, আপনার IntelliJ IDEA আলটিমেট সংস্করণ প্রয়োজন। এটি একটি অর্থপ্রদানের পণ্য, তবে আপনি একটি 30-দিনের ট্রায়াল সক্রিয় করতে পারেন বা প্রাথমিক অ্যাক্সেস সংস্করণটি ব্যবহার করতে পারেন, যা সর্বদা বিনামূল্যে। এছাড়াও, Apache Tomcat ইনস্টল করুন — আমাদের অ্যাপ্লিকেশনের সার্ভার। টমক্যাট একটি সার্লেট ধারক: এটি আগত অনুরোধগুলি প্রক্রিয়া করে এবং সেগুলিকে আমাদের অ্যাপ্লিকেশনে প্রেরণ করে। এখানে টমক্যাট ডাউনলোড করুন ।

আসুন আমাদের প্রথম ওয়েব অ্যাপ্লিকেশন তৈরি করি

সবকিছু প্রস্তুত হলে, একটি Maven প্রকল্প তৈরি করুন। আপনি যদি Maven এর সাথে পরিচিত না হন তবে পূর্ববর্তী নিবন্ধটি একবার দেখুন । চল শুরু করি!
  1. pom.xml এ, একটি javax.servlet-api নির্ভরতা যোগ করুন এবং WAR প্যাকেজিং নির্দিষ্ট করুন:

    <?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>org.example</groupId>
       <artifactId>servlets</artifactId>
       <version>1.0-SNAPSHOT</version>
       <packaging>war</packaging>
    
       <dependencies>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>4.0.1</version>
           </dependency>
       </dependencies>
    </project>

    সরল সার্লেট ক্লাস:

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/hello")
    public class MainServlet extends HttpServlet {
    
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           resp.setContentType("text/html");
           PrintWriter printWriter = resp.getWriter();
           printWriter.write("Hello!");
           printWriter.close();
       }
    }
  2. অ্যাপ্লিকেশন চালানোর জন্য, আপনাকে একটি টমক্যাট কনফিগারেশন তৈরি করতে হবে:

    পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সাধারণ ওয়েব অ্যাপ্লিকেশন লেখা - 2পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সাধারণ ওয়েব অ্যাপ্লিকেশন লেখা - 3

  3. এর পরে, আমরা টমক্যাটের কোন সংস্করণটি ব্যবহার করব এবং সার্ভারের সাথে যোগাযোগের জন্য URL এবং পোর্ট নির্দেশ করি। আপনি ভালো কিছু করা উচিত:

    পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সাধারণ ওয়েব অ্যাপ্লিকেশন লেখা - 4
  4. এখন আমাদের শুধু আর্টিফ্যাক্টটি নির্দিষ্ট করতে হবে (একটি JAR আর্কাইভে একত্রিত প্রকল্প) যা কন্টেইনারে স্থাপন করা হবে। আপনি ফিক্স বোতামে ক্লিক করতে পারেন এবং যুদ্ধ বিস্ফোরিত নির্বাচন করতে পারেন : এর অর্থ হল প্রকল্পটি পুনর্নির্মাণের পরে, আর্টিফ্যাক্টটি স্বয়ংক্রিয়ভাবে সার্লেট পাত্রে স্থাপন করা হবে। পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সহজ ওয়েব অ্যাপ্লিকেশন লেখা - 5

  5. অ্যাপ্লিকেশন প্রসঙ্গের ডিফল্ট মান হল servlets_war_exploded । এর মানে হল যে আমরা এখানে অ্যাপ্লিকেশন অ্যাক্সেস করি: http://localhost:8080/servlets_war_exploded

    কেন আমরা কোন অতিরিক্ত টেক্সট চাই? যা অপ্রয়োজনীয় তা মুছে ফেলি। এখন আমরা আমাদের ওয়েব অ্যাপ্লিকেশনের ঠিকানা: http://localhost:8080

    পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সহজ ওয়েব অ্যাপ্লিকেশন লেখা - 6
  6. ওকে ক্লিক করুন। আমরা দেখতে পাচ্ছি যে আমরা এখন অ্যাপ্লিকেশনটি চালু করতে পারি:

    পার্ট 5। সার্ভলেট এবং জাভা সার্ভলেট এপিআই।  একটি সহজ ওয়েব অ্যাপ্লিকেশন লেখা - 7

    এখন আপনি যখন আপনার ব্রাউজারে অ্যাপ্লিকেশনটি খুলবেন, আপনার একটি 404 ত্রুটি পাওয়া উচিত। এটি বোধগম্য, কারণ http://localhost:8080/ ঠিকানাটির জন্য একটি সার্লেট প্রয়োজন যা "/" তে ম্যাপ করে কিন্তু আমাদের একমাত্র servlet মানচিত্র "/hello" তে ।

  7. আমরা এটি http://localhost:8080/hello এ অ্যাক্সেস করতে পারি । একবার আমরা তা করি, আমরা প্রত্যাশিত উত্তর পাব — স্ট্রিং "হ্যালো"!

যদি সবকিছু কাজ করে, আসুন কোডটি বিশ্লেষণ করি। একটি সাধারণ ক্লাস থেকে একটি HTTP-servlet তৈরি করতে , এটি অবশ্যই HttpServlet ক্লাসের উত্তরাধিকারী হবে। শ্রেণী ঘোষণার উপরে, আমরা @WebServlet()টীকা নির্দেশ করি। এখানেই আমরা সার্লেটটিকে একটি নির্দিষ্ট পথে ("/হ্যালো") আবদ্ধ করি (বা মানচিত্র)। এই টীকাটি শুধুমাত্র Java Servlet API 3.0-এ উপস্থিত হয়েছে, তাই ইন্টারনেটে অনেক উদাহরণ রয়েছে যেখানে একটি XML ফাইলের মাধ্যমে সার্লেট ম্যাপিং ঘটে। এই আর প্রয়োজন নেই. GET অনুরোধগুলি পরিচালনা করতে , আমরা doGet()পদ্ধতিটি ওভাররাইড করি। পদ্ধতির পরামিতিগুলিতে মনোযোগ দিন: HttpServletRequestএবং HttpServletResponse। বস্তুটি HttpServletRequestআমাদের অনুরোধ সম্পর্কে সমস্ত প্রয়োজনীয় তথ্য সরবরাহ করে। , আমরা HttpServletResponseআমাদের প্রতিক্রিয়া লিখি এবং প্রয়োজনীয় শিরোনাম সেট করি।

পরামিতি এবং একটি অধিবেশন সঙ্গে কাজ

আসুন আমাদের সার্লেট উন্নত করি যাতে এটি অনুরোধের পরামিতিগুলি প্রক্রিয়া করতে পারে এবং একটি সেশনের সাথে কাজ করতে পারে:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       HttpSession session = req.getSession();
       Integer visitCounter = (Integer) session.getAttribute("visitCounter");
       if (visitCounter == null) {
           visitCounter = 1;
       } else {
           visitCounter++;
       }
       session.setAttribute("visitCounter", visitCounter);
       String username = req.getParameter("username");
       resp.setContentType("text/html");
       PrintWriter printWriter = resp.getWriter();
       if (username == null) {
           printWriter.write("Hello, Anonymous" + "<br>");
       } else {
           printWriter.write("Hello, " + username + "<br>");
       }
       printWriter.write("Page was visited " + visitCounter + " times.");
       printWriter.close();
   }
}
এখন সার্লেট একটি সেশনের সাথে কাজ করে, visitCounterযতবার পৃষ্ঠাটি পরিদর্শন করা হয় তার মান বৃদ্ধি করে। যদি visitCounterঅ্যাট্রিবিউটটি এখনও তৈরি না হয়ে থাকে (পৃষ্ঠাটিতে প্রথম ভিজিট করার পরে), পদ্ধতিটি getAttribute()নাল রিটার্ন করে, তাই আমাদের নাল চেক করতে হবে। একই অনুরোধ পরামিতি জন্য যায়. ব্যবহারকারী যদি ব্যবহারকারীর নাম প্যারামিটারটি পাস না করে তবে এর মান শূন্য হবে। এই ক্ষেত্রে, আমরা একজন বেনামী ভিজিটর হিসাবে ব্যবহারকারীকে শুভেচ্ছা জানাই। একটি GET অনুরোধে একটি প্যারামিটার পাস করতে, একটি ক্যোয়ারী স্ট্রিং ব্যবহার করা হয়, উদাহরণস্বরূপ, আমরা নিম্নলিখিত URLটি ব্যবহার করতে পারি: http:// localhost:8080/hello? ব্যবহারকারীর নাম=পল। আপনি আগের নিবন্ধে HTTP অনুরোধ সম্পর্কে আরও পড়তে পারেনসিরিজে আমাদের অ্যাপ্লিকেশনটিতে বর্তমানে খুব বেশি যুক্তি নেই, তবে এটি একটু বিরক্তিকর যে আমরা রুট পাথে একটি 404 ত্রুটি পেয়েছি। এটি ঠিক করার জন্য, আমরা আরেকটি সার্লেট তৈরি করব এবং এটিকে প্রারম্ভিক পৃষ্ঠায় ম্যাপ করব: @WebServlet("/"). এই সার্লেটের উদ্দেশ্য হল অনুরোধগুলিকে "/হ্যালো" পাথে পুনঃনির্দেশ করা। এটি করার দুটি উপায় রয়েছে: "ফরোয়ার্ড" বা "পুনঃনির্দেশ" ব্যবহার করে। সম্ভবত এটি তাদের মধ্যে পার্থক্য বোঝা সার্থক। একটি ফরোয়ার্ড প্রতিনিধি সার্ভারে অন্য servlet অনুরোধ প্রক্রিয়াকরণ. ক্লায়েন্ট জড়িত নয়। এটি করার জন্য, নতুন servlet এর doGet() পদ্ধতিতে নিম্নলিখিত কোড যোগ করুন:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
এই কোডে, আমরা সার্লেট প্রসঙ্গে অ্যাক্সেস করি, প্রাসঙ্গিক সার্লেটের জন্য অনুরোধ প্রেরণকারী পাই এবং নির্দিষ্ট আর্গুমেন্ট (req, resp) সহ একটি নির্দিষ্ট অনুরোধ প্রক্রিয়া করতে বলি। একটি পুনঃনির্দেশ ক্লায়েন্টের কাছে সেই ঠিকানাটি ফেরত দেয় যা ক্লায়েন্টকে তার অনুরোধ প্রক্রিয়া করতে ব্যবহার করতে হবে। বেশিরভাগ ব্রাউজার স্বয়ংক্রিয়ভাবে ফিরে আসা URL এ নেভিগেট করে। একটি পুনঃনির্দেশ বাস্তবায়ন করতে, আপনাকে এই কোডটি যোগ করতে হবে:
resp.sendRedirect(req.getContextPath() + "/hello");
আমরা redirect()প্যারামিটারে পদ্ধতিটিকে কল করি HttpServletResponseএবং ক্লায়েন্টকে যে ঠিকানাটি ব্যবহার করতে হবে তা পাস করি। এখানে একটি গুরুত্বপূর্ণ বিশদ রয়েছে: সম্পূর্ণ পুনঃনির্দেশিত পথের শেষে HTTP প্যারামিটারগুলিও যোগ করতে হবে, যা খুব সুবিধাজনক নয়। আমাদের পরিস্থিতিতে, এটি ব্যবহার করা বাঞ্ছনীয় forward, তবে কখনও কখনও ব্যবহার করা redirectভাল। তারা কিভাবে কাজ করে তার পার্থক্য বুঝতে পারলে আপনি ভুল পছন্দ করবেন না। নতুন সার্লেটের কোডটি এইরকম দেখাচ্ছে:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        getServletContext().getRequestDispatcher("/hello").forward(req, resp);
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}

সারসংক্ষেপ

আপনার প্রথম ওয়েব অ্যাপ্লিকেশন সম্পন্ন হয়েছে. পরের প্রবন্ধে, আপনি IntelliJ IDEA ব্যবহার না করে কীভাবে এটি স্থাপন করবেন তা শিখবেন। আমরা একটি অ্যাপ্লিকেশন লিখেছি যা শুধুমাত্র GET অনুরোধগুলিকে প্রক্রিয়া করে। অবশিষ্ট HTTP পদ্ধতিগুলি একইভাবে পরিচালনা করা হয় — অভিভাবক শ্রেণীর সংশ্লিষ্ট পদ্ধতিগুলিকে ওভাররাইড করে। আপনি অত্যাধুনিক বহুমুখী ওয়েব অ্যাপ্লিকেশন তৈরি করতে এই জাতীয় সাধারণ সার্লেট ব্যবহার করতে পারেন। অবশ্যই, স্প্রিংয়ের মতো বড় ফ্রেমওয়ার্ক ব্যবহার করা এটিকে আরও সহজ করে তোলে। কিন্তু আপনি যদি সত্যিই servlets এর সমস্ত ক্ষমতার গভীরে অনুসন্ধান করতে চান তবে আপনি অফিসিয়াল স্পেসিফিকেশন পড়তে পারেন । পার্ট 6. সার্ভলেট কন্টেইনার পার্ট 7. MVC (মডেল-ভিউ-কন্ট্রোলার) প্যাটার্ন প্রবর্তন করা হচ্ছে
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই