JavaRush /جاوا بلاگ /Random-UR /جاوا میں ویب ایپلیکیشن
Viacheslav
سطح

جاوا میں ویب ایپلیکیشن

گروپ میں شائع ہوا۔
جاوا میں ویب ایپلیکیشن - 1

تعارف

ایک زمانے میں، جاوا نے اپنی پوزیشن کو اس حقیقت کی وجہ سے مضبوط کیا کہ اس نے ویب ایپلیکیشنز کو ترجیح کے طور پر منتخب کیا۔ اپنے ابتدائی دنوں سے، جاوا نے اپنا راستہ تلاش کرنے کے لیے جدوجہد کی ہے۔ سب سے پہلے، میں نے ایپلٹس کی تجویز کی۔ اس نے ڈویلپرز کو جامد HTML صفحات پر متحرک مواد تخلیق کرنے کے بہت سے مواقع فراہم کیے ہیں۔ تاہم، ایپلٹس کئی وجوہات کی بنا پر توقعات پر پورا نہیں اترے: سیکیورٹی، اوور ہیڈ، اور دیگر۔ پھر جاوا زبان کے ڈویلپرز نے ایک متبادل تجویز کیا - Servlet API ۔ اور یہ درست فیصلہ نکلا۔ Servlet API وہ تصریح ہے جس پر جاوا ویب ایپلیکیشن بنائی جاتی ہے، خواہ وہ ویب پر مبنی ایپلی کیشن ہو یا ویب سروس جو درخواست کے مطابق معلومات واپس کرتی ہے۔ لہذا، جاوا ویب ایپلیکیشنز کے کام کرنے کے طریقہ کو سمجھنے کا راستہ Servlet API کو سمجھنے سے شروع ہوتا ہے۔
جاوا میں ویب ایپلیکیشن - 2

سرولیٹ API

لہذا، Servlet API وہی ہے جو لینگویج ڈویلپرز جاوا ڈویلپرز کو پیش کرتے ہیں۔ Servlet API ایک تصریح ہے جس کو ہمارے اہم سوالات کا جواب دینا چاہیے۔ آپ اسے یہاں تلاش کر سکتے ہیں: " JSR-000340 JavaTM Servlet 3.1 حتمی ریلیز برائے تشخیص "۔ باب " 1.1 سرولیٹ کیا ہے؟ " کہتا ہے کہ سرولیٹ جاوا ٹیکنالوجی پر مبنی ایک ویب جزو ہے جو متحرک مواد (یعنی مواد) تخلیق کرتا ہے۔ "جاوا پر مبنی" کا مطلب ہے کہ ایک سرولیٹ ایک جاوا کلاس ہے جس کو bytecode میں مرتب کیا گیا ہے ۔ سرولیٹ کا انتظام سرولیٹ کنٹینر کے ذریعے کیا جاتا ہے، جسے بعض اوقات سرولیٹ انجن بھی کہا جاتا ہے۔ سرولیٹ کنٹینر ایک ویب سرور ایکسٹینشن ہے جو سرولیٹ کی فعالیت فراہم کرتا ہے۔ بدلے میں، سرولیٹس درخواست/جواب کے نمونے میں کلائنٹ کے ساتھ تعامل فراہم کرتے ہیں، جسے سرولیٹ کنٹینر کے ذریعے لاگو کیا جاتا ہے۔ باب " 1.2 سرولیٹ کنٹینر کیا ہے؟ " میں کہا گیا ہے کہ سرولیٹ کنٹینر ویب سرور یا ایپلیکیشن سرور کا حصہ ہے جو نیٹ ورک کی خدمات فراہم کرتا ہے جس کے ذریعے درخواستیں اور جوابات بھیجے جاتے ہیں، MIME پر مبنی درخواستیں اور جوابات تیار کیے جاتے ہیں اور ان پر کارروائی کی جاتی ہے۔ . اس کے علاوہ، سرولیٹ کنٹینرز سرولیٹس کے لائف سائیکل کا انتظام کرتے ہیں (یعنی فیصلہ کریں کہ انہیں کب بنانا ہے، انہیں حذف کرنا ہے، وغیرہ)۔ تمام سرولیٹ کنٹینرز کو درخواستیں وصول کرنے اور جوابات بھیجنے کے لیے HTTP پروٹوکول کو سپورٹ کرنا چاہیے۔ یہاں میں یہ شامل کرنا چاہوں گا کہ MIME ایک معیاری ہے، ایک تصریح جو یہ بتاتی ہے کہ معلومات کو کیسے انکوڈ کیا جانا چاہیے اور پیغامات کو فارمیٹ کیا جانا چاہیے تاکہ وہ انٹرنیٹ پر بھیجے جا سکیں۔
جاوا میں ویب ایپلیکیشن - 3

ویب سرور

ویب سرور ایک ایسا سرور ہوتا ہے جو کلائنٹس سے HTTP درخواستیں قبول کرتا ہے اور انہیں HTTP جوابات (عام طور پر HTML صفحہ، تصویر، فائل، یا دیگر ڈیٹا کے ساتھ) فراہم کرتا ہے۔ درخواست کردہ وسائل کی شناخت URLs کے ذریعے کی جاتی ہے۔ Servlet API سپورٹ کے ساتھ مقبول ترین ویب سرورز میں سے ایک Apache Tomcat ہے ۔ زیادہ تر ویب سرور پیچیدہ مشینیں ہیں جو مختلف اجزاء سے بنی ہیں، جن میں سے ہر ایک مخصوص کام انجام دیتا ہے۔ مثال کے طور پر:
جاوا میں ویب ایپلیکیشن - 4

کنیکٹرز

- ان پٹ پر ہمارے پاس کنیکٹر (یعنی کنیکٹر) ہیں جو کلائنٹس کی جانب سے آنے والی درخواستوں کو قبول کرتے ہیں۔ Tomcat میں HTTP کنیکٹر کو "Coyote" جزو کا استعمال کرتے ہوئے لاگو کیا جاتا ہے۔ کنیکٹر کلائنٹ سے ڈیٹا وصول کرتے ہیں اور اسے ٹامکیٹ انجن کو منتقل کرتے ہیں۔ سرولیٹ کنٹینر - ٹامکیٹ انجن، بدلے میں، کلائنٹ کی جانب سے موصول ہونے والی درخواست پر "کیٹالینا" جزو کا استعمال کرتے ہوئے کارروائی کرتا ہے، جو کہ ایک سرولیٹ کنٹینر ہے۔ مزید تفصیلات کے لیے Tomcat دستاویزات دیکھیں: " آرکیٹیکچر کا جائزہ "۔ دوسرے ویب سرورز ہیں جو Servlet API تفصیلات کی حمایت کرتے ہیں۔ مثال کے طور پر، " جیٹی " یا " انڈر ٹو "۔ ان کا فن تعمیر ایک جیسا ہے، لہذا ایک سرولیٹ کنٹینر کے ساتھ کام کرنے کے اصول کو سمجھتے ہوئے، آپ دوسرے کے ساتھ کام کرنے پر سوئچ کر سکتے ہیں۔
جاوا میں ویب ایپلیکیشن - 5

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

لہذا، ہمارے لیے ویب ایپلیکیشن چلانے کے لیے، ہمیں ایک ایسے ویب سرور کی ضرورت ہے جو Servlet API کو سپورٹ کرتا ہو (یعنی جس میں ایک ایکسٹینشن جزو ہو جو ویب سرور کے لیے Servlet API سپورٹ کو نافذ کرتا ہو)۔ ٹھیک. ویسے بھی ویب ایپلیکیشن کیا ہے؟ Servlet API تفصیلات کے " 10 Web Applications " باب کے مطابق ، ایک ویب ایپلیکیشن سرولیٹس، HTML صفحات، کلاسز، اور دیگر وسائل کا مجموعہ ہے جو ویب سرور پر ایک حتمی ایپلیکیشن بناتے ہیں۔ باب " 10.6 ویب ایپلیکیشن آرکائیو فائل " کے مطابق، ایک ویب ایپلیکیشن کو ویب آرکائیو میں پیک کیا جا سکتا ہے (WAR ایکسٹینشن والا آرکائیو)۔ جیسا کہ " لغت 219 " صفحہ پر بیان کیا گیا ہے:
جاوا میں ویب ایپلیکیشن - 6
یعنی JAR کی بجائے WAR بنایا گیا ہے تاکہ یہ ظاہر کیا جا سکے کہ یہ ایک ویب ایپلی کیشن ہے۔ اگلی اہم حقیقت: ہمارے پاس اپنے WAR آرکائیو میں ایک مخصوص ڈائریکٹری ڈھانچہ ہونا ضروری ہے۔ باب " 10.5 ڈائریکٹری ڈھانچہ " میں Servlet API تفصیلات میں۔ اس باب میں کہا گیا ہے کہ "WEB-INF" نامی ایک خصوصی ڈائریکٹری ہے۔ یہ ڈائرکٹری اس لحاظ سے خاص ہے کہ یہ کلائنٹ کو نظر نہیں آتی ہے اور اسے براہ راست نہیں دکھائی جاتی ہے، لیکن یہ سرولیٹ کوڈ تک قابل رسائی ہے۔ یہ یہ بھی کہتا ہے کہ WEB-INF ڈائریکٹری میں کیا شامل ہوسکتا ہے:
جاوا میں ویب ایپلیکیشن - 7
اس پوری فہرست سے، اب ہم کچھ web.xml فائل کے بارے میں نہیں جانتے اور نہ ہی سمجھتے ہیں جسے deployment descriptor کہتے ہیں ۔ یہ کیا ہے؟ باب " 14. تعیناتی بیان کنندہ " تعیناتی کی وضاحت کرنے والے کے لیے وقف ہے۔ مختصراً، ایک تعیناتی ڈسکرپٹر ایک xml فائل ہے جو بیان کرتی ہے کہ ویب سرور پر ہماری ویب ایپلیکیشن کو کیسے تعینات کیا جائے (یعنی چلایا جائے)۔ مثال کے طور پر، تعیناتی ڈسکرپٹر اس بات کی نشاندہی کرتا ہے کہ ہماری ایپلیکیشن تک رسائی کے لیے کون سے یو آر ایل استعمال کیے جائیں، ہماری ایپلیکیشن سے متعلق حفاظتی ترتیبات وغیرہ کی نشاندہی کی گئی ہے۔ باب " 14.2 تعیناتی پر کارروائی کرنے کے قواعد " کہتا ہے کہ ہماری ایپلیکیشن کو ترتیب دینے اور لانچ کرنے سے پہلے web.xml کو اسکیما کے مطابق درست کیا جائے گا (یعنی یہ چیک کیا جائے گا کہ web.xml کے مواد درست طریقے سے لکھے گئے ہیں۔ اسکیما تک)۔ اور باب " 14.3 ڈیپلائمنٹ ڈسکرپٹر " میں اشارہ کیا گیا ہے کہ خاکہ یہاں ہے: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd اگر ہم فائل کے مواد کو دیکھیں تو ہم دیکھ سکتے ہیں:
جاوا میں ویب ایپلیکیشن - 8
XML فائلوں کے لیے اسکیما کیا استعمال کیا جاتا ہے؟ اسکیماس بتاتے ہیں کہ XML دستاویز کو صحیح طریقے سے کیسے پُر کیا جائے: کون سے عناصر استعمال کیے جا سکتے ہیں، عناصر میں کس قسم کے ڈیٹا کی وضاحت کی جا سکتی ہے، عناصر کو کس ترتیب میں جانا چاہیے، کن عناصر کی ضرورت ہے، وغیرہ۔ آپ XML دستاویز کے اسکیما کا جاوا میں ایک انٹرفیس کے ساتھ موازنہ کر سکتے ہیں، کیونکہ جاوا میں اسکیما یہ بھی بتاتا ہے کہ وہ کلاسز جو کسی دیئے گئے انٹرفیس کو پورا کرتی ہیں (یعنی ایک دیئے گئے انٹرفیس کو نافذ کرتی ہیں) کو کیسے لکھا جانا چاہیے۔ لہذا، ہم خفیہ معلومات سے لیس ہیں اور اپنی پہلی ویب ایپلیکیشن بنانے کے لیے تیار ہیں!
جاوا میں ویب ایپلیکیشن - 9

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

جدید جاوا ایپلیکیشن کے ساتھ خودکار پراجیکٹ بلڈ سسٹم استعمال کیے بغیر کام کرنے کا تصور کرنا مشکل ہے۔ سب سے زیادہ مقبول نظاموں میں سے کچھ Maven اور Gradle ہیں ۔ ہم اس جائزے کے لیے Gradle استعمال کریں گے۔ گریڈل کی تنصیب کو سرکاری ویب سائٹ پر بیان کیا گیا ہے ۔ ایک نئی ایپلیکیشن بنانے کے لیے، ہمیں گریڈل میں بنایا ہوا پلگ ان درکار ہے: " Build Init Plugin "۔ جاوا ایپلیکیشن بنانے کے لیے آپ کو درج ذیل کمانڈ کو چلانے کی ضرورت ہے۔ gradle init --type java-application
جاوا میں ویب ایپلیکیشن - 10
پروجیکٹ بنانے کے بعد، ہمیں build.gradle فائل میں ترمیم کرنے کی ضرورت ہوگی ۔ یہ نام نہاد Build Script ہے (مزید تفصیلات کے لیے Gradle دستاویزات دیکھیں: " Bild Scripts لکھنا ")۔ یہ فائل بیان کرتی ہے کہ جاوا پروجیکٹ کے ساتھ کام کرنے کے منصوبے اور دیگر پہلوؤں کو کیسے جمع کیا جائے۔ پلگ ان بلاک بیان کرتا ہے کہ موجودہ گریڈل پروجیکٹ کے لیے کون سے " گریڈل پلگ انز " کو استعمال کیا جانا چاہیے۔ پلگ انز ہمارے پروجیکٹ کی صلاحیتوں کو بڑھاتے ہیں۔ مثال کے طور پر، ڈیفالٹ پلگ ان " جاوا " ہے۔ اگر ہمیں جاوا سپورٹ کی ضرورت ہو تو یہ پلگ ان ہمیشہ استعمال ہوتا ہے۔ لیکن ہمیں " ایپلی کیشن " پلگ ان کی ضرورت نہیں ہے ، کیونکہ... اس کی تفصیل بتاتی ہے کہ یہ ایک "قابل عمل JVM ایپلی کیشن" بنانے کے لیے استعمال ہوتا ہے، یعنی JVM ایپلی کیشنز چلا رہے ہیں۔ ہمیں WAR آرکائیو کی شکل میں ایک ویب ایپلیکیشن بنانے کی ضرورت ہے۔ اور اگر ہم گریڈل دستاویزات میں لفظ WAR تلاش کرتے ہیں تو ہمیں " وار پلگ ان " ملے گا۔ لہذا، ہم مندرجہ ذیل پلگ ان کی وضاحت کریں گے:
plugins {
    id 'java'
    id 'war'
}
نیز " وار پلگ ان ڈیفالٹ سیٹنگز " میں یہ کہا گیا ہے کہ ویب ایپلیکیشن کے تمام مواد کے ساتھ ڈائریکٹری "src/main/webapp" ہونی چاہیے، وہی WEB-INF ڈائریکٹری ہونی چاہیے جس میں web.xml ہونا چاہیے۔ واقع آئیے ایسی فائل بناتے ہیں۔ ہم اسے تھوڑی دیر بعد بھریں گے، کیونکہ... ہمارے پاس ابھی تک اس کے لیے کافی معلومات نہیں ہیں۔ "انحصار" بلاک میں ہم اپنے پروجیکٹ کے انحصار کی نشاندہی کرتے ہیں، یعنی وہ لائبریریاں/فریم ورک جن کے بغیر ہماری درخواست کام نہیں کر سکتی۔ اس صورت میں، ہم ایک ویب ایپلیکیشن لکھ رہے ہیں، جس کا مطلب ہے کہ ہم Servlet API کے بغیر کام نہیں کر سکتے:
dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    testCompile 'junit:junit:4.12'
}
فراہم کردہ کمپائل کا مطلب ہے کہ انحصار کو ویب ایپلیکیشن کے ہمارے WAR آرکائیو میں شامل کرنے کی ضرورت نہیں ہے: اس کی ضرورت صرف تالیف کے لیے ہے۔ اور جب پھانسی دی جائے گی، یہ انحصار کسی اور (یعنی ویب سرور) کے ذریعے فراہم کیا جائے گا۔ ٹھیک ہے، ہم تعمیر اسکرپٹ میں معلومات چھوڑتے ہیں کہ ہم کس انحصاری ذخیرہ کو استعمال کرنا چاہتے ہیں - تمام مخصوص انحصار اس سے ڈاؤن لوڈ کیے جائیں گے:
repositories {
    jcenter()
}
ہم بلڈ اسکرپٹ فائل سے باقی سب کچھ ہٹا دیتے ہیں۔ اب کلاس src\main\java\App.java میں ترمیم کریں۔ آئیے اس سے ایک سرولیٹ بناتے ہیں۔ باب " CHAPTER 2. The Servlet انٹرفیس " میں Servlet API کی تفصیلات بتاتی ہیں کہ Servlet انٹرفیس میں HttpServlet کا بنیادی نفاذ ہے ، جو زیادہ تر معاملات میں کافی ہونا چاہیے اور ڈویلپرز کو صرف اس سے وراثت حاصل کرنے کی ضرورت ہے۔ اور باب " 2.1.1 HTTP مخصوص درخواست کو سنبھالنے کے طریقے " میں اہم طریقے بتائے گئے ہیں جو آنے والی درخواستوں پر کارروائی کرتے ہیں۔ اس طرح، آئیے App.java کلاس کو دوبارہ لکھتے ہیں:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;

public class App extends HttpServlet {
    public String getGreeting() {
        return "Hello world.";
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 		// https://www.oracle.com/technetwork/java/servlet-142430.html
 		PrintWriter out = resp.getWriter();
 		out.println(this.getGreeting());
 		out.close();
 	}
}
تو ایسا لگتا ہے کہ ہمارے پاس سب کچھ تیار ہے۔ جو باقی رہ جاتا ہے وہ ہے تعیناتی ڈسکرپٹر کو صحیح طریقے سے لکھنا۔ خاکہ سے، درج ذیل متن کو web.xml میں کاپی کریں:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="..."
      version="3.1">
      ...
</web-app>
اور اسکیما کا راستہ بھی جو اس میں اشارہ کیا گیا ہے: http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd اب آئیے اس کی ایک مثال دیکھتے ہیں کہ Servlet API تفصیلات میں web.xml کی طرح نظر آنا چاہئے۔ یہ مثال باب " 14.5.1 ایک بنیادی مثال " میں دی گئی ہے۔ آئیے تصریح میں دی گئی مثال کے ساتھ خاکہ میں جو اشارہ کیا گیا ہے اسے جوڑتے ہیں۔ ہم مندرجہ ذیل حاصل کرتے ہیں:
<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">
      <display-name>A Simple Web Application</display-name>
      <servlet>
		<servlet-name>app</servlet-name>
		<servlet-class>App</servlet-class>
	  </servlet>
	  <servlet-mapping>
		<servlet-name>app</servlet-name>
		<url-pattern>/app</url-pattern>
	  </servlet-mapping>
</web-app>
جیسا کہ آپ دیکھ سکتے ہیں، ہم نے اسکیما اور اسکیما لوکیشن کا استعمال کیا جو پہلے بیان کیے گئے تھے۔ اور خود عناصر کی تفصیل باب 14.5.1 کی مثال سے لی گئی ہے۔ اگر ہم نے سب کچھ صحیح طریقے سے کیا تو ہم گریڈل وار کے کام کو بغیر کسی غلطی کے انجام دیں گے:
جاوا میں ویب ایپلیکیشن - 11
جاوا میں ویب ایپلیکیشن - 12

ایک ویب ایپلیکیشن لانچ کرنا

ویب ایپلیکیشن کیسے شروع ہوتی ہے؟ آئیے پہلے زیادہ پیچیدہ آپشن سے نمٹتے ہیں۔ ہم نے پہلے کہا تھا کہ ایک Apache Tomcat ویب سرور ہے جو Servlet API کو سپورٹ کرتا ہے۔ اس کا مطلب یہ ہے کہ ہم اپنے جمع کردہ جنگی آرکائیو (وہ "تعینات" بھی کہتے ہیں) اس سرور پر تعینات کر سکتے ہیں۔ " ڈاؤن لوڈ ٹامکیٹ " صفحہ پر، "بائنری ڈسٹری بیوشنز" سیکشن سے زپ فارمیٹ میں "کور" ڈیلیوری کی قسم ڈاؤن لوڈ کریں۔ اور ڈاؤن لوڈ کردہ آرکائیو کو کسی ڈائرکٹری میں کھولیں، مثال کے طور پر C:\apache-tomcat-9.0.14 میں۔ سرور شروع کرنے سے پہلے، آئیے ترمیم کے لیے فائل کو کھولیں conf\tomcat-users.xmlاور اس میں درج ذیل لائن شامل کریں: <user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/> اب، کمانڈ لائن پر، bin ڈائریکٹری پر جائیں اور execute catalina.bat start۔ پہلے سے طے شدہ طور پر، سرور کنسول پر دستیاب ہوگا http://localhost:8080/manager۔ لاگ ان اور پاس ورڈ وہی ہیں جو ہم نے tomcat-users.xml میں بتائے ہیں۔ Tomcat کے پاس "webapps" ڈائریکٹری ہے، جس میں ویب ایپلیکیشنز شامل ہیں۔ اگر ہم خود کو تعینات کرنا چاہتے ہیں تو ہمیں اپنے جنگی ذخیرہ کو وہاں کاپی کرنا ہوگا۔ جب ہم پہلے گریڈل وار کمانڈ چلاتے تھے، تو \build\libs\ڈائرکٹری میں ایک جنگی آرکائیو بنایا گیا تھا۔ یہ وہی ہے جو ہمیں کاپی کرنے کی ضرورت ہے. کاپی کرنے کے بعد، صفحہ کو ریفریش کریں http://localhost:8080/managerاور دیکھیں:
جاوا میں ویب ایپلیکیشن - 13
مکمل کرنے کے بعد http://localhost:8080/javaweb/app، ہم اپنے سرولیٹ کی طرف رجوع کریں گے، کیونکہ ہم نے پہلے ایپ سرولیٹ کو /app کی درخواست کو "میپ کیا" (یعنی میپ کیا)۔ یہ چیک کرنے کا ایک تیز طریقہ ہے کہ درخواست کیسے کام کرتی ہے۔ اور اسمبلی کا نظام دوبارہ اس میں ہماری مدد کرتا ہے۔ ہمارے گریڈل پروجیکٹ کے اسکرپٹ میں، ہم پلگ ان سیکشن میں ایک نیا پلگ ان " گریٹیid "org.gretty" version "2.3.1" " شامل کر سکتے ہیں: اور اب ہم اپنی ایپلیکیشن کو چلانے کے لیے گریڈل ٹاسک انجام دے سکتے ہیں:gradle appRun
جاوا میں ویب ایپلیکیشن - 14
تفصیلات کے لیے " گریٹی پلگ ان شامل کریں اور ایپ چلائیں " دیکھیں۔
جاوا میں ویب ایپلیکیشن - 15

بہار اور سرولیٹ API

سرولیٹس ہر چیز کی بنیاد ہیں۔ اور یہاں تک کہ اب مقبول اسپرنگ فریم ورک بھی سرولیٹ API میں اضافے کے علاوہ کچھ نہیں ہے۔ شروع کرنے کے لیے، بہار کا فریم ورک ہمارے پروجیکٹ کے لیے ایک نیا انحصار ہے۔ لہذا، آئیے اسے انحصار بلاک میں تعمیر اسکرپٹ میں شامل کریں: compile 'org.springframework:spring-webmvc:5.1.3.RELEASE' اسپرنگ فریم ورک دستاویزات میں ایک باب ہے " 1.1. DispatcherServlet "۔ اس کا کہنا ہے کہ اسپرنگ فریم ورک "فرنٹ کنٹرولر" پیٹرن پر بنایا گیا ہے - ایسا اس وقت ہوتا ہے جب ایک مرکزی سرولیٹ ہوتا ہے جسے " DispatcherServlet " کہتے ہیں۔ تمام درخواستیں اس سرولیٹ پر آتی ہیں، اور یہ کالز کو ضروری اجزاء کے حوالے کرتا ہے۔ آپ نے دیکھا، یہاں تک کہ سرولیٹس ہیں۔ آپ کو تعیناتی کی وضاحت کرنے والے میں ایک سامع شامل کرنے کی ضرورت ہے:
<listener>
	&ltlistener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
یہ ایک سرولیٹ سیاق و سباق کا واقعہ سننے والا ہے۔ یعنی جب سرولیٹ سیاق و سباق شروع ہوتا ہے تو بہار کا سیاق و سباق (WebApplicationContext) بھی شروع ہوتا ہے۔ سرولیٹ سیاق و سباق کیا ہے؟ اس کی وضاحت باب " CHAPTER 4. Servlet سیاق و سباق " میں Servle API تفصیلات میں کی گئی ہے۔ سرولیٹ سیاق و سباق ویب ایپلیکیشن کا ایک سرولیٹ کا "نظر" ہے جس کے اندر سرولیٹ چل رہے ہیں۔ ہر ویب ایپلیکیشن کا اپنا سرولیٹ سیاق و سباق ہوتا ہے۔ اس کے بعد، اسپرنگ فریم ورک کو فعال کرنے کے لیے، آپ کو context-param - servlet سیاق و سباق کے لیے ابتدائیہ پیرامیٹر کی وضاحت کرنے کی ضرورت ہے۔
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
اور DispatcherServlet تعریف کنفیگریشن کو مکمل کرتی ہے :
<servlet>
	<servlet-name>app</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
 		<param-value></param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>app</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
اور اب ہمیں صرف contextConfigLocation میں مخصوص فائل کو پُر کرنے کی ضرورت ہے۔ یہ کیسے کرنا ہے اس کی وضاحت اسپرنگ فریم ورک دستاویزات میں باب "1.3.1. اعلامیہ" میں کی گئی ہے:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="ru.javarush.javaweb"/>
    <mvc:annotation-driven/>
</beans>
یہاں نہ صرف یہ بتانا ضروری ہے کہ کون سا پیکج اسکین کرنا ہے، بلکہ یہ بھی کہ ہم تشریح پر مبنی چاہتے ہیں، یعنی اسپرنگ کیسے کام کرے گا اس پر تشریحات کو کنٹرول کرنا ہے۔ جو کچھ باقی ہے وہ ہے ru.javarush.javaweb پیکیج بنانا اور اس میں Spring کنٹرولر کلاس رکھنا:
package ru.javarush.javaweb;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SpringController {

    @GetMapping("/app")
    @ResponseBody
    public String getGreeting() {
        return "Hello world.";
    }
}
اب gradle appRun چلائیں اور ایڈریس پر جائیں تو http://127.0.0.1:8080/javaweb/appہمیں وہی Hello World ملے گا۔ جیسا کہ آپ دیکھ سکتے ہیں، Spring Framework Servlet API کے ساتھ بہت قریب سے جڑا ہوا ہے اور اسے اس کے اوپر کام کرنے کے لیے استعمال کرتا ہے۔
جاوا میں ویب ایپلیکیشن - 16

تشریحات

جیسا کہ ہم نے دیکھا ہے، تشریحات آسان ہیں۔ اور ہم صرف وہی نہیں تھے جنہوں نے ایسا سوچا۔ لہٰذا، Servlet API تفصیلات میں، ورژن 3.0 سے شروع ہو کر، باب " باب 8 تشریحات اور پلگ ایبلٹی " ظاہر ہوا، جو اس بات کی وضاحت کرتا ہے کہ سرولیٹ کنٹینرز کو تشریحات کے ذریعے اس بات کی وضاحت کرنے کی اہلیت کی حمایت کرنی چاہیے جو پہلے تعیناتی ڈسکرپٹر میں بیان کی گئی تھی۔ اس طرح، web.xml کو پروجیکٹ سے مکمل طور پر ہٹایا جا سکتا ہے، اور servlet کلاس کے اوپر آپ @WebServlet تشریح کی وضاحت کر سکتے ہیں اور بتا سکتے ہیں کہ servlet کو کس راستے کا نقشہ بنانا ہے۔ یہاں سب کچھ واضح نظر آتا ہے۔ لیکن کیا ہوگا اگر ہم نے اسپرنگ کو پروجیکٹ سے جوڑ دیا، جس کے لیے زیادہ پیچیدہ سیٹنگز کی ضرورت ہے؟ یہاں سب کچھ تھوڑا زیادہ پیچیدہ ہے. سب سے پہلے، بہار کی دستاویزات کہتی ہیں کہ web.xml کے بغیر Spring کو ترتیب دینے کے لیے، آپ کو اپنی کلاس استعمال کرنے کی ضرورت ہے جو WebApplicationInitializer کو نافذ کرے گی۔ مزید تفصیلات کے لیے، باب " 1.1. DispatcherServlet " دیکھیں۔ معلوم ہوا کہ یہ بہار کی کلاس ہے۔ پھر یہاں Servlet API کا استعمال کیسے ہوتا ہے؟ درحقیقت، ServletContainerInitializer کو Servlet API 3.0 میں شامل کیا گیا تھا ۔ جاوا میں ایک خاص طریقہ کار کا استعمال کرتے ہوئے (جسے SPI کہا جاتا ہے )، Spring اس کے سرولیٹ کنٹینر انیشیلائزر کی وضاحت کرتا ہے جسے SpringServletContainerInitializer. بدلے میں، یہ پہلے سے ہی WebApplicationInitializer کے نفاذ کو تلاش کرتا ہے اور ضروری طریقوں کو کال کرتا ہے اور ضروری ترتیبات کو انجام دیتا ہے۔ مزید تفصیلات کے لیے " سرولیٹ کنٹینر WebApplicationInitializer کے نفاذ کو کیسے تلاش کرتا ہے " دیکھیں۔ مندرجہ بالا ترتیبات اس طرح کی جا سکتی ہیں:
package ru.javarush.javaweb.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class AppInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        // регистрируем конфигурацию созданую высше
        ctx.register(AppConfig.class);
        // добавляем в контекст слушателя с нашей конфигурацией
        servletContext.addListener(new ContextLoaderListener(ctx));

        ctx.setServletContext(servletContext);

        // настраиваем маппинг Dispatcher Servlet-а
        ServletRegistration.Dynamic servlet =
                servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
    }
}
اب، " جاوا بیسڈ کنفیگریشن " کا استعمال کرتے ہوئے ہم اشارہ کریں گے کہ کون سا پیکیج اسکین کرنا ہے + تشریحات کو فعال کرنا ہے:
package ru.javarush.javaweb.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "ru.javarush.javaweb.controllers")
public class AppConfig {
}
اور SpringController کو خود ہی میں منتقل کر دیا گیا تھا ru.javarush.javaweb.controllers، تاکہ اسکیننگ کرتے وقت، کنفیگریشن خود کو تلاش نہیں کرے گی، لیکن صرف کنٹرولرز کی تلاش کرے گی۔
جاوا میں ویب ایپلیکیشن - 17

خلاصہ کرنا

مجھے امید ہے کہ اس جائزہ نے اس پر کچھ روشنی ڈالی ہے کہ جاوا میں ویب ایپلیکیشنز کیسے کام کرتی ہیں۔ یہ آئس برگ کا صرف ایک سرہ ہے، لیکن بنیادی باتوں کو سمجھے بغیر، یہ سمجھنا مشکل ہے کہ اس بنیاد پر مبنی ٹیکنالوجیز کیسے کام کرتی ہیں۔ Servlet API کسی بھی جاوا ویب ایپلیکیشن کا مرکزی حصہ ہے، اور ہم نے دیکھا ہے کہ دوسرے فریم ورک اس میں کیسے فٹ ہوتے ہیں۔ جاری رکھنے کے لیے، آپ درج ذیل مواد دیکھ سکتے ہیں: #ویاچسلاو
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION