JavaRush /جاوا بلاگ /Random-UR /Maven، Spring، MySQL، Hibernate اور پہلی CRUD ایپلیکیشن ک...
Макс
سطح

Maven، Spring، MySQL، Hibernate اور پہلی CRUD ایپلیکیشن کا تعارف (حصہ 1)

گروپ میں شائع ہوا۔
صبح بخیر اس مضمون میں میں اپنی پہلی ملاقات Maven، Spring، Hibernate، MySQL اور Tomcat جیسی چیزوں کے ساتھ شیئر کرنا چاہوں گا جو ایک سادہ CRUD ایپلیکیشن بنانے کے عمل میں ہے۔ یہ 4 کا پہلا حصہ ہے۔ مضمون بنیادی طور پر ان لوگوں کے لیے ہے جنہوں نے یہاں پہلے ہی 30-40 درجے مکمل کر لیے ہیں، لیکن ابھی تک خالص جاوا سے آگے نہیں نکلے ہیں اور کھلی دنیا میں داخل ہونے کے لیے ابھی شروعات کر رہے ہیں (یا شروع ہونے والے ہیں)۔ یہ تمام ٹیکنالوجیز، فریم ورک اور دیگر نا واقف الفاظ۔ Maven، Spring، MySQL، Hibernate اور پہلی CRUD ایپلیکیشن کا تعارف (حصہ 1) - 1

مواد:

تعارف

میں نے مختلف مثالوں کا مطالعہ کر کے ان ٹیکنالوجیز اور فریم ورک سے واقف ہونا شروع کیا جو میرے لیے نئے تھے، کیونکہ عام طور پر میں کسی چیز کو اس وقت اچھی طرح سمجھتا ہوں جب میں اسے مکمل ایپلی کیشن کی مثال استعمال کرتے ہوئے دیکھتا ہوں۔ عام طور پر، ایسی مثالیں CRUD ایپلی کیشنز ( C reate، Read ، U pdate، D elete) ہیں؛ انٹرنیٹ مختلف قسم کی پیچیدگیوں کی ایسی مثالوں سے بھرا ہوا ہے۔ مسئلہ یہ ہے کہ وہ عام طور پر تفصیل سے نہیں بتاتے کہ وہاں کیسے، کیا اور کیوں کیا گیا، فلاں فلاں انحصار کیوں شامل کیا گیا، فلاں فلاں طبقے کی ضرورت کیوں ہے، وغیرہ۔ زیادہ تر معاملات میں، وہ مکمل طور پر تیار شدہ ایپلی کیشن لیتے ہیں، ایک حتمی POM فائل کے ساتھ، کلاسوں کے آخری ورژن کے ساتھ، اور چھوٹی چھوٹی چیزوں پر توجہ مرکوز کیے بغیر، جو شاید کسی تجربہ کار شخص کے لیے واضح نظر آتی ہیں، ہر ایک کو بس چلاتے ہیں۔ میں نے اس طرح کی بہت سی مثالوں کو دیکھا ہے اور یہ عام طور پر واضح ہے کہ سب کچھ کیسے کام کرتا ہے، لیکن وہ اس تک کیسے پہنچی ہیں یہ پوری طرح واضح نہیں ہے۔ اس لیے، میں نے فیصلہ کیا کہ ایسی مثال کسی تجربہ کار ڈویلپر کی حیثیت سے نہیں، بلکہ ایک ایسے مبتدی کی حیثیت سے کارآمد ہو گی جس نے بہار، ہائبرنیٹ اور دیگر چیزوں سے کبھی نمٹا ہی نہیں ہے۔
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 2
میں زیادہ سے زیادہ تفصیل سے بیان کرنے کی کوشش کروں گا (جہاں تک میری سمجھ مجھے اجازت دیتی ہے) CRUD ایپلیکیشن بنانے کے اپنے پورے راستے کو، جس کا آغاز ہیلو ورلڈ کی سب سے آسان سطح پر ہوتا ہے۔ سب سے پہلے، میں یہ اپنے لیے کرتا ہوں، کیونکہ جب آپ کسی چیز کو بیان کرنے، بتانے، سمجھانے کی کوشش کرتے ہیں، تو یہ آپ کے دماغ میں زیادہ بہتر طور پر جذب اور منظم ہوتی ہے۔ لیکن اگر یہ کسی کے لیے مفید ہے اور انھیں کچھ معلوم کرنے میں مدد کرتا ہے، تو مجھے بہت خوشی ہوگی۔ اس مثال میں، آئیے Maven ، Tomcat ، Spring ، Hibernate اور MySQL کا استعمال کرتے ہوئے ایک سادہ CRUD ایپلیکیشن بنانے کی کوشش کریں ۔ ابتدائی اقدامات جیسے کہ Maven , MySQL کو انسٹال کرنا ، خیال کا حتمی ورژن استعمال کرنا وغیرہ۔ میرے خیال میں تفصیل سے بیان کرنے کی ضرورت نہیں، اس میں کوئی پریشانی نہیں ہونی چاہیے۔ یہ بات قابل غور ہے کہ اس مثال میں، کنفیگریشن کو xml استعمال کیے بغیر جاوا کلاسز (جسے JavaConfig کہا جاتا ہے) کا استعمال کرتے ہوئے ترتیب دیا جائے گا۔

ایک پروجیکٹ بنانا

لہذا، چونکہ میں نیا ہوں، ہم کوئی غیر واضح آرکی ٹائپ استعمال نہیں کریں گے۔ بہار کی ابتداء اب بھی بہت خوفناک لگتی ہے۔ لہذا، ہم سب سے عام سادہ Maven پروجیکٹ بنائیں گے. میرے پاس ڈومین نام نہیں ہے، اس لیے گروپڈ میں میں صرف لکھوں گا testgroup، اور آرٹیفیکٹیڈ میں میں نام لکھوں گا، مثال کے طور پر، filmography(یہ فلموں کی فہرست ہوگی)۔ ہم ایک پروجیکٹ بناتے ہیں اور منتخب کرتے ہیں Enable auto-importجب آئیڈیا اس کی تجویز کرتا ہے۔ اس کی بدولت، جب بھی ہم POM فائل میں کوئی تبدیلی کرتے ہیں (پروجیکٹ آبجیکٹ ماڈل، یہ فائل Maven پروجیکٹ کے پورے ڈھانچے کو بیان کرتی ہے)، سب کچھ فوری طور پر پروجیکٹ پر خود بخود لاگو ہو جائے گا۔ لائبریریاں ہمارے مقامی ذخیرے سے لی جائیں گی اگر وہ ہمارے پاس پہلے سے موجود ہیں، یا اگر ہم کچھ نئے انحصار استعمال کرتے ہیں جن کے ساتھ ہم نے پہلے ڈیل نہیں کیا ہے، تو Maven انہیں صرف مرکزی ذخیرہ سے انٹرنیٹ کے ذریعے ڈاؤن لوڈ کرے گا۔ ماوین کے پاس ذرائع اور دستاویزات ڈاؤن لوڈ کرنے کا ایک فنکشن بھی ہے (ذرائع اور/یا دستاویزات ڈاؤن لوڈ کریں)۔ یہ بہت آسان بھی ہے، اگر کسی کلاس یا طریقہ سے کچھ واضح نہیں ہے، تو آپ سورس کوڈ پر جا کر دیکھ سکتے ہیں کہ یہ سب اندر کیسے کام کرتا ہے۔ آئیے کچھ تفصیلات شامل کرتے ہیں۔ یہ ایک ویب ایپلیکیشن ہوگی اور ہم استعمال کریں گے Tomcat ۔ Tomcat پر کسی ایپلیکیشن کو تعینات کرنے کے لیے، آپ کو اسے جنگی آرکائیو (ویب ایپلیکیشن ریسورس، ویب ایپلیکیشنز کے لیے ایک خاص فارمیٹ) کی شکل میں وہاں منتقل کرنے کی ضرورت ہے۔ ایسا کرنے کے لیے، مندرجہ ذیل لائن کو POM فائل میں شامل کریں تاکہ ایپلی کیشن کو جنگی آرکائیو میں مرتب کیا جائے۔
<packaging>war</packaging>
ٹھیک ہے، آپ کو ویب ذرائع کے لیے ایک خصوصی ڈائریکٹری کی بھی ضرورت ہوگی، ہمارے معاملے میں jsp صفحات اور کچھ ویب وسائل ہوں گے ۔ آئیے ایک mainڈائریکٹری بنائیں webapp۔ اسے بالکل وہی کہا جانا چاہئے اور بالکل mainاسی طرح واقع ہونا چاہئے جیسا کہ java, resourcesکیونکہ یہ معیاری Maven ڈائریکٹری ڈھانچہ ہے۔ ایک بار جب ہم پیکج کو انسٹال کر لیتے ہیں warاور اس طرح یہ طے کر لیتے ہیں کہ یہ ایک ویب پروجیکٹ ہے، ڈائرکٹری webappخود بخود ویب ایپلیکیشن کے ذرائع کے طور پر نشان زد ہو جائے گی (اس پر ایک نیلے رنگ کا ڈاٹ ہو گا) اور ویب سے متعلق ہر چیز کو اس فولڈر میں تلاش کیا جائے گا۔ اور ایک لمحہ۔ پہلے سے طے شدہ طور پر، Maven زبان کا ورژن 1.5 استعمال کرتا ہے، لیکن میں استعمال کرنا چاہتا ہوں، مثال کے طور پر، ورژن 1.8 - Java 8 (آپ 10، یا 11 لے سکتے ہیں، لیکن پھر بھی وہاں سے کوئی فیچر استعمال کرنے کا کوئی منصوبہ نہیں ہے، لہذا اسے 8 رہنے دیں۔ )۔ اسے بہت آسانی سے حل کیا جا سکتا ہے، ہم گوگل میں کچھ لکھتے ہیں جیسے "Maven java 8" اور دیکھتے ہیں کہ POM فائل میں کیا شامل کرنے کی ضرورت ہے تاکہ Maven ہماری کلاسز کو مطلوبہ ورژن کے لیے مرتب کرے۔ نتیجے کے طور پر، ہمارے پاس درج ذیل ہیں: Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 3

بہار MVC کنکشن

آپ کو کہیں سے شروع کرنا ہوگا۔ منصوبے کے مطابق، ہم ڈیٹابیس کو جوڑیں گے اور ہائبرنیٹ استعمال کریں گے، لیکن یہ سب کچھ ابھی کے لیے تھوڑا بہت خوفناک لگتا ہے۔ ہمیں پہلے کچھ آسان کرنے کی ضرورت ہے۔ بہار MVC، یہ پہلے سے ہی بہتر ہے، ہم ایک طویل عرصے سے MVC پیٹرن سے واقف ہیں، یہ کورس کے نصف بڑے کاموں میں استعمال ہوتا تھا۔ یہاں سے ہم ناچنا شروع کریں گے۔ Spring MVC کے ساتھ ایک ویب ایپلیکیشن بنانے کے لیے، ہمیں Servlet-API کی بھی ضرورت ہے، یعنی وہ چیز جس کی مدد سے درخواست اور جواب کا تعامل ہوگا۔ آئیے اس کو جوڑنے کی کوشش کرتے ہیں۔ ہم گوگل پر جاتے ہیں، ماون ریپوزٹری میں ضروری انحصار تلاش کرتے ہیں اور انہیں میں شامل کرتے ہیں pom.xml۔ Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 4بیرونی لائبریریوں کے سیکشن میں آپ دیکھ سکتے ہیں کہ نہ صرف spring-webmvc لوڈ کیا گیا تھا ، بلکہ دوسری چیزوں کا ایک گروپ بھی۔ وہ. ہمیں اسپرنگ کور ، سیاق و سباق ، پھلیاں وغیرہ کے لیے اضافی انحصار شامل کرنے کی ضرورت نہیں ہے۔ جس کی ہمیں ضرورت ہے، ہماری ضرورت کی ہر چیز spring-webmvc کے ساتھ کھینچ لی گئی تھی ۔

ہمیں ایک چھوٹا سا ڈس کلیمر کرنے کی ضرورت ہے۔ عام طور پر یہ سفارش کی جاتی ہے کہ اب بھی استعمال شدہ ہر لائبریری کے لیے الگ سے انحصار شامل کیا جائے، چاہے وہ پہلے سے شامل کردہ لائبریریوں کے ساتھ بنڈل ہو، کیونکہ اس سے کچھ مسائل اور خرابیوں سے بچنے میں مدد مل سکتی ہے۔

ایک سادہ سی مثال۔ ہم کہتے ہیں کہ ہم نے ایک انحصار شامل کیا ہے جو کچھ API کا استعمال کرتا ہے، اور ساتھ ہی یہ اس API کے لیے کسی قسم کے نفاذ کو کھینچ لے گا۔ اور پھر ہم نے ایک اور انحصار شامل کیا جو ایک ہی API کا استعمال کرتا ہے اور اس کے لیے اس کے کچھ نفاذ کو بھی کھینچتا ہے، لیکن اس بار یہ مختلف ہے۔ اس طرح، ہمارے پاس ایک ہی API کے 2 مختلف نفاذ ہوں گے۔ اور اگر ہم خود کہیں اس API کے کچھ طریقے استعمال کرنا چاہتے ہیں تو ایک مسئلہ پیدا ہو جائے گا، کیونکہ سسٹم کو یہ معلوم نہیں ہو گا کہ کون سا عمل استعمال کرنا ہے، وہ بے ترتیب طریقے سے انتخاب کرے گا، شاید وہ نہیں جس کی ہمیں توقع تھی۔ اور اگر آپ واضح طور پر کسی ایک نفاذ کے لیے انحصار کی وضاحت کرتے ہیں، تو اسے ترجیح دی جائے گی۔

تاہم، یہ اتنی سخت سفارش نہیں ہے؛ یہ بنیادی طور پر بڑے منصوبوں پر لاگو ہوتا ہے جہاں مختلف کمپنیوں کی بہت سی مختلف لائبریریاں استعمال ہوتی ہیں۔ ہم یہاں ایسا نہیں کریں گے، تاکہ POM فائل کو بہت زیادہ لوڈ نہ کریں؛ کسی پریشانی کی توقع نہیں ہے۔ لیکن اس کے باوجود، یہ اب بھی ذہن میں رکھنے کے قابل ہے.

ایک اور نوٹ۔ providedانحصار کا کیا مطلب ہے javax.servlet-api؟ دائرہ کار انحصار کا دائرہ ہے، providedجس کا مطلب ہے کہ انحصار درخواست کو مرتب کرنے اور جانچنے کے مرحلے پر دستیاب ہوگا، لیکن اسے محفوظ نہیں کیا جائے گا۔ حقیقت یہ ہے کہ ایپلیکیشن کو ڈیپلائی کرنے کے لیے ہم ایک سرولیٹ کنٹینر، Tomcat استعمال کریں گے اور اس کے اندر ایسی لائبریریاں پہلے سے موجود ہیں، اس لیے انہیں وہاں منتقل کرنے اور آرکائیو پر غیر ضروری بوجھ ڈالنے کی ضرورت نہیں ہے۔ آگے دیکھتے ہوئے، اسی وجہ سے ہم معمول کے طریقہ کے بغیر کریں گے main، کیونکہ یہ Tomcat کے اندر پہلے سے موجود ہے۔

صفحات اور کنٹرولر بنانا

آئیے اب کچھ آسان بنانے کی کوشش کرتے ہیں۔ سب سے پہلے، آئیے ایک webappاضافی ڈائرکٹری بنائیں، مثال کے طور پر pages، جس میں ہمارے خیالات محفوظ کیے جائیں گے، یعنی jsp صفحات، اور ایک دو صفحات بنائیں۔ ہمیں ایک صفحہ کی ضرورت ہوگی جس پر مستقبل میں فلموں کی فہرست دکھائی جائے گی، مثال کے طور پر films.jsp، اور شاید ہم ایڈیٹنگ کے لیے ایک الگ صفحہ بنا سکیں، رہنے دیں editPage.jsp۔ ہم فی الحال انہیں کسی بھی سنجیدہ چیز سے نہیں بھریں گے؛ صرف جانچ کے لیے، ہم ایک صفحہ سے دوسرے صفحہ پر ایک لنک بنائیں گے۔ اب ہمیں ایک ایسی کلاس کی ضرورت ہے جو درخواستوں پر کارروائی کرے، یعنی کنٹرولر آئیے ایک نیا پیکج شامل کریں controllerاور اس میں ایک کلاس بنائیں FilmController(عام طور پر ہر چیز کو مختلف پیکجز میں پیک کرنا ضروری نہیں ہے، یہ ایپلی کیشن بہت چھوٹی اور سادہ ہوگی، لیکن ایک عام پروجیکٹ میں بہت سے کنٹرولرز، کنفیگریشن کلاسز، ماڈلز ہوسکتے ہیں۔ وغیرہ، اس لیے چھوٹے پراجیکٹس سے شروع کرتے ہوئے بھی بہتر ہے کہ فوری طور پر ہر چیز کو منظم اور منظم طریقے سے کرنے کی عادت ڈالی جائے تاکہ کوئی گڑبڑ نہ ہو)۔ اس کلاس میں ہم ایسے طریقے بنائیں گے جو درخواستوں کے جواب میں ہمارے خیالات کو واپس کریں گے۔
package testgroup.filmography.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FilmController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView allFilms() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        return modelAndView;
    }

    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    public ModelAndView editPage() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("editPage");
        return modelAndView;
    }
}
کیا مقصد ہے؟ اسپرنگ ایم وی سی کے پاس ایک چیز ہے جسے کہا جاتا ہے DispatcherServlet۔ یہ مرکزی کنٹرولر کی طرح ہے، تمام آنے والی درخواستیں اس سے گزرتی ہیں اور پھر یہ انہیں ایک مخصوص کنٹرولر تک پہنچاتی ہے۔ تشریح @Controllerصرف Spring MVC کو بتاتی ہے کہ یہ کلاس ایک کنٹرولر ہے (اچھی طرح سے، عام طور پر منطقی)، ڈسپیچر @RequestMappingمناسب طریقہ کو کال کرنے کے لیے تشریحات کی جانچ کرے گا۔ تشریح @RequestMappingآپ کو کنٹرولر طریقوں کے لیے پتے بتانے کی اجازت دیتی ہے، جس کے ذریعے وہ کلائنٹ (براؤزر) میں دستیاب ہوں گے۔ اسے سیٹ کرنے کے لیے کنٹرولر کلاس پر بھی لاگو کیا جا سکتا ہے، تو بات کریں، تمام طریقوں کے لیے روٹ ایڈریس۔ طریقہ کار کا allFilms()پیرامیٹر value" /" پر سیٹ کیا گیا ہے، لہذا اسے فوری طور پر بلایا جائے گا جب براؤزر میں http://host:port/ کا مجموعہ درج کیا جائے گا (یعنی ڈیفالٹ کے طور پر یہ http://localhost:8080/ یا http ہے۔ 127.0 .0.1:8080/ ) پیرامیٹر methodبتاتا ہے کہ کس قسم کی درخواست کی حمایت کی جاتی ہے (GET، POST، PUT، وغیرہ)۔ چونکہ یہاں ہم صرف ڈیٹا وصول کرتے ہیں، اس لیے GET استعمال کیا جاتا ہے۔ بعد میں، جب شامل کرنے اور ترمیم کرنے کے طریقے ظاہر ہوں گے، تو پہلے سے ہی POST کی درخواستیں ہوں گی۔ (ویسے، @RequestMappingکسی طریقہ کی نشاندہی کرنے والی تشریح کے بجائے، آپ تشریحات وغیرہ @GetMappingکو مساوی طور پر استعمال کر سکتے ہیں ))۔ ہمارے طریقوں میں، ہم ایک آبجیکٹ بناتے ہیں اور اس منظر کا نام سیٹ کرتے ہیں جسے واپس کرنے کی ضرورت ہے۔ @PostMapping@GetMapping@RequestMapping(method = RequestMethod.GETModelAndView

کنفیگریشن

آئیے کنفیگریشن کو ترتیب دینے کی طرف بڑھتے ہیں۔ آئیے پیکیج میں configایک کلاس بنائیں WebConfig۔ اس کے پاس صرف ایک طریقہ ہوگا جو قسم کی کسی چیز کو لوٹاتا ہے ViewResolver، یہ وہ انٹرفیس ہے جو نام سے نمائندگی تلاش کرنے کے لیے ضروری ہے۔
package testgroup.filmography.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "testgroup.filmography")
public class WebConfig {

    @Bean
    ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}
@ConfigurationbeanSpring کو بتاتا ہے کہ یہ کلاس ایک کنفیگریشن کلاس ہے اور اس میں اجزاء کی تعریفیں اور انحصار شامل ہیں ۔ پھلیاں ایسی چیزیں ہیں جن کا انتظام بہار کے ذریعہ کیا جاتا ہے۔ تشریح کا استعمال بین کی وضاحت کے لیے کیا جاتا ہے @Bean۔ @EnableWebMvcآپ کو اسپرنگ MVC کنفیگریشن سے درآمد کرنے کی اجازت دیتا ہے WebMvcConfigurationSupport۔ آپ مثال کے طور پر ایک انٹرفیس کو بھی لاگو کر سکتے ہیں WebMvcConfigurerجس میں طریقوں کا ایک پورا گروپ ہے، اور ہر چیز کو اپنی پسند کے مطابق بنا سکتے ہیں، لیکن ہمیں ابھی تک اس میں جانے کی ضرورت نہیں ہے، معیاری ترتیبات ہی کافی ہوں گی۔ @ComponentScanبہار کو بتاتا ہے کہ ان اجزاء کو کہاں تلاش کرنا ہے جن کا اسے انتظام کرنا چاہئے، یعنی ایک تشریح یا اس کے مشتقات کے ساتھ نشان زد کلاسز @Componentجیسے @Controller, @Repository, @Service. یہ تشریحات خود بخود کلاس بین کی وضاحت کرتی ہیں۔ طریقہ کار میں، viewResolver()ہم اس کے نفاذ کو تخلیق کرتے ہیں اور اس بات کا تعین کرتے ہیں کہ میں نمائندگی کو کہاں تلاش کرنا ہے webapp۔ لہذا، جب ہم کنٹرولر کے طریقہ کار میں نام " films" سیٹ کرتے ہیں تو منظر " /pages/films.jsp" کے طور پر پایا جائے گا، لہذا، ہمارے پاس ایک کنفیگریشن کلاس ہے، لیکن فی الحال یہ صرف ایک قسم کی الگ کلاس ہے، اس سے ہماری درخواست پر کسی بھی طرح سے کوئی اثر نہیں پڑتا ہے۔ . ہمیں اس ترتیب کو موسم بہار کے تناظر میں رجسٹر کرنے کی ضرورت ہے۔ اس کے لیے آپ کو ایک کلاس کی ضرورت ہے AbstractAnnotationConfigDispatcherServletInitializer۔ پیکیج میں، configہم اس کا جانشین بناتے ہیں، کہتے ہیں AppInitializer ، اور اس کے طریقوں کو نافذ کرتے ہیں۔
package testgroup.filmography.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
آخری طریقہ ایڈریس کو رجسٹر کرتا ہے اور کنفیگریشن کلاسز کو رجسٹر کرنے کے مزید 2 طریقے ہیں۔ ویب کنفیگریشنز، جہاں ViewResolver's اور اس طرح کی وضاحت کی گئی ہے، میں رکھی گئی ہیں getServletConfigClasses()۔ اس سب کے بارے میں دستاویزات اور مختلف گائیڈز میں پڑھنا بہتر ہے، لیکن ہمارے معاملے میں ابھی تک اس میں غور کرنا ضروری نہیں ہے، WebConfigاصولی طور پر، ہماری RootClassesدونوں میں تعریف کی جا سکتی ہے، آپ دونوں کو ایک ساتھ بیان بھی کر سکتے ہیں، یہ اب بھی کام کرے گا۔ . ایک اور بات. انکوڈنگ میں دشواری ہو سکتی ہے جب، فارم سے روسی حروف کے ساتھ اقدار بھیجتے وقت، نتیجہ سکریبلز ہو گا۔ اس مسئلے کو حل کرنے کے لیے، ہم ایک فلٹر شامل کریں گے جو درخواستوں پر پہلے سے کارروائی کرے گا۔ ہم AppInitializer کلاس میں جاتے ہیں اور طریقہ کو اوور رائڈ کرتے ہیں getServletFilters، جس میں ہم مطلوبہ انکوڈنگ کی نشاندہی کرتے ہیں، یقیناً، یہ ہر جگہ کی طرح ہونا چاہیے، جیسا کہ صفحات پر اور ڈیٹا بیس میں:
protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return new Filter[] {characterEncodingFilter};
    }
ٹھیک ہے، لگتا ہے کہ سب کچھ ترتیب دیا گیا ہے، آپ اسے چلانے کی کوشش کر سکتے ہیں اور دیکھیں کہ کیا ہوتا ہے. چلائیں ۔ _ _ _ _ _ _ _ _ _ _ خیال خود ایک اشارہ دے گا انتباہ: تعیناتی کے لیے کوئی نمونے نشان زد نہیں ہیں ۔ فکس بٹن پر کلک کریں اور منتخب کریں ...: war exploded . یا آپ Deployment -> add -> Artifact -> ...: war exploded پر جا سکتے ہیں ۔ اور آپ کو تعیناتیЗнакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 5 پر جانے کی ضرورت ہے اور Applecation سیاق و سباق کی فیلڈ (یہ یو آر ایل ایڈریس کا حصہ ہوگا جہاں براؤزر میں ایپلی کیشن دستیاب ہوگی) کو " " پر سیٹ کرنا ہوگا۔ اس کے بعد ہماری درخواست فوری طور پر http://localhost:8080/ پر دستیاب ہو جائے گی (لیکن آپ وہاں کچھ بھی بتا سکتے ہیں، مثال کے طور پر " "، اور پھر آپ کو اسے تمام پتوں میں شامل کرنے کی ضرورت ہوگی، یعنی مثال کے طور پر کوئی " http://localhost:8080/edit" ، لیکن یہ "http://localhost:8080/filmography/edit" ) ہوگا ۔ چلائیں پر کلک کریں اور اس کے شروع ہونے تک انتظار کریں۔ مجھے جو ملا وہ یہ ہے: لگتا ہے کہ سب کچھ ٹھیک ہے، لیکن ایک انتباہ ہے۔ حقیقت یہ ہے کہ ہمارے صفحات اب عوامی طور پر قابل رسائی ہیں اور ایڈریس بار میں راستہ لکھ کر براہ راست رسائی حاصل کی جا سکتی ہے۔ ہم http://localhost:8080/pages/films.jsp درج کرتے ہیں اور اب ہمیں کنٹرولر کے علم کے بغیر اپنا صفحہ موصول ہوا ہے۔ کسی نہ کسی طرح یہ بہت درست نہیں ہے، اس لیے ہم ایک خصوصی ڈائریکٹری بنائیں گے ۔ اندر جو ہے وہ عوام سے پوشیدہ رہے گا اور صرف کنٹرولر کے ذریعے ہی اس تک رسائی حاصل کی جا سکتی ہے۔ ہم ڈائرکٹری کو اپنے خیالات ( ) میں رکھتے ہیں ، اور اس کے مطابق اسے سابقہ ​​میں شامل کرتے ہیں: /Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 6/filmographyЗнакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 7webappWEB-INFpagesWEB-INFViewResolver
viewResolver.setPrefix("/WEB-INF/pages/");
اب ہمیں اپنا صفحہ http://localhost:8080 پر ملتا ہے ، لیکن اگر ہم براہ راست http://localhost:8080/WEB-INF/pages/films.jsp پر کوشش کرتے ہیں تو ہمیں 404 ایرر ملتا ہے۔ اچھا، بہت اچھا، ہمارے پاس سب سے آسان ویب ایپلیکیشن، ہیلو ورلڈ جیسا کہ وہ کہتے ہیں۔ پروجیکٹ کا ڈھانچہ فی الحال اس طرح لگتا ہے:
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 8

ماڈل

ہمارے پاس پہلے سے ہی آراء اور ایک کنٹرولر ہے، لیکن MVC میں ایک تیسرا حرف بھی ہے، لہذا تصویر کو مکمل کرنے کے لیے ہم ایک ماڈل بھی شامل کریں گے۔ پیکیج میں، modelآئیے ایک کلاس بنائیں Film، مثال کے طور پر، درج ذیل فیلڈز کے ساتھ: int id, String title(عنوان)، int year(ریلیز کا سال)، String genre(نوع) اور boolean watched(یعنی کیا آپ نے یہ فلم پہلے دیکھی ہے یا نہیں)۔
package testgroup.filmography.model;

public class Film {
    private int id;
    private String title;
    private int year;
    private String genre;
    private boolean watched;
// + Getters and setters
}
کچھ خاص نہیں، بس ایک عام کلاس، پرائیویٹ فیلڈز، گیٹرز اور سیٹرز۔ ایسی کلاسوں کے آبجیکٹ کو POJO(Plain Old Java Object) بھی کہا جاتا ہے، ٹھیک ہے، یعنی "سادہ جاوا آبجیکٹ"۔ آئیے اب ایسی کوئی چیز بنانے کی کوشش کرتے ہیں اور اسے صفحہ پر ظاہر کرتے ہیں۔ ابھی کے لیے، ہم اسے بنانے اور اسے شروع کرنے کے طریقے کے بارے میں زیادہ فکر نہیں کریں گے۔ اسے آزمانے کے لیے، آئیے اسے بے وقوفانہ طریقے سے براہ راست کنٹرولر میں بنائیں، مثال کے طور پر، اس طرح:
public class FilmController {
    private static Film film;

    static {
        film = new Film();
        film.setTitle("Inception");
        film.setYear(2010);
        film.setGenre("sci-fi");
        film.setWatched(true);
    }
ModelAndViewاور طریقہ کا استعمال کرتے ہوئے اس اعتراض کو ہمارے میں شامل کریں addObject:
@RequestMapping(method = RequestMethod.GET)
    public ModelAndView allFilms() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        modelAndView.addObject("film", film);
        return modelAndView;
    }
اب ہم اس چیز کو اپنے صفحہ پر ڈسپلے کر سکتے ہیں۔ Hello World کی بجائے films.jspہم لکھیں گے ${film}اور انتساب کے نام سے متعلقہ آبجیکٹ filmیہاں بدل دیا جائے گا۔ آئیے اسے چلانے کی کوشش کریں اور دیکھیں کہ کیا ہوا (آبجیکٹ کے واضح آؤٹ پٹ کے لیے، کلاس کی Filmنئی تعریف کی گئی تھی toString()):
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 9

ماڈل ویو کنٹرولر

اس مرحلے پر، ایسا لگتا ہے کہ ہمارے پاس پہلے سے ہی ایک مکمل Spring MVC ایپلی کیشن موجود ہے۔ آگے بڑھنے سے پہلے، یہ اچھا ہو گا کہ ہر چیز پر دوبارہ ایک نظر ڈالیں اور یہ جان لیں کہ یہ سب کیسے کام کرتا ہے۔ انٹرنیٹ پر آپ کو اس بارے میں بہت سی تصاویر اور خاکے مل سکتے ہیں، مجھے یہ پسند ہے:
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 10
جب ہم براؤزر لائن میں درخواست لکھتے ہیں، تو اسے قبول کر لیا جاتا ہے Dispatcher Servlet، پھر اسے اس درخواست پر کارروائی کرنے کے لیے ایک مناسب کنٹرولر مل جاتا ہے HandlerMapping(یہ ایک کنٹرولر کو منتخب کرنے کے لیے ایک انٹرفیس ہے، یہ چیک کرتا ہے کہ دستیاب کنٹرولرز میں سے کون سا طریقہ ہے جو اس طرح کے ایڈریس کو قبول کرتا ہے) ، ایک مناسب طریقہ کو کال کرتا ہے اور Controllerمنظر کے بارے میں معلومات واپس کرتا ہے، پھر ڈسپیچر ViewResolver'a' کا استعمال کرتے ہوئے نام سے مطلوبہ منظر تلاش کرتا ہے، جس کے بعد ماڈل ڈیٹا اس منظر میں منتقل ہوتا ہے اور ہمیں اپنا صفحہ آؤٹ پٹ کے طور پر ملتا ہے۔ کچھ اس طرح۔ جاری رکھنے کے لیے... Maven، Spring، MySQL، Hibernate اور پہلی CRUD ایپلیکیشن کا تعارف (حصہ 1) Maven، Spring، MySQL، Hibernate اور پہلی CRUD ایپلیکیشن (حصہ 2) متعارف کروا رہا ہے Maven، Spring، MySQL، Hibernate اور the پہلی CRUD ایپلیکیشن (حصہ 3) Maven، Spring، MySQL، Hibernate اور پہلی CRUD ایپلی کیشن کا تعارف (حصہ 4)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION