- نیٹ ورک کے بارے میں
- سافٹ ویئر فن تعمیر کے بارے میں
- HTTP/HTTPS پروٹوکول کے بارے میں ؛
- Maven کی بنیادی باتوں کے بارے میں
سرولیٹ کیا ہے؟
سب سے پہلے، آئیے معلوم کریں کہ سرولیٹ کیا ہے اور آپ اس کے بارے میں اکثر کیوں سنتے ہیں۔ Java Servlet API ایک معیاری API ہے جسے سرور پر لاگو کرنے اور کلائنٹ کے ساتھ درخواست کے جواب کی اسکیم کا استعمال کرتے ہوئے کام کرنے کے لیے ڈیزائن کیا گیا ہے۔ سرولیٹ ایک کلاس ہے جو کلائنٹ سے درخواستیں وصول کرسکتی ہے اور اس پر جوابات واپس کرسکتی ہے۔ جی ہاں، جاوا میں servlets بالکل وہی عناصر ہیں جن کے ساتھ کلائنٹ-سرور کا فن تعمیر بنایا گیا ہے۔ اگر آپ کو یاد ہے تو، ہم نے پہلے ہی سیریز کے مضامین میں سے ایک میں اس کے بارے میں بات کی ہے۔ آئیے جھاڑی کے آس پاس نہ ماریں: آئیے فوراً کچھ کوڈ لکھیں۔ویب ایپلیکیشن بنانے کے لیے آپ کو کیا ضرورت ہے۔
جاوا میں servlets کے ساتھ آرام سے کام کرنے کے لیے، آپ کو Intellij IDEA Ultimate Edition کی ضرورت ہوگی۔ یہ ادا کیا جاتا ہے، لیکن آپ 30 دن کی آزمائشی مدت کو چالو کرسکتے ہیں یا ابتدائی رسائی ورژن استعمال کرسکتے ہیں - یہ ہمیشہ مفت ہے۔ ہمارا ایپلیکیشن سرور بھی انسٹال کریں - Apache Tomcat۔ Tomcat ایک سرولیٹ کنٹینر ہے: یہ وہی ہے جو باہر سے آنے والی درخواستوں پر کارروائی کرتا ہے اور انہیں ہماری درخواست تک پہنچاتا ہے۔ آپ اس لنک سے Tomcat ڈاؤن لوڈ کر سکتے ہیں ۔پہلی ویب ایپلیکیشن بنانا
اگر سب کچھ تیار ہے تو آئیے ایک Maven پروجیکٹ بنائیں۔ اگر آپ Maven سے واقف نہیں ہیں تو پچھلے مضمون پر توجہ دیں ۔ آئیے شروع کریں!-
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(); } }
-
ایپلی کیشن کو چلانے کے لیے آپ کو ٹومکیٹ کنفیگریشن بنانے کی ضرورت ہے:
-
اگلا، ہم اشارہ کرتے ہیں کہ ہم Tomcat کا کون سا ورژن استعمال کریں گے، وہ URL جس کے ذریعے ہم سرور تک رسائی حاصل کر سکتے ہیں، اور پورٹ۔ آپ کو کچھ اس طرح ملنا چاہئے:
-
جو کچھ باقی ہے وہ آرٹفیکٹ (ایک جار آرکائیو میں جمع شدہ پروجیکٹ) کی وضاحت کرنا ہے، جسے کنٹینر میں تعینات کیا جائے گا۔ آپ فکس بٹن پر کلک کر سکتے ہیں اور وار ایکسپوڈڈ کو منتخب کر سکتے ہیں: اس کا مطلب یہ ہے کہ پراجیکٹ کو دوبارہ بنانے کے بعد، آرٹفیکٹ خود بخود سرولیٹ کنٹینر میں رکھ دیا جائے گا۔
-
ایپلیکیشن کا سیاق و سباق پہلے سے طے شدہ طور پر servlets_war_exploded پر سیٹ کیا گیا ہے ، جس کا مطلب ہے کہ ایپلیکیشن تک رسائی اس پر ہونی چاہیے: http://localhost:8080/servlets_war_exploded ۔
ہمیں اضافی متن کی ضرورت کیوں ہے؟ آئیے غیر ضروری چیزوں کو ہٹا دیں۔ اب ہماری درخواست کا پتہ یہ ہے: http://localhost:8080 ۔
-
ٹھیک ہے پر کلک کریں۔ ہم دیکھتے ہیں کہ اب ہمارے پاس ایپلیکیشن لانچ کرنے کا موقع ہے:
اب، جب آپ ایپلیکیشن لانچ کرتے ہیں، تو براؤزر کو کھلنا چاہیے اور 404 ایرر دکھانا چاہیے۔ یہ منطقی ہے، کیونکہ ایڈریس http://localhost:8080/ پر "/" میپنگ کے ساتھ ایک سرولیٹ ہونا چاہیے، اور ہمارے واحد سرولیٹ میں "/hello" میپنگ ہے ۔
-
ہم اس سے http://localhost:8080/hello پر رابطہ کرتے ہیں اور متوقع جواب حاصل کرتے ہیں - سٹرنگ "Hello"!
پیرامیٹرز اور سیشن کے ساتھ کام کرنا
آئیے اپنے سرولیٹ کو بہتر بنائیں تاکہ یہ درخواست کے پیرامیٹرز پر کارروائی کر سکے اور سیشن کے ساتھ کام کر سکے۔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");
}
}
GO TO FULL VERSION