JavaRush /جاوا بلاگ /Random-SD /Maven، Spring، MySQL، Hibernate ۽ پهرين CRUD ايپليڪيشن جو...
Макс
سطح

Maven، Spring، MySQL، Hibernate ۽ پهرين CRUD ايپليڪيشن جو تعارف (حصو 1)

گروپ ۾ شايع ٿيل
منجهند جو سلام. هن آرٽيڪل ۾ آئون هڪ سادي CRUD ايپليڪيشن ٺاهڻ جي عمل ۾ Maven، Spring، Hibernate، MySQL ۽ Tomcat جهڙين شين سان منهنجي پهرين ملاقات کي حصيداري ڪرڻ چاهيان ٿو. هي 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 , استعمال ڪندي الٽيميٽ ورزن جو خيال وغيره. مان سمجهان ٿو ته تفصيل سان بيان ڪرڻ جي ڪا ضرورت ناهي، ان سان ڪو به مسئلو نه هجڻ گهرجي. اها ڳالهه نوٽ ڪرڻ جي قابل آهي ته هن مثال ۾، ترتيب ترتيب ڏني ويندي جاوا ڪلاس استعمال ڪندي (جنهن کي JavaConfig سڏيو ويندو آهي) بغير xml استعمال ڪندي.

پروجيڪٽ ٺاهڻ

تنهن ڪري، جيئن ته مان هڪ نئون آهيان، اسان ڪنهن به غير واضح آرڪٽائپ استعمال نه ڪنداسين. بهار جي شروعات اڃا به خوفناڪ آواز آهي. تنهن ڪري، اسان سڀ کان وڌيڪ عام سادي Maven پروجيڪٽ ٺاهي سگهنداسين. مون وٽ ڊومين جو نالو نه آهي، تنهنڪري گروپ ۾ آئون صرف لکندس testgroup، ۽ artifactid ۾ آئون نالو لکندس، مثال طور، filmography(هي فلمن جي فهرست هوندي). اسان هڪ پروجيڪٽ ٺاهيو ۽ چونڊيو Enable auto-importجڏهن اهو خيال اهو مشورو ڏئي ٿو. انهي جي مهرباني، هر دفعي اسان POM فائل ۾ ڪا به تبديلي آڻيندا آهيون (پروجيڪٽ آبجیکٹ ماڊل، هي فائل Maven پروجيڪٽ جي پوري ڍانچي کي بيان ڪري ٿو)، هر شيء فوري طور تي خودڪار طريقي سان پروجيڪٽ تي لاڳو ٿيندي. لائبريريون اسان جي مقامي مخزن مان ورتي وينديون جيڪڏهن اسان وٽ اڳ ۾ ئي آهن، يا جيڪڏهن اسان ڪجهه نوان انحصار استعمال ڪريون ٿا جن سان اسان اڳ ۾ معاملو نه ڪيو آهي، Maven صرف انهن کي انٽرنيٽ ذريعي مرڪزي ذخيري مان ڊائون لوڊ ڪندو. Maven وٽ پڻ هڪ فنڪشن آهي ذريعن ۽ دستاويزن کي ڊائون لوڊ ڪرڻ (ڊائون لوڊ ذريعن ۽ / يا دستاويز). اهو پڻ تمام آسان آهي، جيڪڏهن ڪجهه ڪجهه طبقي يا طريقي سان واضح نه آهي، توهان ڪري سگهو ٿا سورس ڪوڊ ۽ ڏسو ته اهو سڀ ڪجهه اندر ڪيئن ڪم ڪري ٿو. اچو ته ڪجهه تفصيل شامل ڪريون. هي هڪ ويب ايپليڪيشن هوندي ۽ اسان استعمال ڪنداسين Tomcat . Tomcat تي هڪ ايپليڪيشن کي ترتيب ڏيڻ لاء، توهان کي ان کي منتقل ڪرڻ جي ضرورت آهي جنگي آرڪائيو جي صورت ۾ (ويب ايپليڪيشن ريسورس، ويب ايپليڪيشنن لاء هڪ خاص فارميٽ). هن کي ڪرڻ لاء، هيٺين لائن کي POM فائل ۾ شامل ڪريو ته جيئن ايپليڪيشن کي جنگ جي آرڪائيو ۾ مرتب ڪيو وڃي.
<packaging>war</packaging>
خير، توھان کي ويب ذريعن لاءِ خاص ڊاريڪٽري جي ضرورت پوندي، اسان جي صورت ۾ اتي ھوندا jsp صفحا ۽ ڪجھ ويب وسيلا. اچو ته هڪ mainڊاريڪٽري ٺاهي webapp. mainان کي بلڪل ائين ئي سڏيو وڃي ٿو ۽ بلڪل ساڳيءَ طرح واقع هجي java، resourcesڇاڪاڻ ته هي معياري Maven ڊاريڪٽري ڍانچي آهي. هڪ دفعو اسان پيڪيج کي انسٽال ڪيو war۽ اهڙي طرح اهو طئي ڪيو ته هي هڪ ويب پروجيڪٽ آهي، ڊاريڪٽري webappخودڪار طريقي سان ويب ايپليڪيشن ذريعن جي طور تي نشان لڳل هوندي (ان تي هڪ نيري نقطي هوندي) ۽ ويب سان لاڳاپيل هر شيء هن فولڊر ۾ ڳولهي ويندي. ۽ هڪ لمحو. ڊفالٽ طور، Maven ٻولي ورزن 1.5 استعمال ڪري ٿو، پر مان استعمال ڪرڻ چاهيان ٿو، مثال طور، ورجن 1.8 - جاوا 8 (توهان وٺي سگهو ٿا 10، يا 11، پر اڃا تائين ڪو به منصوبو ناهي ته اتان کان ڪي به خاصيتون استعمال ڪرڻ لاءِ، تنهن ڪري ان کي 8 ٿيڻ ڏيو. ). اهو تمام آسانيءَ سان حل ٿي سگهي ٿو، اسان گوگل ۾ ڪجهه لکندا آهيون جهڙوڪ “Maven java 8” ۽ ڏسو ته POM فائل ۾ ڇا شامل ڪرڻ جي ضرورت آهي ته جيئن Maven اسان جي ڪلاسن کي گهربل ورزن لاءِ گڏ ڪري. نتيجي طور، اسان وٽ ھيٺيون آھن: Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 3

بهار MVC ڪنيڪشن

توهان کي ڪٿي شروع ڪرڻو پوندو. منصوبي جي مطابق، اسان ڊيٽابيس کي ڳنڍينداسين ۽ استعمال ڪنداسين Hibernate، پر اهو سڀ ڪجهه هاڻي لاء تمام گهڻو خوفناڪ آهي. اسان کي پهريان ڪجهه آسان ڪرڻ جي ضرورت آهي. اسپرنگ MVC، اهو اڳ ۾ ئي بهتر آهي، اسان هڪ ڊگهي وقت تائين MVC نموني سان واقف آهيون، اهو ڪورس جي وڏي ڪمن جي اڌ ۾ استعمال ڪيو ويو. اتان ئي ناچ شروع ڪنداسين. اسپرنگ MVC سان هڪ ويب ايپليڪيشن ٺاهڻ لاءِ، اسان کي به هڪ Servlet-API جي ضرورت آهي، يعني. اها شيءِ جنهن جي مدد سان درخواست-جواب واري ڳالهه ٻولهه ٿيندي. اچو ته هن کي ڳنڍڻ جي ڪوشش ڪريون. اسان گوگل ڏانھن وڃون ٿا، Maven مخزن ۾ ضروري انحصار ڳوليو ۽ انھن کي شامل ڪريو pom.xml. Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 4ٻاهرين لائبريرين جي حصي ۾ توهان ڏسي سگهو ٿا ته نه صرف اسپرنگ-webmvc لوڊ ڪيو ويو ، پر ٻين شين جو هڪ گروپ پڻ. اهي. اسان کي اضافي طور تي اسپرنگ ڪور ، حوالن ، لوبيا وغيره لاءِ انحصار شامل ڪرڻ جي ضرورت ناهي. جنهن جي اسان کي ضرورت آهي، هر شيءِ جيڪا اسان کي گهربل هئي سا گڏ ڪئي وئي spring-webmvc .

اسان کي هڪ ننڍڙو اعلان ڪرڻ جي ضرورت آهي. اهو عام طور تي سفارش ڪئي وئي آهي ته اڃا تائين استعمال ٿيل هر لائبريري لاء الڳ الڳ انحصار شامل ڪيو وڃي، جيتوڻيڪ اهي اڳ ۾ ئي شامل ٿيل آهن، ڇاڪاڻ ته هي مدد ڪري سگهي ٿو ڪجهه مسئلن ۽ غلطين کان بچڻ ۾.

هڪ سادي مثال. اچو ته چوندا آهيون ته اسان هڪ انحصار شامل ڪيو آهي جيڪو ڪجهه API استعمال ڪري ٿو، ۽ ساڳئي وقت اهو هن API لاء ڪجهه قسم جي عمل درآمد ڪندو. ۽ پوءِ اسان هڪ ٻيو انحصار شامل ڪيو جيڪو ساڳيو API استعمال ڪري ٿو ۽ ان لاءِ ڪجهه عمل درآمد پڻ ڪري ٿو، پر هن ڀيري اهو مختلف آهي. ان ڪري، اسان وٽ ساڳئي API جا 2 مختلف عمل ٿيندا. ۽ جيڪڏهن اسان پاڻ هن API جا ڪي طريقا ڪٿي ڪٿي استعمال ڪرڻ چاهيون ٿا، ته پوءِ هڪ مسئلو پيدا ٿيندو، ڇاڪاڻ ته سسٽم کي خبر نه هوندي ته ڪهڙي عمل کي استعمال ڪرڻو آهي، اهو بي ترتيب چونڊيندو، شايد نه جنهن جي اسان توقع ڪئي هئي. ۽ جيڪڏھن توھان واضح طور تي ھڪڙي عمل جي ھڪڙي انحصار کي بيان ڪريو، پوء ان کي ترجيح ڏني ويندي.

بهرحال، اها ڪا اهڙي سخت سفارش ناهي؛ اهو خاص طور تي وڏن منصوبن تي لاڳو ٿئي ٿو جتي مختلف ڪمپنين جون ڪيتريون ئي مختلف لائبريريون استعمال ٿين ٿيون. اسان هتي اهو نه ڪنداسين، جيئن ته POM فائل کي تمام گهڻو لوڊ نه ڪيو وڃي؛ ڪا به پريشاني جي توقع ناهي. پر ان جي باوجود، اهو اڃا تائين ذهن ۾ رکڻ جي قابل آهي.

هڪ وڌيڪ نوٽ. مطلب ڇا آھي providedانحصار ڇا آھي javax.servlet-api؟ دائرو انحصار جو دائرو آهي، providedجنهن جو مطلب آهي ته انحصار ايپليڪيشن کي گڏ ڪرڻ ۽ جانچ ڪرڻ جي مرحلي ۾ موجود هوندو، پر ان کي محفوظ نه ڪيو ويندو. حقيقت اها آهي ته ايپليڪيشن کي ترتيب ڏيڻ لاءِ اسان هڪ سروليٽ ڪنٽينر، ٽامڪٽ استعمال ڪنداسين، ۽ ان ۾ اڳ ۾ ئي اهڙيون لائبريريون موجود آهن، تنهنڪري انهن کي اتي منتقل ڪرڻ ۽ آرڪائيو تي غير ضروري لوڊ ڪرڻ جي ڪا ضرورت ناهي. اڳتي ڏسي رهيا آهيون، ساڳئي سبب لاء اسان عام طريقي جي بغير ڪنداسين 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;
    }
}
ڳالهه ڪهڙي آهي؟ اسپرنگ MVC کي هڪ شيءِ سڏيو آهي DispatcherServlet. هي مکيه ڪنٽرولر وانگر آهي، سڀئي ايندڙ درخواستون ان جي ذريعي گذري ٿو ۽ اهو پوء انهن کي هڪ مخصوص ڪنٽرولر ڏانهن منتقل ڪري ٿو. تشريح @Controllerصرف اسپرنگ MVC کي ٻڌائي ٿي ته هي طبقو هڪ ڪنٽرولر آهي (سٺو، عام طور تي منطقي)، موڪليندڙ تشريح کي جانچيندو @RequestMappingته مناسب طريقي سان سڏڻ لاءِ. تشريح @RequestMappingتوهان کي ڪنٽرولر طريقن لاء ايڊريس مقرر ڪرڻ جي اجازت ڏئي ٿي، جنهن جي ذريعي اهي ڪلائنٽ (براؤزر) ۾ موجود هوندا. اهو پڻ لاڳو ڪري سگهجي ٿو ڪنٽرولر ڪلاس کي سيٽ ڪرڻ لاء، تنهنڪري ڳالهائڻ لاء، سڀني طريقن لاء روٽ پتو. طريقي جو allFilms()پيٽرولر value"" تي مقرر ڪيو ويو آهي /، تنهنڪري اهو فوري طور تي سڏيو ويندو جڏهن ميلاپ http://host:port/ برائوزر ۾ داخل ڪيو ويندو (يعني، ڊفالٽ طور تي اهو آهي http://localhost:8080/ يا http 127.0 .0.1:8080/ ). پيٽرولر methodبيان ڪري ٿو ته ڪهڙي قسم جي درخواست جي حمايت ڪئي وئي آهي (GET، POST، PUT، وغيره). هتي کان وٺي اسان صرف ڊيٽا حاصل ڪندا آهيون، GET استعمال ڪيو ويندو آهي. بعد ۾، جڏهن شامل ڪرڻ ۽ ايڊٽ ڪرڻ جا طريقا ظاهر ٿيندا، اتي اڳ ۾ ئي پوسٽ جون درخواستون هونديون. (انهي سان، هڪ تشريح جي بدران @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;
    }
}
@Configurationbeanاسپرنگ کي ٻڌائي ٿو ته هي ڪلاس هڪ ترتيب وارو ڪلاس آهي ۽ ان ۾ جزن جي تعريف ۽ انحصار شامل آهي . ڀاڄيون شيون آهن جيڪي بهار طرفان منظم ڪيون وينديون آهن. تشريح کي بيان ڪرڻ لاء استعمال ڪيو ويندو آهي @Bean. @EnableWebMvcتوهان کي بهار جي ايم وي سي ترتيبن کي درآمد ڪرڻ جي اجازت ڏئي ٿي 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};
    }
خير، سڀڪنھن شيء کي قائم ڪرڻ لڳي، توهان ان کي هلائڻ جي ڪوشش ڪري سگهو ٿا ۽ ڏسو ته ڇا ٿئي ٿو. رن -> رن -> ترتيبن ۾ ترميم ڪريو -> نئين ترتيب شامل ڪريو -> Tomcat سرور -> Local Next، توھان کي ترتيب ڏيڻ لاءِ ھڪڙي نموني چونڊڻ جي ضرورت آھي. اهو خيال پاڻ کي هڪ اشارو ڏيندو خبردار: ڪوبه نمونو مقرر ڪرڻ لاء نشان نه آهي . فڪس بٽڻ تي ڪلڪ ڪريو ۽ چونڊيو ...: جنگ ڌماڪو . يا توهان وڃڻ ڪري سگهو ٿا تعیناتي -> شامل ڪريو -> آرٽيڪل -> ...: جنگ جو ڌماڪو ٿيو . ۽ توهان کي به وڃڻ جي ضرورت آهي DeploymentЗнакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 5 ڏانهن ۽ سيٽ ڪريو Applecation context فيلڊ (هي url پتي جو حصو هوندو جتي ايپليڪيشن برائوزر ۾ موجود هوندي) کي " ". پوءِ اسان جي ايپليڪيشن 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;
    }
ھاڻي اسان ھن اعتراض کي پنھنجي صفحي تي ڏيکاري سگھون ٿا. هيلو ورلڊ جي بدران films.jspاسان لکنداسين ${film}۽ انتساب جي نالي سان لاڳاپيل اعتراض " film" هتي تبديل ڪيو ويندو. اچو ته ان کي هلائڻ جي ڪوشش ڪريون ۽ ڏسو ته ڇا ٿيو (آبجڪٽ جي صاف آئوٽ لاءِ، ڪلاس کي Filmٻيهر بيان ڪيو ويو toString()):
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 9

ماڊل-ڏسو-ڪنٽرولر

هن مرحلي تي، اسان وٽ اڳ ۾ ئي لڳي ٿو هڪ مڪمل اسپرنگ 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 ۽ پهرين CRUD ايپليڪيشن (حصو 3) تعارف Maven، Spring، MySQL، Hibernate ۽ پهرين CRUD ايپليڪيشن (حصو 4)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION