JavaRush /جاوا بلاگ /Random-UR /حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔ ایک سادہ ویب ایپلیکیشن ل...

حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔ ایک سادہ ویب ایپلیکیشن لکھنا

گروپ میں شائع ہوا۔
یہ مواد "انٹرپرائز ڈویلپمنٹ کا تعارف" سیریز کا حصہ ہے۔ پچھلے مضامین: حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 1کیا آپ پہلے ہی جانتے ہیں کہ جاوا ایپلی کیشنز کو کس طرح لکھنا ہے جو کنسول میں ٹیکسٹ آؤٹ پٹ کرتی ہے، لیکن آپ اب بھی واقعی یہ نہیں جانتے کہ اپنی پہلی ویب ایپلیکیشن کیسے بنائی جائے؟ بہت اچھا، اپنے آپ کو آرام دہ بنائیں۔ اس آرٹیکل میں، ہم سرولیٹس سے واقف ہوں گے اور ایک ایسی ایپلی کیشن لکھیں گے جسے آپ اپنے دوستوں کو جارنک بھیجے یا جاوا ڈاؤن لوڈ کرنے پر مجبور کیے بغیر دکھا سکتے ہیں۔ آئیے ایک ویب ایپلیکیشن لکھتے ہیں ۔ اگر آپ ابھی تک ان طریقوں سے واقف نہیں ہیں جو ویب پروگرامنگ میں استعمال ہوتے ہیں، تو میں آپ کو مشورہ دیتا ہوں کہ آپ سیریز کے پہلے مضمون سے پڑھنا شروع کریں " انٹرپرائز ڈویلپمنٹ کا تعارف

سرولیٹ کیا ہے؟

سب سے پہلے، آئیے معلوم کریں کہ سرولیٹ کیا ہے اور آپ اس کے بارے میں اکثر کیوں سنتے ہیں۔ Java Servlet API ایک معیاری API ہے جسے سرور پر لاگو کرنے اور کلائنٹ کے ساتھ درخواست کے جواب کی اسکیم کا استعمال کرتے ہوئے کام کرنے کے لیے ڈیزائن کیا گیا ہے۔ سرولیٹ ایک کلاس ہے جو کلائنٹ سے درخواستیں وصول کرسکتی ہے اور اس پر جوابات واپس کرسکتی ہے۔ جی ہاں، جاوا میں servlets بالکل وہی عناصر ہیں جن کے ساتھ کلائنٹ-سرور کا فن تعمیر بنایا گیا ہے۔ اگر آپ کو یاد ہے تو، ہم نے پہلے ہی سیریز کے مضامین میں سے ایک میں اس کے بارے میں بات کی ہے۔ آئیے جھاڑی کے آس پاس نہ ماریں: آئیے فوراً کچھ کوڈ لکھیں۔

ویب ایپلیکیشن بنانے کے لیے آپ کو کیا ضرورت ہے۔

جاوا میں servlets کے ساتھ آرام سے کام کرنے کے لیے، آپ کو Intellij IDEA Ultimate Edition کی ضرورت ہوگی۔ یہ ادا کیا جاتا ہے، لیکن آپ 30 دن کی آزمائشی مدت کو چالو کرسکتے ہیں یا ابتدائی رسائی ورژن استعمال کرسکتے ہیں - یہ ہمیشہ مفت ہے۔ ہمارا ایپلیکیشن سرور بھی انسٹال کریں - Apache Tomcat۔ Tomcat ایک سرولیٹ کنٹینر ہے: یہ وہی ہے جو باہر سے آنے والی درخواستوں پر کارروائی کرتا ہے اور انہیں ہماری درخواست تک پہنچاتا ہے۔ آپ اس لنک سے Tomcat ڈاؤن لوڈ کر سکتے ہیں ۔

پہلی ویب ایپلیکیشن بنانا

اگر سب کچھ تیار ہے تو آئیے ایک Maven پروجیکٹ بنائیں۔ اگر آپ Maven سے واقف نہیں ہیں تو پچھلے مضمون پر توجہ دیں ۔ آئیے شروع کریں!
  1. pom.xml میں، javax.servlet-api انحصار شامل کریں اور پیکیجنگ وار سیٹ کریں:

    <?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۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 2 حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 3

  3. اگلا، ہم اشارہ کرتے ہیں کہ ہم Tomcat کا کون سا ورژن استعمال کریں گے، وہ URL جس کے ذریعے ہم سرور تک رسائی حاصل کر سکتے ہیں، اور پورٹ۔ آپ کو کچھ اس طرح ملنا چاہئے:

    حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 4
  4. جو کچھ باقی ہے وہ آرٹفیکٹ (ایک جار آرکائیو میں جمع شدہ پروجیکٹ) کی وضاحت کرنا ہے، جسے کنٹینر میں تعینات کیا جائے گا۔ آپ فکس بٹن پر کلک کر سکتے ہیں اور وار ایکسپوڈڈ کو منتخب کر سکتے ہیں: اس کا مطلب یہ ہے کہ پراجیکٹ کو دوبارہ بنانے کے بعد، آرٹفیکٹ خود بخود سرولیٹ کنٹینر میں رکھ دیا جائے گا۔ حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 5

  5. ایپلیکیشن کا سیاق و سباق پہلے سے طے شدہ طور پر servlets_war_exploded پر سیٹ کیا گیا ہے ، جس کا مطلب ہے کہ ایپلیکیشن تک رسائی اس پر ہونی چاہیے: http://localhost:8080/servlets_war_exploded ۔

    ہمیں اضافی متن کی ضرورت کیوں ہے؟ آئیے غیر ضروری چیزوں کو ہٹا دیں۔ اب ہماری درخواست کا پتہ یہ ہے: http://localhost:8080 ۔

    حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 6

  6. ٹھیک ہے پر کلک کریں۔ ہم دیکھتے ہیں کہ اب ہمارے پاس ایپلیکیشن لانچ کرنے کا موقع ہے:

    حصہ 5۔ سرولیٹس، جاوا سرولیٹ API۔  ایک سادہ ویب ایپلیکیشن لکھنا - 7

    اب، جب آپ ایپلیکیشن لانچ کرتے ہیں، تو براؤزر کو کھلنا چاہیے اور 404 ایرر دکھانا چاہیے۔ یہ منطقی ہے، کیونکہ ایڈریس http://localhost:8080/ پر "/" میپنگ کے ساتھ ایک سرولیٹ ہونا چاہیے، اور ہمارے واحد سرولیٹ میں "/hello" میپنگ ہے ۔

  7. ہم اس سے http://localhost:8080/hello پر رابطہ کرتے ہیں اور متوقع جواب حاصل کرتے ہیں - سٹرنگ "Hello"!

اگر سب کچھ کام کرتا ہے تو آئیے کوڈ کو دیکھیں۔ باقاعدہ کلاس سے HTTP سرولیٹ بنانے کے لیے ، آپ کو اسے 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();
   }
}
سرولیٹ فی الحال سیشن چلا رہا ہے، ہر بار صفحہ وزٹ کرنے پر وزٹ کاؤنٹر کو بڑھاتا ہے۔ اگر وزٹ کاؤنٹر انتساب ابھی تک نہیں بنایا گیا ہے (پہلی بار جب آپ صفحہ دیکھیں گے)، تو getAttribute() طریقہ null لوٹ آئے گا، لہذا آپ کو null کی جانچ کرنا ہوگی۔ درخواست کے پیرامیٹرز پر بھی یہی لاگو ہوتا ہے۔ اگر صارف صارف نام کے پیرامیٹر کو پاس نہیں کرتا ہے، تو اس کی قدر کالعدم ہو جائے گی۔ اس صورت میں، ہم صارف کو گمنام کے طور پر سلام کریں گے۔ جی ای ٹی درخواست میں پیرامیٹر پاس کرنے کے لیے، پاتھ متغیر استعمال کیے جاتے ہیں، یعنی آپ کو لنک تک رسائی حاصل کرنے کی ضرورت ہے http://localhost:8080/hello?username=Pavel ۔ آپ سیریز کے پچھلے مضمون میں HTTP درخواستوں کے بارے میں مزید پڑھ سکتے ہیں ۔ اب ہماری درخواست میں کم سے کم منطق ہے، لیکن روٹ پاتھ میں 404 کی خرابی تھوڑی پریشان کن ہے۔ اسے ٹھیک کرنے کے لیے، آئیے ایک اور سرولیٹ بنائیں اور اسے ابتدائی صفحہ @WebServlet("/") پر نقشہ بنائیں۔ اس سرولیٹ کا کام درخواستوں کو "/ہیلو" راستے پر بھیجنا ہے۔ ایسا کرنے کے دو طریقے ہیں: فارورڈ یا ری ڈائریکٹ کا استعمال۔ شاید یہ سمجھنے کے قابل ہے کہ ان میں کیا فرق ہے۔ فارورڈ - مندوبین سرور پر کسی دوسرے سرولیٹ کو پروسیسنگ کی درخواست کرتے ہیں، کلائنٹ اس میں شامل نہیں ہے۔ ایسا کرنے کے لیے، آپ کو نئے سرولیٹ کے doGet() طریقہ کار میں درج ذیل کوڈ کو شامل کرنا ہوگا۔
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
اس کوڈ میں، ہم servlet سیاق و سباق تک رسائی حاصل کرتے ہیں، اس سے مطلوبہ servlet کے درخواست مینیجر کو حاصل کرتے ہیں اور اس سے مخصوص پیرامیٹرز (req، resp) کے ساتھ مخصوص درخواست پر کارروائی کرنے کو کہتے ہیں۔ ری ڈائریکٹ - کلائنٹ کو وہ پتہ واپس کرتا ہے جس پر اسے اپنی درخواست پر کارروائی کرنے کے لیے رابطہ کرنے کی ضرورت ہے۔ زیادہ تر براؤزر خود بخود منتقل شدہ لنک پر جاتے ہیں۔ ری ڈائریکٹ کو لاگو کرنے کے لیے آپ کو یہ کوڈ شامل کرنا ہوگا:
resp.sendRedirect(req.getContextPath() + "/hello");
HttpServletResponse میں ہم redirect() طریقہ کو کال کرتے ہیں اور اسے وہ پتہ پاس کرتے ہیں جس سے کلائنٹ کو رابطہ کرنے کی ضرورت ہے۔ ایک اہم تفصیل: مکمل ری ڈائریکٹ پاتھ کے آخر میں HTTP پیرامیٹرز کو بھی شامل کرنا ضروری ہے، جو زیادہ آسان نہیں ہے۔ ہمارے حالات میں، فارورڈ استعمال کرنا بہتر ہے، لیکن ایسا ہوتا ہے کہ ری ڈائریکٹ کا استعمال کرنا بہتر ہے۔ اگر آپ ان کے کام میں فرق کو سمجھتے ہیں، تو آپ اپنی پسند کے ساتھ غلط نہیں ہوں گے۔ نئے سرولیٹ کا کوڈ اس طرح لگتا ہے:
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۔ ایم وی سی (ماڈل ویو-کنٹرولر) پیٹرن کا تعارف حصہ 8۔ بہار بوٹ میں ایک چھوٹی ایپلی کیشن لکھنا
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION