- نیٹ ورکنگ کے بارے میں
- سافٹ ویئر فن تعمیر کے بارے میں
- HTTP/HTTPS کے بارے میں
- Maven کی بنیادی باتوں کے بارے میں

سرولیٹ کیا ہے؟
پہلے، آئیے یہ معلوم کریں کہ سرولیٹس کیا ہیں اور آپ ان کے بارے میں اتنی کثرت سے کیوں سنتے ہیں۔ Java Servlet API ایک معیاری API ہے جس کا مقصد سرور پر لاگو کیا جانا ہے۔ یہ کلائنٹس کے ساتھ درخواست کے جواب کی اسکیم کے مطابق تعامل کرتا ہے۔ سرولیٹ ایک کلاس ہے جو کلائنٹ سے درخواستیں وصول کرسکتی ہے اور کلائنٹ کو جوابات واپس کرسکتی ہے ۔ درحقیقت، servlets بالکل وہی بلڈنگ بلاکس ہیں جو ہم جاوا میں کلائنٹ-سرور آرکیٹیکچر بنانے کے لیے استعمال کرتے ہیں۔ آپ کو یاد ہوگا کہ ہم پہلے ہی اس فن تعمیر کے بارے میں سیریز کے ایک اور مضمون میں بات کر چکے ہیں۔ ہم جھاڑی کے ارد گرد ہرا نہیں جا رہے ہیں: آئیے ابھی کچھ کوڈ لکھیں۔ویب ایپلیکیشن بنانے کے لیے آپ کو کیا ضرورت ہے۔
جاوا سرولیٹس کے ساتھ کام کرتے وقت سب سے زیادہ سہولت کے لیے، آپ کو IntelliJ IDEA الٹیمیٹ ایڈیشن کی ضرورت ہے۔ یہ ایک بامعاوضہ پروڈکٹ ہے، لیکن آپ 30 دن کی آزمائش کو چالو کر سکتے ہیں یا ابتدائی رسائی والا ورژن استعمال کر سکتے ہیں، جو ہمیشہ مفت ہوتا ہے۔ نیز، اپاچی ٹامکیٹ انسٹال کریں — ہماری ایپلیکیشن کا سرور۔ Tomcat ایک سرولیٹ کنٹینر ہے: یہ آنے والی درخواستوں پر کارروائی کرتا ہے اور انہیں ہماری درخواست تک پہنچاتا ہے۔ Tomcat یہاں سے ڈاؤن لوڈ کریں ۔آئیے اپنی پہلی ویب ایپلیکیشن بنائیں
اگر سب کچھ تیار ہے تو، Maven پروجیکٹ بنائیں۔ اگر آپ Maven سے واقف نہیں ہیں تو پچھلے مضمون پر ایک نظر ڈالیں ۔ چلو شروع کریں!-
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(); } }
-
ایپلیکیشن چلانے کے لیے، آپ کو ٹامکیٹ کنفیگریشن بنانے کی ضرورت ہے:
-
اگلا، ہم اشارہ کرتے ہیں کہ ہم Tomcat کا کون سا ورژن استعمال کریں گے، اور سرور کے ساتھ بات چیت کے لیے URL اور پورٹ۔ آپ کے پاس کچھ اس طرح ہونا چاہئے:
-
اب ہمیں صرف نمونے کی وضاحت کرنے کی ضرورت ہے (ایک JAR آرکائیو میں جمع شدہ پروجیکٹ) جو کنٹینر میں تعینات کیا جائے گا۔ آپ فکس بٹن پر کلک کر سکتے ہیں اور وار ایکسپوڈڈ کو منتخب کر سکتے ہیں: اس کا مطلب یہ ہے کہ پروجیکٹ کو دوبارہ بنانے کے بعد، آرٹفیکٹ خود بخود سرولیٹ کنٹینر میں رکھ دیا جائے گا۔
-
ایپلیکیشن سیاق و سباق کے لیے ڈیفالٹ ویلیو ہے servlets_war_exploded ۔ اس کا مطلب یہ ہے کہ ہم اس ایپلی کیشن تک رسائی حاصل کرتے ہیں: http://localhost:8080/servlets_war_exploded ۔
ہم کوئی اضافی متن کیوں چاہیں گے؟ جو غیر ضروری ہے اسے ڈیلیٹ کر دیں۔ اب ہماری ویب ایپلیکیشن کا پتہ ہے: http://localhost:8080 ۔
-
ٹھیک ہے پر کلک کریں۔ ہم دیکھتے ہیں کہ اب ہم ایپلیکیشن لانچ کر سکتے ہیں:
اب جب آپ اپنے براؤزر میں ایپلیکیشن کھولتے ہیں تو آپ کو 404 ایرر ملنا چاہیے۔ یہ سمجھ میں آتا ہے، کیونکہ ایڈریس http://localhost:8080/ کو ایک سرولیٹ کی ضرورت ہوتی ہے جو "/" پر نقشہ بناتا ہے، لیکن ہمارا واحد سرولیٹ نقشہ "/hello" پر ہوتا ہے ۔
-
ہم اسے http://localhost:8080/hello پر حاصل کر سکتے ہیں ۔ ایک بار جب ہم ایسا کر لیتے ہیں، تو ہمیں متوقع جواب ملتا ہے — تار "ہیلو"!
@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();
}
}
اب servlet ایک سیشن کے ساتھ کام کرتا ہے، visitCounter
ہر بار صفحہ وزٹ کرنے کی قدر میں اضافہ کرتا ہے۔ اگر visitCounter
انتساب ابھی تک نہیں بنایا گیا ہے (صفحہ کے پہلے وزٹ پر)، طریقہ getAttribute()
null لوٹاتا ہے، لہذا ہمیں null کی جانچ کرنی ہوگی۔ درخواست کے پیرامیٹرز کے لئے بھی یہی ہے۔ اگر صارف صارف نام کے پیرامیٹر کو پاس نہیں کرتا ہے، تو اس کی قیمت کالعدم ہو جائے گی۔ اس صورت میں، ہم صارف کو ایک گمنام وزیٹر کے طور پر خوش آمدید کہتے ہیں۔ جی ای ٹی درخواست میں پیرامیٹر کو پاس کرنے کے لیے، استفسار کی تار استعمال کی جاتی ہے، مثال کے طور پر، ہم درج ذیل یو آر ایل استعمال کر سکتے ہیں: http:// localhost:8080/hello؟
صارف نام = پال۔ آپ سیریز کے پچھلے مضمون میں HTTP درخواستوں کے بارے میں مزید پڑھ سکتے ہیں۔
ہماری ایپلی کیشن میں فی الحال زیادہ منطق نہیں ہے، لیکن یہ قدرے پریشان کن ہے کہ ہمیں روٹ پاتھ میں 404 کی خرابی ملتی ہے۔ اس کو ٹھیک کرنے کے لیے، ہم ایک اور سرولیٹ بنائیں گے اور اسے ابتدائی صفحہ پر نقشہ بنائیں گے: @WebServlet("/")
۔ اس سرولیٹ کا مقصد درخواستوں کو "/ہیلو" راستے پر بھیجنا ہے۔ ایسا کرنے کے دو طریقے ہیں: "فارورڈ" یا "ری ڈائریکٹ" کا استعمال۔ شاید ان کے درمیان فرق کو سمجھنا فائدہ مند ہے۔ ایک فارورڈ ڈیلیگیٹس درخواست کی پروسیسنگ سرور پر موجود دوسرے سرولیٹ کو کرتا ہے۔ کلائنٹ ملوث نہیں ہے. ایسا کرنے کے لیے، نئے 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");
}
}
GO TO FULL VERSION