JavaRush /جاوا بلاگ /Random-UR /servlets اور jsp کا استعمال کرتے ہوئے ایک سادہ ویب ایپلیک...

servlets اور jsp کا استعمال کرتے ہوئے ایک سادہ ویب ایپلیکیشن بنانا (حصہ 1)

گروپ میں شائع ہوا۔
مضمون کو سمجھنے کے لیے ضروری علم کی سطح: آپ پہلے ہی کم و بیش جاوا کور کو سمجھ چکے ہیں اور JavaEE ٹیکنالوجیز اور ویب پروگرامنگ کو دیکھنا چاہیں گے۔ یہ سب سے زیادہ معنی رکھتا ہے اگر آپ فی الحال جاوا کلیکشن کی تلاش کا مطالعہ کر رہے ہیں، جو مضمون کے قریب کے موضوعات کا احاطہ کرتا ہے۔ servlets اور jsp کا استعمال کرتے ہوئے ایک سادہ ویب ایپلیکیشن بنانا (حصہ 1) - 1یہ مواد میرے مضمون کا منطقی تسلسل ہے IntelliJ Idea Enterprise میں ایک سادہ ویب پروجیکٹ بنانا ۔ اس میں میں نے دکھایا کہ ورکنگ ویب پروجیکٹ ٹیمپلیٹ کیسے بنایا جائے۔ اس بار میں آپ کو دکھاؤں گا کہ جاوا سرولیٹ API اور JavaServer Pages API ٹیکنالوجیز کا استعمال کرتے ہوئے ایک سادہ لیکن خوبصورت ویب ایپلیکیشن کیسے بنائی جائے۔ ہماری درخواست کا ہوم پیج دو لنکس کے ساتھ ہوگا:
  • صارف کو شامل کرنے والے صفحے پر؛
  • یوزر لسٹ ویو پیج پر۔
میں اب بھی IntelliJ Idea Enterprise Edition، Apache Maven (صرف چند انحصار شامل کریں) اور Apache Tomcat استعمال کروں گا۔ آخر میں، ہم W3.CSS فریم ورک کا استعمال کرتے ہوئے اپنی ایپلیکیشن کو "ڈیکوریٹ" کریں گے ۔ ہم فرض کریں گے کہ اس وقت آپ کے پاس ایک خالی پروجیکٹ ہے، جسے ہم یہاں تیار کریں گے۔ اگر نہیں، تو پہلے مضمون کو دیکھیں اور اسے بنائیں۔ اس میں صرف چند منٹ لگیں گے :)

مستقبل کی درخواست کی ساخت کے بارے میں تھوڑا سا

ہمارا مرکزی صفحہ ( / ) ایک ہیڈر اور دو لنکس/بٹن کے ساتھ سب سے عام جامد HTML صفحہ ہو گا:
  • ایک نیا صارف شامل کریں ( /add پر بھیجا جائے گا )؛
  • صارفین کی فہرست دیکھیں ( /list کو بھیجتا ہے )۔
Tomcat ان پتوں پر درخواستیں پکڑے گا اور انہیں ان دو سرورلیٹس میں سے ایک پر بھیجے گا جو ہم بنائیں گے (ہم web.xml فائل میں نقشہ سازی کی وضاحت کریں گے )۔ اور servlets، بدلے میں، درخواستوں پر کارروائی کریں گے، ڈیٹا تیار کریں گے (یا اگر کسی صارف کو شامل کیا جائے تو اسے محفوظ کریں گے)، اور متعلقہ jsp فائلوں کو کنٹرول منتقل کریں گے، جو پہلے ہی نتیجہ کو "رینڈر" کر دے گی۔ ہم ڈیٹا کو سب سے عام فہرست (List) میں محفوظ کریں گے۔

آئیے ایک جامد ہوم پیج بنائیں

اگر آپ کے ویب فولڈر میں index.jsp ہے تو اسے حذف کر دیں۔ اس کے بجائے، اس فولڈر میں ہم ایک سادہ HTML فائل بنائیں گے جسے index.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>    <!-- buttons holder -->
            <button onclick="location.href='/list'">List users<//button>
            <button onclick="location.href='/add'">Add user<//button>
        </div>
    </div>
</body>
</html>
یہاں کچھ بھی پیچیدہ نہیں ہے۔ عنوان میں ہم اپنے صفحہ کے عنوان کی نشاندہی کرتے ہیں۔ صفحہ کے باڈی میں ہمارے پاس دو اہم حصے ہیں: ہیڈر (ہیڈر) اور مواد (مواد)۔ مواد میں ہمارے پاس اپنے بٹنوں کے لیے ایک ہولڈر ہوتا ہے، اور درحقیقت دو بٹن جو کلک کرنے پر، مناسب پتوں پر بھیجے جاتے ہیں۔ آپ اس پروجیکٹ کو چلا سکتے ہیں اور دیکھ سکتے ہیں کہ یہ اب کیسا لگتا ہے۔ اگر آپ بٹنوں پر کلک کرتے ہیں تو، 404 غلطی والے صفحات کھل جاتے ہیں کیونکہ ہمارے پاس ابھی تک نہیں ہیں۔ لیکن اس سے پتہ چلتا ہے کہ بٹن کام کرتے ہیں۔ میں نوٹ کرتا ہوں کہ یہ سب سے زیادہ یونیورسل آپشن نہیں ہے، کیونکہ اگر آپ نے اچانک جاوا اسکرپٹ کو ڈس ایبل کر دیا تو براؤزر میں یہ بٹن کسی کام کے نہیں ہوں گے۔ لیکن ہم فرض کریں گے کہ کسی نے جاوا اسکرپٹ کو غیر فعال نہیں کیا ہے :)۔ یہ واضح ہے کہ سادہ لنکس استعمال کیے جا سکتے ہیں، لیکن میں بٹن کو ترجیح دیتا ہوں۔ آپ وہی کرتے ہیں جو آپ کو بہترین لگتا ہے۔ اور اس حقیقت کو مت دیکھو کہ میری مثالوں میں بہت سارے divs ہوں گے ۔ پھر ہم انہیں سٹائل سے بھر دیں گے، اور ہر چیز زیادہ خوبصورت نظر آئے گی :)۔

نتیجہ رینڈر کرنے کے لیے jsp فائلیں بنائیں

اسی ویب ڈائریکٹری میں ، ہم ایک فولڈر بنائیں گے جہاں ہم اپنی jsp فائلیں رکھیں گے ۔ میں نے اسے آراء کہا، اور دوبارہ، آپ بہتر بنا سکتے ہیں۔ اس فولڈر میں ہم دو jsp فائلیں بنائیں گے۔
  • add.jsp — صارفین کو شامل کرنے کے لیے صفحہ؛
  • list.jsp - صارفین کی فہرست دکھانے کے لیے صفحہ۔
آئیے انہیں صفحہ کے مناسب عنوانات دیں۔ "نیا صارف شامل کریں" اور "صارفین کی فہرست" جیسا کچھ، اور ہم اسے ابھی کے لیے اسی طرح چھوڑ دیں گے۔

آئیے دو سرولیٹ بناتے ہیں۔

سرولیٹس ان درخواستوں کو قبول کریں گے اور اس پر کارروائی کریں گے جو ٹومکیٹ ان کو بھیجے گی۔ src/main/java فولڈر میں ہم ایک ایپ پیکج بنائیں گے ، جس میں ہمارے ذرائع ہوں گے۔ وہاں ہمارے پاس مزید مختلف پیکجز ہوں گے۔ لہذا، تاکہ یہ پیکجز ایک دوسرے کے اندر نہ بنیں، آئیے ایپ پیکج میں کچھ کلاس بنائیں (پھر اسے حذف کریں)۔ آئیے اب ایپ پیکج میں تین مختلف پیکجز بناتے ہیں:
  • entities - ہمارے ادارے یہاں پڑے ہوں گے (کلاس خود، جو صارف کی اشیاء کو بیان کرے گی)؛
  • ماڈل - ہمارا ماڈل یہاں ہوگا (تھوڑی دیر بعد اس پر مزید)؛
  • servlets - ٹھیک ہے، یہاں ہمارے servlets ہوں گے.
اس کے بعد، آپ اس کلاس کو ایپ پیکیج سے محفوظ طریقے سے ہٹا سکتے ہیں (اگر آپ نے اسے بنایا ہے، یقیناً)۔ servlets پیکج میں ہم دو کلاسز بنائیں گے:
  • AddServlet - /add پر موصول ہونے والی درخواستوں پر کارروائی کرے گا ۔
  • ListServlet - /list پر موصول ہونے والی درخواستوں پر کارروائی کرے گا ۔

Maven میں انحصار کو مربوط کرنا

Tomcat ورژن 9.* Servlet ورژن 4.0 اور JavaServer Pages ورژن 2.3 کی وضاحتیں نافذ کرتا ہے۔ یہ دوسری لائن کے پہلے پیراگراف میں Tomcat 9 کی سرکاری دستاویزات میں لکھا گیا ہے۔ اس کا مطلب یہ ہے کہ اگر آپ، میری طرح، Tomcat کا یہ ورژن استعمال کر رہے ہیں، تو جو کوڈ ہم لکھتے ہیں اور چلانے کے لیے بھیجتے ہیں وہ بالکل مخصوص ورژن استعمال کرے گا۔ لیکن ہم اپنے پروجیکٹ میں یہ تصریحات رکھنا چاہیں گے، تاکہ ہمارا کوڈ جو ان کو استعمال کرتا ہے کم از کم کامیابی سے مرتب کرے۔ اور اس کے لیے ہمیں انہیں اپنے پروجیکٹ میں لوڈ کرنے کی ضرورت ہے۔ یہ وہ جگہ ہے جہاں ماون بچاؤ کے لئے آتا ہے۔

عام اصول یہ ہے: اگر آپ کو Maven کا استعمال کرتے ہوئے اپنے پروجیکٹ سے کچھ جوڑنے کی ضرورت ہے:

  • Maven مخزن کی ویب سائٹ پر جائیں؛
  • آپ کو مطلوبہ لائبریری اور جس ورژن کی آپ کو ضرورت ہے وہاں دیکھیں۔
  • آپ کو انحصار کا کوڈ ملتا ہے جسے آپ کے pom.xml میں داخل کرنے کی ضرورت ہے۔
  • داخل کریں! :)
تو آئیے شروع کرتے ہیں۔ پہلے، آئیے ایک pom فائل تیار کرتے ہیں ۔ کہیں /version کے بعد لیکن اس سے پہلے /project ، درج ذیل داخل کریں:
<dependencies>

</dependencies>
اس طرح، ہم نے اشارہ کیا کہ ان ٹیگز کے اندر ہم ان انحصاروں کی فہرست بنائیں گے جن کی ہمیں ضرورت ہے۔ اب mvnrepository.com پر جائیں ، سب سے اوپر ایک سرچ فیلڈ ہوگا۔ سب سے پہلے، تلاش میں servlet درج کریں. پہلا نتیجہ، جہاں سات ہزار سے زیادہ استعمال ہوتے ہیں، ہمارے مطابق ہوتا ہے۔ ہمیں یاد ہے کہ ہمیں ورژن 4.0 کی ضرورت ہے (Tomcat 9 کے لیے؛ دوسرے ورژن کے لیے، پرانے نفاذ موزوں ہو سکتے ہیں)۔ یہ کافی حالیہ ورژن ہے، اس لیے اس کے زیادہ استعمال نہیں ہیں، لیکن یہ وہی ہے جس کی ہمیں ضرورت ہے۔ ایک صفحہ کھلے گا جہاں آپ مختلف پیکیج مینیجرز کے لیے اس انحصار کا کوڈ حاصل کر سکتے ہیں اور آپ اسے ڈاؤن لوڈ بھی کر سکتے ہیں۔ لیکن چونکہ ہم اسے Maven کا استعمال کرتے ہوئے جوڑنا چاہتے ہیں، اس لیے ہم Maven ٹیب پر موجود کوڈ کو منتخب کرتے ہیں۔ ہم انحصار سیکشن کے اندر اپنی پوم فائل میں کاپی اور پیسٹ کرتے ہیں۔ اگر IDEA کے نچلے دائیں کونے میں کوئی اطلاع ظاہر ہوتی ہے جس میں پوچھا جاتا ہے کہ کیا ہم خودکار درآمد کو فعال کرنا چاہتے ہیں، تو ہم اتفاق کرتے ہیں۔ اگر آپ نے غلطی سے انکار کر دیا، تو "ترتیبات" پر جائیں اور خودکار درآمد کو دستی طور پر فعال کریں: ترتیبات (Ctrl + Alt + S) -> تعمیر، عمل درآمد، تعیناتی -> Maven -> درآمد کرنا اس کے لیے pom فائل اور IDEA کنفیگریشن فائلوں کو برقرار رکھے گا۔ ہم آہنگی میں منصوبہ. اب، اسی اصول کو استعمال کرتے ہوئے، ہم JavaServer Pages ورژن 2.3 کو تلاش اور مربوط کریں گے (تلاش میں jsp درج کریں)۔ اور چونکہ ہم پہلے ہی Maven کو لے چکے ہیں، آئیے اسے فوراً بتا دیں کہ ہمارے ذرائع جاوا 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>ru.javarush.info.fatfaggy</groupId>
    <artifactId>my-super-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>1.8</maven.compile.source>
        <maven.compiler.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>

ہمارے سرولیٹ کو حقیقی سرولیٹ بنانا

اس وقت، ہم نے جو سرولیٹس بنائے ہیں وہ دراصل صرف باقاعدہ کلاسز ہیں۔ ان میں کوئی فعالیت نہیں ہے۔ لیکن اب ہم نے Servlet API کو اپنے پروجیکٹ سے جوڑ دیا ہے، اور اگر ایسا ہے تو ہم وہاں سے کلاسز استعمال کر سکتے ہیں۔ اپنے سرولیٹس کو "حقیقی" سرولیٹ بنانے کے لیے، ہمیں صرف انہیں HttpServlet کلاس سے وراثت میں لینے کی ضرورت ہے ۔

نقشہ سازی یا تقسیم

اب یہ اچھا ہوگا کہ کسی طرح Tomcat کو بتائیں تاکہ /add کی درخواستوں کو ہمارے AddServlet servlet کے ذریعے ہینڈل کیا جائے ، اور اس وجہ سے /list کی درخواستوں کو ListServlet servlet کے ذریعے ہینڈل کیا جاتا ہے ۔ اس عمل کو میپنگ کہتے ہیں ۔ یہ اس اصول کے مطابق 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>
جیسا کہ آپ دیکھ سکتے ہیں، servlet-name دونوں صورتوں میں ایک جیسا ہے۔ اس کا شکریہ، Tomcat جانتا ہے کہ اگر /add ایڈریس پر کوئی درخواست آتی ہے، تو اسے app.servlets.AddServlet servlet پر بھیجنے کی ضرورت ہے ۔ ہم دوسرے سرولیٹ کے ساتھ بھی ایسا ہی کرتے ہیں۔ نتیجے کے طور پر، ہمارے 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>
ویسے، ہم نے یہاں (at / ) کے مرکزی صفحہ کے لیے مارک اپ نہیں بنایا۔ حقیقت یہ ہے کہ اس معاملے میں ہمیں اس کی ضرورت نہیں ہے۔ ہمارا ہوم پیج ایک سادہ HTML فائل ہے جو صرف دو بٹن دکھاتی ہے۔ کوئی متحرک مواد نہیں ہے، اس لیے ہمارے لیے اس کے لیے ایک علیحدہ سرولیٹ بنانا کوئی معنی نہیں رکھتا، جس پر ایڈریس سے درخواستیں بھیجی جائیں گی، اور جو کچھ jsp کو منتقلی کے علاوہ کچھ نہیں کرے گا (جسے تخلیق کیا گیا)، جو ڈرا کرے گا اگر ہمارے پاس صرف دو بٹن ہوتے۔ ہمیں اس کی ضرورت نہیں ہے؛ ہم ایک مستحکم وسائل سے خوش ہیں۔ جب Tomcat کو کوئی درخواست موصول ہوتی ہے، تو وہ چیک کرے گا کہ وہاں ایک بھی سرولیٹ نہیں ہے جو اس طرح کے ایڈریس پر درخواست پر کارروائی کر سکے، اور پھر یہ دیکھے گا کہ اس ایڈریس پر دراصل ایک ریڈی میڈ html فائل ہے ، جسے وہ کامیابی سے بھیج دے گا۔ . ہم اپنی ایپلیکیشن دوبارہ چلا سکتے ہیں (سرور کو دوبارہ شروع کریں یا دوبارہ تعینات کریں، جیسا کہ آپ چاہیں) اور اس بات کو یقینی بنائیں کہ مرکزی صفحہ پیش کیا گیا ہے، کچھ بھی نہیں ٹوٹا ہے، جب ہم بٹنوں پر کلک کرتے ہیں تو ٹرانزیشن ہوتی ہے، لیکن فی الحال ایک ایرر بھی ہے۔ لکھا ہوا ویسے، اگر پہلے ہمارے پاس 404 کی خرابی تھی، تو اب ہمارے پاس 405 ہے۔ اس کا مطلب ہے کہ میپنگ نے کام کیا، سرولیٹ مل گئے، لیکن ان کے پاس درخواست پر کارروائی کرنے کے لیے کوئی مناسب طریقہ نہیں تھا۔ اگر اس مرحلے پر آپ کو اب بھی 404 غلطی ملتی ہے، حالانکہ سب کچھ صحیح طریقے سے کیا گیا تھا، تو شاید آپ کو خیال میں تعیناتی کی ترتیب کو درست کرنا چاہیے۔ ایسا کرنے کے لیے، آپ کو ایڈٹ کنفیگریشنز پر جانا ہوگا (اسٹارٹ بٹن کے قریب سب سے اوپر)، ونڈو کے دائیں جانب تعیناتی ٹیب پر جائیں اور اس بات کو یقینی بنائیں کہ ایپلیکیشن سیاق و سباق میں یہ صرف اشارہ ہے/

ایک مختصر گیت انگیزی: "ہڈ کے نیچے" کیا ہو رہا ہے؟

آپ نے شاید پہلے ہی سوچا ہو گا کہ ہماری درخواست Tomcat میں کیسے کام کرتی ہے؟ وہاں کیا ہو رہا ہے؟ اور main() طریقہ کہاں ہے ؟ جیسے ہی آپ اپنے براؤزر میں localhost:8080 ٹائپ کرتے ہیں اور اس ایڈریس پر جاتے ہیں، براؤزر اس ایڈریس پر HTTP پروٹوکول کے ذریعے ایک درخواست بھیجتا ہے ۔ مجھے امید ہے کہ آپ پہلے سے ہی واقف ہوں گے کہ درخواستیں مختلف "قسم" کی ہو سکتی ہیں، جن میں سب سے زیادہ مقبول GET اور POST ہیں ۔ ہر درخواست کا جواب ہونا چاہیے۔ ایک GET درخواست توقع کرتی ہے کہ اس کے جواب میں اسے ایک ریڈی میڈ HTML کوڈ دیا جائے گا، جو براؤزر کو واپس کر دیا جائے گا، اور براؤزر اس کوڈ کو ہر طرح کے حروف، بٹن اور شکلوں سے خوبصورتی سے بدل دے گا۔ POST کی درخواست کچھ زیادہ ہی دلچسپ ہے، کیونکہ یہ اپنے ساتھ کچھ معلومات بھی رکھتی ہے۔ مثال کے طور پر، صارف کے رجسٹریشن یا اجازت کے فارم میں، آپ نے اپنا ڈیٹا درج کیا اور "بھیجیں" پر کلک کیا۔ اس وقت، آپ کی ذاتی معلومات کے ساتھ سرور کو ایک POST کی درخواست بھیجی گئی تھی۔ سرور نے اس معلومات کو قبول کیا، اس پر کارروائی کی اور کسی قسم کا جواب دیا (مثال کے طور پر، آپ کے پروفائل کے ساتھ ایک HTML صفحہ )۔ ان کے درمیان بنیادی فرق یہ ہے کہ GET درخواستوں کا مقصد صرف سرور سے ڈیٹا حاصل کرنا ہوتا ہے، جبکہ POST درخواستیں اپنے ساتھ کچھ معلومات رکھتی ہیں، اور سرور کا ڈیٹا تبدیل ہو سکتا ہے (مثال کے طور پر، جب آپ سرور پر اپنی تصویر اپ لوڈ کرتے ہیں، تو یہ POST کی درخواست میں اڑ جائے گا اور سرور اسے ڈیٹا بیس میں شامل کر دے گا، یعنی کچھ تبدیلی آئے گی۔ اب واپس Tomcat کی طرف چلتے ہیں۔ جب اسے کلائنٹ کی طرف سے کوئی درخواست موصول ہوتی ہے، تو وہ ایڈریس کو دیکھتا ہے۔ اس کے ڈیٹا کو تلاش کرتا ہے۔ دیکھیں کہ آیا کوئی مناسب سرولیٹ ہے، جو ایسے ایڈریس پر درخواستوں پر کارروائی کرے گا (یا ایک ریڈی میڈ وسیلہ جسے فوراً واپس کیا جا سکتا ہے)۔ اگر اسے واپس کرنے کے لیے کچھ نہیں ملتا ہے، تو یہ HTML صفحہ کے ساتھ جواب نہیں دیتا، لیکن 404 جواب کے ساتھ۔ اگر اسے ایک مناسب سرولیٹ ملتا ہے، جو اس پتے پر "بیٹھا" ہے، تو یہ دیکھتا ہے کہ اسے کس قسم کی درخواست موصول ہوئی ہے (GET، POST، یا کوئی اور) اور پھر سرولیٹ سے پوچھتا ہے کہ کیا اس کے پاس کوئی طریقہ ہے اس قسم کی درخواست کو سنبھال سکتا ہے۔ لیکن اگر کوئی مناسب سرولیٹ مل جاتا ہے، اور اس کا کوئی مناسب طریقہ ہوتا ہے، تو ٹامکیٹ اس سرولیٹ کا ایک آبجیکٹ بناتا ہے، اسے ایک نئے دھاگے ( thread ) میں چلاتا ہے، جو سرولیٹ کو الگ تھریڈ میں کام کرنے دیتا ہے، اور Tomcat مزید کام کرتا رہتا ہے۔ اپنے طور پر، درخواستیں وصول کرنا اور بھیجنا۔ اس کے علاوہ، Tomcat دو اور اشیاء بناتا ہے: ایک قسم HttpServletRequest (میں اسے مختصراً مستقبل میں درخواست کہوں گا)، اور دوسری قسم HttpServletResponse ۔(میں اسے جواب کہوں گا)۔ پہلے آبجیکٹ میں وہ تمام ڈیٹا رکھتا ہے جو اسے کلائنٹ کی درخواست میں موصول ہوتا ہے، تاکہ وہ تمام ڈیٹا اس آبجیکٹ سے نکالا جا سکے۔ ٹھیک ہے، اس سب کے بعد، یہ ان دونوں اشیاء کو سرولیٹ کے مناسب طریقہ پر منتقل کرتا ہے جو ایک الگ تھریڈ میں چل رہا ہے۔ جیسے ہی سرولیٹ اپنا کام ختم کر لیتا ہے اور کلائنٹ کو بھیجنے کے لیے ایک جواب تیار ہوتا ہے، اس نے ٹامکیٹ کی طرف جھنڈا اٹھاتے ہوئے کہا، "میرا کام ہو گیا، سب کچھ تیار ہے۔" Tomcat جواب قبول کرتا ہے اور اسے کلائنٹ کو بھیجتا ہے۔ یہ Tomcat کو بغیر کسی رکاوٹ کے درخواستیں قبول کرنے اور جوابات بھیجنے کی اجازت دیتا ہے، جبکہ تمام کام الگ الگ تھریڈز میں چلنے والے سرولیٹس کے ذریعے کیا جاتا ہے۔ اس کے مطابق، جب ہم سرولیٹ کوڈ لکھتے ہیں، تو ہم اس کام کی وضاحت کرتے ہیں جو انجام دیا جائے گا۔ اور ہاں، آپ main() طریقہ کے بارے میں سوچ سکتے ہیں کہ وہ خود Tomcat میں ہے (ہاں، یہ جاوا میں لکھا گیا ہے)، اور جب ہم Tomcat کو "شروع" کرتے ہیں، تو main().

ہم servlets کے ساتھ GET طریقوں کو پکڑتے ہیں اور آسان جوابات بھیجتے ہیں۔

اس وقت، ہمارے سرولیٹس کے پاس مناسب طریقے (GET) نہیں ہیں، اس لیے Tomcat ہمیں 405 ایرر دیتا ہے۔ آئیے انہیں بناتے ہیں! HttpServlet کلاس، جس سے ہم اپنے سرولیٹس کو وراثت میں لیتے ہیں، مختلف طریقوں کی وضاحت کرتا ہے۔ طریقوں کے لیے کچھ کوڈ متعین کرنے کے لیے، ہم انہیں صرف اوور رائیڈ کر دیتے ہیں۔ اس صورت میں، ہمیں دونوں سرولیٹس میں doGet() طریقہ کو اوور رائڈ کرنے کی ضرورت ہے۔
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
جیسا کہ آپ دیکھ سکتے ہیں، یہ طریقہ دو اشیاء کو قبول کرتا ہے: درخواست (درخواست) اور جواب (جواب)۔ یہ وہی چیزیں ہیں جو Tomcat ہمارے لیے تخلیق اور آباد کرے گی جب وہ اس سرولیٹ میں مناسب طریقہ کو کال کرے گا۔ سب سے پہلے، آئیے سب سے آسان جوابات کرتے ہیں۔ ایسا کرنے کے لیے، resp آبجیکٹ لیں اور اس سے ایک PrintWriter آبجیکٹ حاصل کریں ، جسے جوابات تحریر کرنے کے لیے استعمال کیا جا سکتا ہے۔ ٹھیک ہے، اس کا استعمال کرتے ہوئے ہم کچھ سادہ تار پرنٹ کریں گے.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter writer = resp.getWriter();
    writer.println("Method GET from AddServlet");
}
ہم ListServlet servlet میں کچھ ایسا ہی کریں گے ، جس کے بعد ہم اپنا سرور دوبارہ شروع کریں گے۔ جیسا کہ آپ دیکھ سکتے ہیں، سب کچھ کام کرتا ہے! جب آپ بٹنوں پر کلک کرتے ہیں، تو صفحات اس متن کے ساتھ کھلتے ہیں جسے ہم نے PrintWriter کے ساتھ "ریکارڈ" کیا تھا ۔ یہ صرف اتنا ہے کہ ہمارا jsp جسے ہم نے جوابات کے ساتھ صفحات بنانے کے لیے تیار کیا ہے کسی بھی طرح استعمال نہیں کیا جاتا ہے۔ اس کی وجہ یہ ہے کہ پھانسی ان تک نہیں پہنچتی۔ سرورلیٹ خود اب ایک ردعمل پیدا کرتا ہے اور اپنا کام ختم کرتا ہے، Tomcat کو اشارہ کرتا ہے کہ اس کے پاس کلائنٹ کے لیے جواب تیار ہے۔ Tomcat آسانی سے یہ جواب لیتا ہے اور اسے کلائنٹ کو واپس بھیج دیتا ہے۔ ہم servlets سے jsp میں کنٹرول منتقل کرتے ہیں۔ آئیے اپنے طریقوں کے کوڈ کو اس طرح تبدیل کریں:
  • ہمیں ریکوسٹ آبجیکٹ سے ریکوسٹ مینیجر آبجیکٹ ملتا ہے، جہاں ہم اس صفحے کا jsp ایڈریس پاس کرتے ہیں جس پر ہم کنٹرول منتقل کرنا چاہتے ہیں۔
  • موصولہ آبجیکٹ کا استعمال کرتے ہوئے، ہم کنٹرول کو مخصوص jsp صفحہ پر منتقل کرتے ہیں، اور Tomcat سے موصول ہونے والی درخواست اور جوابی اشیاء کو وہاں منسلک کرنا نہ بھولیں۔
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp");
    requestDispatcher.forward(req, resp);
}
jsp صفحات کی باڈی میں (باڈی ٹیگ کے اندر) ہم کچھ لکھ سکتے ہیں تاکہ ہم واضح طور پر دیکھ سکیں کہ کون سا صفحہ ظاہر ہو رہا ہے۔ اس کے بعد، ہم سرور کو دوبارہ شروع کریں اور چیک کریں. مرکزی صفحہ پر بٹن دبائے جاتے ہیں، صفحات کھولے جاتے ہیں، جس کا مطلب ہے کہ درخواستیں سرولیٹس کو بھیجی جاتی ہیں، جس کے بعد کنٹرول jsp صفحات پر منتقل ہو جاتا ہے، جو پہلے سے پیش کیے گئے ہیں۔ بس۔ مضمون کے اگلے حصے میں ہم اپنی درخواست کی فعالیت کے بارے میں بات کریں گے۔

اور کیا پڑھنا ہے:

IntelliJ Idea Enterprise میں ایک سادہ ویب پروجیکٹ بنانا۔ قدم بہ قدم تصویروں کے ساتھ


میری گپ شپ
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION