JavaRush /جاوا بلاگ /Random-UR /servlets اور jsp کا استعمال کرتے ہوئے ایک سادہ ویب ایپلیک...
fatfaggy
سطح
Киев

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

گروپ میں شائع ہوا۔
میں servlets، jsp، Maven اور Tomcat کا استعمال کرتے ہوئے ویب ایپلیکیشن بنانے کے عمل کو بیان کرتا رہتا ہوں۔ مضمون کا آغاز ، اگر ضروری ہو تو۔
ہم ادارے بناتے ہیں۔
آئیے entities پیکیج میں یوزر کلاس بنائیں، جس میں ہم دو پرائیویٹ سٹرنگ ویری ایبلز کا نام اور پاس ورڈ بنائیں گے۔ آئیے کنسٹرکٹرز بنائیں (پہلے سے طے شدہ اور ایک جو دونوں اقدار کو قبول کرے)، گیٹرز/سیٹرز، صرف صورت میں toString() طریقہ کو اوور رائڈ کریں، نیز equals() اور hashCode() طریقے۔ public class User { private String name; private String password; public User() { } public User(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", password='" + password + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (name != null ? !name.equals(user.name) : user.name != null) return false; return password != null ? password.equals(user.password) : user.password == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (password != null ? password.hashCode() : 0); return result; } } اب ہم صارفین کی فہرست بنانا شروع کر سکتے ہیں، جہاں ہم اپنے صارفین کو شامل کریں گے، اور جہاں سے ہم انہیں ڈسپلے کے لیے لے جائیں گے۔ لیکن ایک مسئلہ ہے۔ ہم اپنی سرولیٹ اشیاء نہیں بناتے؛ ٹامکیٹ انہیں ہمارے لیے تخلیق کرتا ہے۔ وہ طریقے جو ہم ان میں اوور رائڈ کرتے ہیں وہ بھی ہمارے لیے پہلے سے طے شدہ ہیں اور ہم پیرامیٹر شامل نہیں کر سکتے۔ پھر ہم ایک مشترکہ فہرست کیسے بنا سکتے ہیں جو ہمارے دونوں سرولیٹس میں نظر آئے گی؟ اگر ہم صرف ہر ایک سرولیٹ میں اپنا لسٹ آبجیکٹ بناتے ہیں، تو یہ پتہ چلے گا کہ ہم صارفین کو ایک فہرست میں شامل کریں گے، لیکن ListServlet servlet استعمال کرنے والے صارفین کی فہرست کو ظاہر کرنا بالکل مختلف ہوگا۔ یہ پتہ چلتا ہے کہ ہمیں ایک ایسی چیز کی ضرورت ہے جو دونوں سرولیٹس کے لیے مشترک ہو۔ عام طور پر، ہمیں ایک ایسی چیز کی ضرورت ہے جو ہمارے پروگرام میں تمام کلاسوں کے لیے عام ہو۔ پورے پروگرام کے لیے واحد اعتراض۔ مجھے امید ہے کہ آپ نے ڈیزائن کے نمونوں کے بارے میں کچھ سنا ہوگا۔ اور شاید کچھ لوگوں کے لیے سنگلٹن ٹیمپلیٹ کو اپنے پروگرام میں استعمال کرنے کی یہ پہلی حقیقی ضرورت ہے ۔ آپ تخلیقی ہو سکتے ہیں اور ڈبل چیکس اور سنکرونائزیشن کے ساتھ کچھ ٹھنڈا سنگلٹن بنا سکتے ہیں (ہاں، ہمارے پاس ایک ملٹی تھریڈ ایپلی کیشن ہے، چونکہ ٹامکیٹ مختلف تھریڈز میں سرولیٹ چلاتا ہے)، لیکن میں آپشن کو جلد شروع کرنے کے ساتھ استعمال کروں گا، کیونکہ اس معاملے میں یہ کافی مناسب.
ایک ماڈل بنانا۔
پھر ہم ماڈل پیکیج میں ایک کلاس بنائیں گے (اور اس میں سنگلٹن ٹیمپلیٹ کو نافذ کریں گے)، اور ہم اسے کافی رنگین ماڈل بھی کہیں گے۔ آئیے اس میں ایک پرائیویٹ یوزر لسٹ آبجیکٹ بنائیں، اور دو طریقے بنائیں: ایک تاکہ آپ صارف کو شامل کر سکیں، اور دوسرا - اسے صرف سٹرنگز (صارف کے نام) کی فہرست واپس کرنے دیں۔ چونکہ ہمارا صارف آبجیکٹ ایک نام اور پاس ورڈ پر مشتمل ہے، اس لیے ہم صارف کے پاس ورڈز کو "ظاہر" نہیں کرنا چاہیں گے، اس لیے ہم صرف ان کے ناموں کی فہرست واپس کریں گے۔ public class Model { private static Model instance = new Model(); private List model; public static Model getInstance() { return instance; } private Model() { model = new ArrayList<>(); } public void add(User user) { model.add(user); } public List list() { return model.stream() .map(User::getName) .collect(Collectors.toList()); } }
ایم وی سی کے بارے میں تھوڑا سا۔
چونکہ آپ نے سنگلٹن کے بارے میں سنا ہے، اس کا مطلب ہے کہ آپ نے شاید کسی اور ڈیزائن پیٹرن کے بارے میں سنا ہے - MVC (ماڈل-ویو-کنٹرولر، یا روسی ماڈل-ویو-کنٹرولر، یا بالکل انگریزی ماڈل-ویو-کنٹرولر کی طرح)۔ اس کا جوہر کاروباری منطق کو پریزنٹیشن سے الگ کرنا ہے۔ یعنی، اس کوڈ کو الگ کریں جو اس بات کا تعین کرتا ہے کہ کوڈ سے کیا کرنا ہے جو اس بات کا تعین کرتا ہے کہ کس طرح ڈسپلے کرنا ہے ۔ منظر (دیکھنا یا صرف ملاحظات) اس فارم کے لیے ذمہ دار ہے جس میں کچھ ڈیٹا پیش کیا جاتا ہے۔ ہمارے معاملے میں، آراء ہمارے JSP صفحات ہیں۔ اسی لیے میں نے انہیں ویوز نامی فولڈر میں ڈال دیا۔ ماڈل اصل ڈیٹا ہے جس کے ساتھ پروگرام کام کرتا ہے۔ ہمارے معاملے میں، یہ صارفین ہیں (صارفین کی فہرست)۔ ٹھیک ہے، کنٹرولرز ان کے درمیان منسلک لنک ہیں. وہ ماڈل سے ڈیٹا لیتے ہیں اور اسے ویوز میں منتقل کرتے ہیں، یا وہ Tomcat سے کچھ ڈیٹا وصول کرتے ہیں، اس پر کارروائی کرتے ہیں اور اسے ماڈل میں منتقل کرتے ہیں۔ کاروباری منطق (یعنی کیا کرنا ہے ) کو ان میں بیان کیا جانا چاہیے، نہ کہ ماڈل یا منظر میں۔ اس طرح، ہر کوئی اپنا کام کرتا ہے:
  • ماڈل ڈیٹا ذخیرہ کرتا ہے۔
  • نظارے ڈیٹا کی خوبصورت نمائندگی کرتے ہیں۔
  • کنٹرولرز ڈیٹا پر کارروائی کرتے ہیں۔
یہ ان سب کو کافی آسان اور برقرار رکھنے کی اجازت دیتا ہے۔ اور ایک کلاس میں تمام کوڈ کا ایک شیطانی ڈمپ نہیں۔ MVC نہ صرف ویب پروگرامنگ کے لیے موزوں ہے، لیکن اس علاقے میں یہ اب بھی بہت عام ہے (اگر ہمیشہ نہیں)۔ ہمارے معاملے میں، سرولیٹس کنٹرولرز کے طور پر کام کریں گے۔ جی ہاں، یہ اس پیٹرن کی انتہائی سطحی اور یہاں تک کہ کھردری تفصیل ہے، لیکن یہ مضمون ڈیزائن پیٹرن کے بارے میں نہیں ہے، بلکہ ایک سادہ ویب ایپلیکیشن بنانے کے بارے میں ہے :) کون مزید جاننا چاہتا ہے - گوگل سب کچھ جانتا ہے ! :) آئیے اپنے خیالات کی طرف لوٹتے ہیں۔
صارف کو شامل کرنے کے لیے ایک فارم بنائیں۔
آئیے add.jsp فائل میں ایک فارم شامل کریں، جس میں دو ٹیکسٹ ان پٹ (ایک ریگولر، دوسرا پاس ورڈ کی قسم) اور سرور کو ڈیٹا بھیجنے کے لیے ایک بٹن شامل ہے۔ یہاں فارم میں ویلیو پوسٹ کے ساتھ میتھڈ انتساب ہے۔ اس کا مطلب ہے کہ اس فارم سے ڈیٹا سرور کو POST درخواست کی صورت میں بھیجا جائے گا۔ کارروائی کا وصف متعین نہیں ہے، جس کا مطلب ہے کہ یہ درخواست اسی پتے پر جائے گی جہاں ہم اس صفحہ پر گئے تھے (/add)۔ اس طرح، ہمارا سرولیٹ، جو اس ایڈریس کا پابند ہے، GET کی درخواست موصول ہونے پر، اس jsp کو صارفین کو شامل کرنے کے فارم کے ساتھ واپس کرتا ہے، اور اگر اسے POST کی درخواست موصول ہوتی ہے، تو اس فارم نے اپنا ڈیٹا وہاں بھیج دیا ہے (جس سے ہم دوبارہ حاصل کریں گے۔ doPost() طریقہ میں درخواست آبجیکٹ، اس پر کارروائی کریں اور اسے بچانے کے لیے ماڈل میں منتقل کریں)۔ یہ بات قابل غور ہے کہ ان پٹس کا یہاں نام کا پیرامیٹر ہوتا ہے (نام والی فیلڈ کے لیے اس کا ویلیو نام ہوتا ہے، اور پاس ورڈ والی فیلڈ کے لیے ویلیو پاس ہوتا ہے)۔ یہ ایک بہت اہم نکتہ ہے۔ چونکہ درخواست سے یہ ڈیٹا (نام اور پاس ورڈ جو درج کیا جائے گا) حاصل کرنے کے لیے (پہلے سے ہی سرولیٹ کے اندر)، ہم بالکل ان نام اور پاس کا استعمال کریں گے۔ لیکن اس پر مزید بعد میں۔ ڈیٹا بھیجنے کا بٹن پھر بٹن کی شکل میں بنایا جاتا ہے، نہ کہ ان پٹ، جیسا کہ عام طور پر رواج ہے۔ میں نہیں جانتا کہ یہ آپشن کتنا عالمگیر ہے، لیکن یہ میرے لیے کروم میں کام کرتا ہے :)
سرولیٹ کے ساتھ POST کی درخواست پر کارروائی کرنا۔
آئیے AddServlet servlet پر واپس آتے ہیں۔ ہم پہلے ہی جانتے ہیں کہ ہمارے سرولیٹ کو GET کی درخواستوں کو "پکڑنے" کے قابل بنانے کے لیے، ہم نے HttpServlet کلاس سے doGet() طریقہ کو اوور رائیڈ کر دیا ہے۔ اپنے سرولیٹ کو POST کی درخواستیں بھی پکڑنا سکھانے کے لیے، ہم doPost() طریقہ کو بھی اوور رائیڈ کرتے ہیں۔ اسے Tomcat سے اسی طرح کی درخواست اور جوابی اشیاء موصول ہوتی ہیں، جن کے ساتھ ہم کام کریں گے۔ سب سے پہلے، آئیے درخواست سے نام اور پاس کے پیرامیٹرز کو نکالیں جو فارم نے بھیجا ہے (اگر آپ نے فارم میں ان کا نام مختلف رکھا ہے، تو یہ وہ نام ہیں جو آپ لکھتے ہیں)۔ پھر ہم موصولہ ڈیٹا کا استعمال کرتے ہوئے اپنا صارف آبجیکٹ بنائیں گے۔ پھر ہم ماڈل آبجیکٹ حاصل کریں گے اور تخلیق شدہ صارف کو ماڈل میں شامل کریں گے۔ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("pass"); User user = new User(name, password); Model model = Model.getInstance(); model.add(user); }
ڈیٹا کو منظر میں منتقل کرنا۔
اب آئیے ListServlet servlet کی طرف چلتے ہیں۔ ہم نے پہلے ہی doGet() طریقہ نافذ کر دیا ہے، جو آسانی سے list.jsp ویو پر کنٹرول منتقل کرتا ہے۔ اگر آپ کے پاس ابھی تک یہ نہیں ہے تو اسے AddServlet servlet سے اسی طریقہ سے مشابہت کے ساتھ کریں۔ اب یہ اچھا ہو گا کہ ماڈل سے صارف ناموں کی فہرست حاصل کریں اور انہیں ویو تک پہنچا دیں، جو انہیں وہاں وصول کرے گا اور انہیں اچھی طرح سے ڈسپلے کرے گا۔ ایسا کرنے کے لیے، ہم دوبارہ درخواست آبجیکٹ کا استعمال کریں گے جو ہمیں Tomcat سے موصول ہوئی ہے۔ ہم اس آبجیکٹ میں ایک انتساب شامل کر سکتے ہیں، اسے کچھ نام دے سکتے ہیں اور درحقیقت وہ چیز جسے ہم منظر میں منتقل کرنا چاہتے ہیں۔ اس حقیقت کی وجہ سے کہ عمل درآمد کے عمل کو سرولیٹ سے کسی ویو میں منتقل کرتے وقت، ہم وہاں وہی درخواست اور جوابی اشیاء پاس کرتے ہیں جو خود سرولیٹ کو موصول ہوتی ہیں، پھر اپنے ناموں کی فہرست کو درخواست آبجیکٹ میں شامل کرکے، ہم اس درخواست سے نقطہ نظر میں اعتراض ہمارے صارف ناموں کی فہرست بنائیں اور حاصل کریں۔ ہم ListServlet کلاس کے ساتھ کام کر چکے ہیں، لہذا یہاں پوری کلاس کا کوڈ ہے۔ package app.servlets; import app.model.Model; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class ListServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Model model = Model.getInstance(); List names = model.list(); req.setAttribute("userNames", names); RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/list.jsp"); requestDispatcher.forward(req, resp); } }
jsp فائلوں میں جاوا کوڈ کا نفاذ۔
اب list.jsp فائل کی طرف چلتے ہیں۔ یہ فائل صرف اس وقت عمل میں آئے گی جب ListServlet یہاں عملدرآمد کے عمل کو پاس کرے گا۔ اس کے علاوہ، اس سرولیٹ میں ہم نے پہلے ہی ماڈل سے صارف کے ناموں کی ایک فہرست تیار کی ہے اور اسے یہاں درخواست کے اعتراض میں پاس کیا ہے۔ ناموں کی فہرست کو دیکھتے ہوئے، ہم اس کے ذریعے ایک لوپ چلا سکتے ہیں اور ہر نام کو پرنٹ کر سکتے ہیں۔ جیسا کہ میں پہلے ہی کہہ چکا ہوں، jsp فائلیں جاوا کوڈ پر عمل درآمد کر سکتی ہیں (اصولی طور پر، یہی چیز انہیں جامد HTML صفحات سے مختلف بناتی ہے)۔ کچھ کوڈ پر عمل کرنے کے لیے، ہمیں اپنی ضرورت کی جگہ پر تعمیر کرنا کافی ہے۔ <% // java code %> ایسی تعمیر کے اندر، ہمیں کئی متغیرات تک رسائی حاصل ہوتی ہے: درخواست - ہماری درخواست آبجیکٹ، جسے ہم نے سرولیٹ سے پاس کیا، جہاں اسے صرف کہا جاتا تھا۔ req ریسپانس - ریسپانس آبجیکٹ، servlet میں resp out کہلاتا تھا - JspWriter قسم کا ایک آبجیکٹ (معمول کے رائٹر سے وراثت میں ملا ہے) جس کی مدد سے ہم براہ راست HTML صفحہ میں کچھ "لکھ" سکتے ہیں۔ Out.println("Hello world!") System.out.println("ہیلو ورلڈ!") سے بہت ملتا جلتا ہے، لیکن ان کو الجھائیں نہیں! out.println() html صفحہ پر "لکھتا ہے"، اور System.out.println - سسٹم آؤٹ پٹ پر۔ اگر آپ jsp کوڈ کے ساتھ سیکشن کے اندر System.out.println() طریقہ کو کال کرتے ہیں، تو آپ کو Tomcat کنسول میں نتائج نظر آئیں گے، نہ کہ صفحہ پر، جیسا کہ آپ چاہیں گے :) آپ jsp کے اندر دیگر دستیاب اشیاء کو تلاش کر سکتے ہیں۔ یہاں _ درخواست آبجیکٹ کا استعمال کرتے ہوئے ہم ان ناموں کی فہرست حاصل کر سکتے ہیں جو سرولیٹ سے پاس کیے گئے تھے (ہم نے اس آبجیکٹ سے متعلقہ وصف منسلک کیا تھا) اور آؤٹ آبجیکٹ کا استعمال کرتے ہوئے ہم ان ناموں کو ظاہر کر سکتے ہیں۔ آئیے فی الحال یہ صرف ایک HTML فہرست کی شکل میں کرتے ہیں: اگر ہم فہرست کو صرف اس وقت ظاہر کرنا چاہتے ہیں جب صارفین موجود ہوں، اور بصورت دیگر انتباہ ظاہر کرنا چاہتے ہیں کہ ابھی تک کوئی صارف نہیں ہے، ہم اس حصے کو تھوڑا سا دوبارہ لکھ سکتے ہیں: اب جب کہ ہم جانتے ہیں کہ ڈیٹا کو سرولیٹس سے ویوز میں کیسے منتقل کرنا ہے - ہم اپنے AddServlet کو تھوڑا بہتر کر سکتے ہیں تاکہ صارف کے کامیاب اضافے کے بارے میں ایک اطلاع ظاہر ہو۔ ایسا کرنے کے لیے، doPost() طریقہ میں، ماڈل میں ایک نئے صارف کو شامل کرنے کے بعد، ہم اس صارف کا نام req آبجیکٹ کی خصوصیات میں شامل کر سکتے ہیں اور کنٹرول کو واپس add.jsp ویو پر منتقل کر سکتے ہیں۔ اور اس میں پہلے ہی جاوا کوڈ کے ساتھ ایک سیکشن بنائیں، جہاں آپ چیک کر سکتے ہیں کہ آیا درخواست میں ایسی کوئی خصوصیت موجود ہے، اور اگر ایسا ہے تو، پھر ایک پیغام دکھائیں کہ صارف کامیابی سے شامل ہو گیا ہے۔ ان تبدیلیوں کے بعد، AddServlet servlet کا مکمل کوڈ کچھ اس طرح نظر آئے گا: یہاں، doPost() طریقہ کار کے اختتام پر، ہم ماڈل میں شامل کردہ صارف کے نام کے ساتھ ایک انتساب سیٹ کرتے ہیں، اور پھر doGet کو کال کرتے ہیں۔ ) طریقہ، جس میں ہم موجودہ درخواست اور جواب کو پاس کرتے ہیں۔ اور doGet() طریقہ پہلے سے ہی کنٹرول کو منظر میں منتقل کرتا ہے، جہاں یہ ایک انتساب کے طور پر منسلک شامل صارف کے نام کے ساتھ ایک درخواست آبجیکٹ بھیجتا ہے۔ یہ add.jsp کو ہی درست کرنا باقی ہے تاکہ اگر ایسی کوئی خصوصیت موجود ہو تو یہ ایسی اطلاع دکھائے۔ حتمی add.jsp
    <% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { for (String s : names) { out.println("
  • " + s + "
  • "); } } %>
<% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { out.println(" "); for (String s : names) { out.println("
  • " + s + "
  • "); } out.println("
    "); } else out.println("

    There are no users yet!

    "); %>
    package app.servlets; import app.entities.User; import app.model.Model; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class AddServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { RequestDispatcher requestDispatcher = req.getRequestDispatcher("views/add.jsp"); requestDispatcher.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("pass"); User user = new User(name, password); Model model = Model.getInstance(); model.add(user); req.setAttribute("userName", name); doGet(req, resp); } } <%@ page contentType="text/html;charset=UTF-8" language="java" %> Add new user

    Super app!

    <% if (request.getAttribute("userName") != null) { out.println("

    User '" + request.getAttribute("userName") + "' added!

    "); } %>

    Add user

    صفحہ کا باڈی ایک ہیڈر کے ساتھ ایک div پر مشتمل ہوتا ہے، جس کے بعد مواد کے لیے ایک div کنٹینر ہوتا ہے، جس میں یہ چیک کرتا ہے کہ آیا صارف کے نام کے ساتھ کوئی وصف موجود ہے، پھر صارفین کو شامل کرنے کے لیے فارم کے ساتھ ایک div، اور آخر میں مرکزی صفحہ پر واپس جانے کے لیے بٹن کے ساتھ فوٹر۔ ایسا لگتا ہے کہ بہت زیادہ divs ہیں، لیکن ہم انہیں بعد میں استعمال کریں گے جب ہم سٹائلز شامل کریں گے :) ٹھیک ہے، حتمی ورژن list.jsp ہے۔ اس طرح ، ہمارے پاس ایک مکمل طور پر کام کرنے والی ویب ایپلیکیشن ہے جو صارفین کو ذخیرہ اور شامل کر سکتی ہے۔ جیسا کہ ان کے ناموں کی فہرست دکھائیں۔ بس اس کو سنوارنا باقی ہے... :) <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> Users

    Super app!

    Users

    <% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { out.println(" "); for (String s : names) { out.println("
  • " + s + "
  • "); } out.println("
    "); } else out.println("

    There are no users yet!

    "); %>
    طرزیں شامل کرنا۔ ہم W3.CSS فریم ورک استعمال کرتے ہیں۔
    اس وقت، ہماری ایپلی کیشن کام کر رہی ہے، لیکن بالکل پاگل ہے :) ہمیں ایک پس منظر، متن اور بٹنوں کے لیے رنگ، فہرستوں کو اسٹائلائز کرنے، سیدھ میں لانے، اشارے شامل کرنے، عام طور پر بہت سی چیزیں شامل کرنے کی ضرورت ہے۔ اگر آپ سٹائل کو دستی طور پر لکھتے ہیں، تو اس میں کافی وقت اور اعصاب لگ سکتے ہیں۔ لہذا، میں CSS فریم ورک W3.CSS استعمال کرنے کا مشورہ دیتا ہوں ۔ اس میں پہلے سے ہی اسٹائل کے ساتھ ریڈی میڈ کلاسز موجود ہیں؛ صرف سی ایس ایس کلاسز کو صحیح جگہوں پر رکھنا باقی ہے جسے ہم ان جگہوں پر اپلائی کرنا چاہتے ہیں۔ انہیں اپنے صفحات میں شامل کرنے کے لیے، پہلے ہمیں اسٹائل کے ساتھ ایک فائل شامل کرنے کی ضرورت ہے۔ یہ دو طریقوں سے کیا جا سکتا ہے: 1. ہمارے صفحات پر جائیں اور ہیڈ سیکشن میں سٹائل کے ساتھ فائل کا براہ راست لنک داخل کریں۔ یہ آپشن موزوں ہے اگر آپ کا انٹرنیٹ کنکشن مستقل ہے۔ پھر، جب آپ اپنے صفحات کو مقامی سرور پر کھولیں گے، تو اسٹائل انٹرنیٹ سے نکالے جائیں گے۔ 2. اگر آپ تمام اسٹائلز مقامی طور پر حاصل کرنا چاہتے ہیں اور انٹرنیٹ کنکشن پر منحصر نہیں ہیں، تو آپ آسانی سے اسٹائل کے ساتھ فائل ڈاؤن لوڈ کرسکتے ہیں اور اسے ویب فولڈر کے اندر کہیں رکھ سکتے ہیں (مثال کے طور پر web/styles/w3.css)، اور پھر ہمارے تمام صفحات (index.html, add.jsp, list.jsp) پر جائیں اور ہیڈ سیکشن کے اندر اسٹائل کے ساتھ اس فائل کا لنک درج کریں۔ اس کے بعد، صرف ٹیگز کے ذریعے جائیں اور انہیں اپنی پسند کے اسٹائل کے ساتھ ٹیگ کریں۔ . میں اس پر تفصیل سے بات نہیں کروں گا، لیکن فوری طور پر اپنی تین فائلوں کے تیار شدہ ورژن ترتیب دیے گئے طرز کی کلاسوں کے ساتھ دوں گا۔ index.html add.jsp list.jsp بس اتنا ہی ہے :) اگر آپ کے پاس اب بھی کوئی سوال ہے یا کوئی تبصرہ ہے، یا اس کے برعکس، کچھ کام نہیں کرتا ہے - ایک تبصرہ چھوڑیں۔ ٹھیک ہے، میں اس کے کچھ اسکرین شاٹس منسلک کروں گا جو اس سب سے نکلا ہے۔ اور آخر میں. اگر آپ اس پروجیکٹ کے ساتھ مشق کرنا چاہتے ہیں، تو آپ کوشش کر سکتے ہیں: Super app!

    Super app!

    <%@ page contentType="text/html;charset=UTF-8" language="java" %> Add new user

    Super app!

    <% if (request.getAttribute("userName") != null) { out.println("
    \n" + " ×\n" + "
    User '" + request.getAttribute("userName") + "' added!
    \n" + "
    "); } %>

    Add user

    <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> Users list

    Super app!

    Users

    <% List names = (List ) request.getAttribute("userNames"); if (names != null && !names.isEmpty()) { out.println("
      "); for (String s : names) { out.println("
    • " + s + "
    • "); } out.println("
    "); } else out.println("
    \n" + " ×\n" + "
    There are no users yet!
    \n" + "
    "); %>
    درخواست کا ہوم پیج صارف ونڈو شامل کریں۔ صارفین کی فہرست
    • کسی صارف کو حذف کرنے کے لیے ایک servlet اور jsp بنائیں اور موجودہ صارف کو تبدیل/ترمیم کرنے کے لیے کچھ اور بنائیں۔ آپ کو ایک حقیقی CrUD ویب ایپلیکیشن ملے گی :) سرولیٹس پر))
    • فہرست کو تبدیل کریں (فہرست ) ڈیٹا بیس کے ساتھ کام کرنا تاکہ سرور کے دوبارہ شروع ہونے کے بعد شامل کردہ صارفین غائب نہ ہوں :)
    اچھی قسمت!
    تبصرے
    TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
    GO TO FULL VERSION