JavaRush /Java Blogu /Random-AZ /Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə gir...
Макс
Səviyyə

Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə)

Qrupda dərc edilmişdir
Günortanız Xeyir. Bu yazıda sadə CRUD tətbiqi yaratma prosesində Maven, Spring, Hibernate, MySQL və Tomcat kimi şeylərlə ilk tanışlığımı bölüşmək istərdim. Bu, 4-cü hissənin birinci hissəsidir. Məqalə ilk növbədə burada 30-40 səviyyəni tamamlamış, lakin hələ təmiz Java-dan kənara çıxmamış və açıq dünyaya yeni başlayanlar (və ya başlamaq üzrə olanlar) üçün nəzərdə tutulub. bütün bu texnologiyalar, çərçivələr və digər tanış olmayan sözlər. Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 1

Məzmun:

Giriş

İstifadə olunduğu müxtəlif nümunələri öyrənməklə mənim üçün yeni olan texnologiyalar və çərçivələrlə tanış olmağa başladım, çünki adətən tam hüquqlu bir tətbiq nümunəsindən istifadə edərək bir şeyi hərəkətdə görəndə daha yaxşı başa düşürəm. Tipik olaraq, belə nümunələr CRUD proqramlarıdır ( C reate, Read , U pdate, D elete), İnternet müxtəlif mürəkkəblik dərəcələrinin belə nümunələri ilə doludur. Problem ondadır ki, onlar adətən orada necə, nə və nə üçün edildiyini, niyə filan asılılığın əlavə edildiyini, filan sinfin nə üçün lazım olduğunu və s. Əksər hallarda, onlar son POM faylı ilə, dərslərin son versiyaları ilə tamamilə bitmiş bir proqram qəbul edirlər və təcrübəli bir insana yəqin ki, aydın görünən xırda şeylərə diqqət yetirmədən sadəcə hər birini keçirlər. Mən bir çox belə nümunələrə baxdım və adətən hər şeyin necə işlədiyi aydın olur, lakin onların buna necə gəldiyi tam aydın deyil. Buna görə də, belə bir nümunənin təcrübəli bir tərtibatçının mövqeyindən deyil, Bahar, Hibernate və digər şeylərlə heç vaxt məşğul olmayan bir başlanğıc mövqeyindən faydalı olacağına qərar verdim.
Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 2
Ən sadə Salam Dünya səviyyəsində bir şeydən başlayaraq, CRUD tətbiqi yaratmaq üçün bütün yolumu mümkün qədər ətraflı təsvir etməyə çalışacağam (anlayışım imkan verdiyi qədər). Əvvəla, bunu özüm üçün edirəm, çünki siz nəyisə təsvir etməyə, danışmağa, izah etməyə çalışdığınız zaman o, beyninizdə daha yaxşı mənimsənilir və təşkil olunur. Ancaq bu kiməsə faydalı olarsa və nəyisə anlamağa kömək edərsə, mən çox şad olaram. Bu misalda gəlin Maven , Tomcat , Spring , HibernateMySQL istifadə edərək sadə CRUD tətbiqi yaratmağa çalışaq . İlkin addımlar, məsələn, Maven , MySQL quraşdırmaq , ideyanın Ultimate versiyasından istifadə etmək və s. Məncə, ətraflı təsvir etməyə ehtiyac yoxdur, bununla bağlı heç bir problem olmamalıdır. Qeyd etmək lazımdır ki, bu nümunədə konfiqurasiya xml istifadə etmədən Java siniflərindən (JavaConfig adlanır) istifadə edilməklə konfiqurasiya ediləcək.

Layihənin yaradılması

Beləliklə, mən yeni olduğum üçün heç bir qaranlıq arxetiplərdən istifadə etməyəcəyik. Spring initializr hələ də çox qorxulu səslənir. Buna görə də ən adi sadə Maven layihəsini yaradacağıq. Mənim domen adım yoxdur, ona görə də groupid-də sadəcə yazacağam testgroupvə artefaktda adı yazacam, məsələn, filmography(bu filmlərin siyahısı olacaq). Biz layihə yaradırıq və Enable auto-importideya nə vaxt təklif edirsə, onu seçirik. Bunun sayəsində hər dəfə POM faylına hər hansı dəyişiklik etdikdə (Project Object Model, bu fayl Maven layihəsinin bütün strukturunu təsvir edir), hər şey dərhal avtomatik olaraq layihəyə tətbiq olunacaq. Əgər bizdə artıq varsa, kitabxanalar yerli depomuzdan götürüləcək və ya əvvəllər məşğul olmadığımız bəzi yeni asılılıqlardan istifadə etsək, Maven onları sadəcə mərkəzi repozitoriyadan İnternet vasitəsilə endirəcək. Maven həmçinin mənbələri və sənədləri yükləmək funksiyasına malikdir (Mənbələri və/və ya Sənədləri yükləyin). Bu, həm də çox rahatdır, əgər hansısa sinif və ya metodda bir şey aydın deyilsə, mənbə koduna daxil olub hamısının içəridə necə işlədiyini görə bilərsiniz. Bir-iki təfərrüat əlavə edək. Bu veb tətbiqi olacaq və biz Tomcat istifadə edəcəyik . Bir tətbiqi Tomcat-a yerləşdirmək üçün onu müharibə arxivi şəklində ora köçürməlisiniz (Veb Tətbiq Resursu, veb proqramları üçün xüsusi format). Bunu etmək üçün POM faylına aşağıdakı sətri əlavə edin ki, proqram müharibə arxivinə yığılsın:
<packaging>war</packaging>
Yaxşı, veb mənbələr üçün xüsusi bir kataloqa da ehtiyacınız olacaq, bizim vəziyyətimizdə jsp səhifələri və bəzi veb resursları olacaq . mainBir kataloq yaradaq webapp. Tam olaraq belə adlandırılmalı və ilə eyni mainşəkildə yerləşməlidir java, resourcesçünki bu standart Maven kataloq strukturudur. Paketi quraşdırdıqdan warvə bununla da bunun veb layihəsi olduğunu müəyyən etdikdən sonra kataloq webappavtomatik olaraq Veb proqram mənbələri kimi qeyd olunacaq (onda mavi nöqtə olacaq) və internetlə əlaqəli hər şey bu qovluqda axtarılacaq. Və bir an. Varsayılan olaraq, Maven dil versiyası 1.5-dən istifadə edir, lakin mən, məsələn, 1.8 - Java 8 versiyasından istifadə etmək istəyirəm (10 və ya 11-i götürə bilərsiniz, lakin hələ də oradan heç bir funksiyadan istifadə etmək planları yoxdur, ona görə də 8 olsun. ). Bunu çox sadə şəkildə həll etmək olar, biz Google-da “Maven java 8” kimi bir şey yazırıq və POM faylına nə əlavə etmək lazım olduğunu görürük ki, Maven tələb olunan versiya üçün dərslərimizi tərtib etsin. Nəticədə, biz aşağıdakıları əldə edirik: Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 3

Yay MVC bağlantısı

Bir yerdən başlamaq lazımdır. Plana görə, verilənlər bazasını birləşdirəcəyik və Hibernate-dən istifadə edəcəyik, lakin bütün bunlar hələlik bir az qorxulu səslənir. Əvvəlcə daha sadə bir şey etməliyik. Spring MVC, bu artıq daha yaxşıdır, MVC nümunəsi ilə çoxdan tanışıq, kursun böyük tapşırıqlarının yarısında istifadə edilmişdir. Buradan rəqs etməyə başlayacağıq. Spring MVC ilə veb tətbiqi yaratmaq üçün bizə Servlet-API də lazımdır, yəni. onun köməyi ilə sorğu-cavab qarşılıqlı əlaqəsinin baş tutacağı şey. Bunu birləşdirməyə çalışaq. Google-a gedirik, Maven deposunda lazımi asılılıqları axtarırıq və onları pom.xml. Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 4Xarici Kitabxanalar bölməsində siz yalnız spring-webmvc-nin deyil , həm də bir çox başqa şeylərin yükləndiyini görə bilərsiniz. Bunlar. yaz nüvəsi , kontekst , lobya və s. üçün asılılıqları əlavə etməyə ehtiyacımız yoxdur. bizə lazım olan hər şey spring-webmvc ilə birlikdə çəkildi .

Kiçik bir imtina etməliyik. İstifadə olunan hər bir kitabxana üçün asılılıq əlavə etmək tövsiyə olunur, hətta onlar artıq əlavə olunmuşlarla birlikdə yığılsa belə, çünki bu, bəzi problemlərdən və nasazlıqlardan qaçmağa kömək edə bilər.

Sadə bir misal. Deyək ki, biz bəzi API-dən istifadə edən bir asılılıq əlavə etdik və eyni zamanda bu API üçün bir növ həyata keçirəcək. Və sonra biz eyni API-dən istifadə edən başqa bir asılılıq əlavə etdik və bunun üçün tətbiqinin bir hissəsini çəkdik, lakin bu dəfə fərqlidir. Beləliklə, eyni API-nin 2 fərqli tətbiqinə sahib olacağıq. Və əgər biz özümüz bu API-nin bəzi üsullarını haradasa istifadə etmək istəsək, onda problem yaranacaq, çünki sistem hansı tətbiqdən istifadə edəcəyini bilməyəcək, təsadüfi seçəcək, bəlkə də gözlədiyimiz kimi deyil. Tətbiqlərdən biri üçün bir asılılığı açıq şəkildə göstərsəniz, ona üstünlük veriləcəkdir.

Ancaq bu, o qədər də ciddi tövsiyə deyil, əsasən müxtəlif şirkətlərin bir çox müxtəlif kitabxanalarının istifadə olunduğu böyük layihələrə aiddir. POM faylını çox yükləməmək üçün burada bunu etməyəcəyik; heç bir problem gözlənilmir. Ancaq buna baxmayaraq, bunu hələ də yadda saxlamağa dəyər.

Daha bir qeyd. providedasılı nə deməkdir javax.servlet-api? Əhatə dairəsi asılılığın əhatə dairəsidir, providedbu o deməkdir ki, asılılıq proqramın tərtib edilməsi və sınaqdan keçirilməsi mərhələsində mövcud olacaq, lakin o, arxivləşdirilməyəcək. Fakt budur ki, tətbiqi yerləşdirmək üçün biz Tomcat servlet konteynerindən istifadə edəcəyik və onun içərisində artıq belə kitabxanalar var, ona görə də onları ora köçürməyə və arxivi lazımsız yüklə yükləməyə ehtiyac yoxdur. İrəliyə baxsaq, eyni səbəbdən biz adi üsul olmadan edəcəyik main, çünki o, Tomcat daxilində artıq mövcuddur.

Səhifələrin və Nəzarətçinin yaradılması

İndi sadə bir şey bişirməyə çalışaq. Birincisi, əlavə bir kataloq yaradaq webapp, məsələn pages, baxışlarımızın saxlanacağı, yəni. jsp səhifələrini seçin və bir neçə səhifə yaradın. Gələcəkdə filmlərin siyahısının nümayiş olunacağı bir səhifəyə ehtiyacımız olacaq, məsələn films.jsp, və bəlkə redaktə üçün ayrıca bir səhifə yarada bilərik editPage.jsp. Hələlik onları ciddi bir şeylə doldurmayacağıq; sadəcə sınaq üçün bir səhifədə digərinə keçid edəcəyik. İndi bizə sorğuları emal edəcək bir sinif lazımdır, yəni. nəzarətçi. Gəlin yeni paket əlavə edək controllervə orada bir sinif yaradaq FilmController(ümumiyyətlə, hər şeyi müxtəlif paketlərdə paketləmək lazım deyil, bu proqram çox kiçik və sadə olacaq, lakin normal bir layihədə çoxlu kontrollerlər, konfiqurasiya sinifləri, modellər ola bilər. və s., buna görə də kiçik layihələrdən başlayaraq, qarışıqlıq olmaması üçün dərhal hər şeyi nizamlı və strukturlaşdırılmış şəkildə etməyə alışmaq daha yaxşıdır). Bu sinifdə sorğulara cavab olaraq fikirlərimizi qaytaracaq üsullar yaradacağıq.
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;
    }
}
Nə mənası var? Spring MVC adlı bir şey var DispatcherServlet. Bu, əsas nəzarətçi kimidir, bütün daxil olan sorğular ondan keçir və sonra onları xüsusi nəzarətçiyə ötürür. Annotasiya @Controllersadəcə Spring MVC-yə deyir ki, bu sinif bir nəzarətçidir (yaxşı, ümumiyyətlə məntiqlidir), dispetçer @RequestMappingmüvafiq metodu çağırmaq üçün annotasiyaları yoxlayacaq. Annotasiya @RequestMappingnəzarətçi metodları üçün ünvanlar təyin etməyə imkan verir ki, bu da onların müştəridə (brauzerdə) mövcud olmasıdır. O, həmçinin bütün metodlar üçün kök ünvanını təyin etmək üçün nəzarətçi sinfinə tətbiq oluna bilər. Metod üçün allFilms()parametr value" " olaraq təyin edilib , ona görə də brauzerə http://host:port// kombinasiyası daxil edildikdə dərhal çağırılacaq (yəni, standart olaraq http://localhost:8080/ və ya http- dir. ://127.0 .0.1:8080/ ). Parametr hansı növ sorğunun dəstəkləndiyini müəyyən edir (GET, POST, PUT və s.). Burada yalnız məlumat qəbul etdiyimiz üçün GET istifadə olunur. Daha sonra əlavə və redaktə üsulları görünəndə artıq POST sorğuları olacaq. (Yeri gəlmişkən, metodu göstərən annotasiya əvəzinə annotasiyalardan və s. ekvivalent olaraq istifadə edə bilərsiniz ) ) . Metodlarımızda biz obyekt yaradırıq və geri qaytarılmalı olan görünüşün adını təyin edirik. method@RequestMapping@GetMapping@PostMapping@GetMapping@RequestMapping(method = RequestMethod.GETModelAndView

Konfiqurasiya

Konfiqurasiyanın qurulmasına keçək. Paketdə configbir sinif yaradaq WebConfig. O, tipli obyekti qaytaran yalnız bir metoda malik olacaq ViewResolver, bu adla təmsili tapmaq üçün lazım olan interfeysdir.
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;
    }
}
@ConfigurationSpring-ə deyir ki, bu sinif konfiqurasiya sinfidir və beankomponentlərin tərifləri və asılılıqlarını ehtiva edir. Fasulye Bahar tərəfindən idarə olunan obyektlərdir. Annotasiya lobya müəyyən etmək üçün istifadə olunur @Bean. @EnableWebMvcSpring MVC konfiqurasiyasını idxal etməyə imkan verir WebMvcConfigurationSupport. Siz həmçinin, məsələn, WebMvcConfigurerbir çox metodları olan bir interfeys tətbiq edə və hər şeyi öz zövqünüzə uyğunlaşdıra bilərsiniz, lakin buna hələ girmək lazım deyil, standart parametrlər kifayət edəcəkdir. @ComponentScanBahara idarə etməli olduğu komponentləri harada axtarmaq lazım olduğunu bildirir, yəni. annotasiya @Componentvə ya onun törəmələri ilə işarələnmiş siniflər @Controller, @Repository, @Service. Bu qeydlər avtomatik olaraq sinif paxlasını müəyyən edir. Metodda viewResolver()biz onun həyata keçirilməsini yaradırıq və təqdimatların harada axtarılacağını müəyyənləşdiririk webapp. Buna görə də, nəzarətçi metodunda " " adını təyin etdikdə filmsgörünüş " " olaraq tapılacaq. /pages/films.jspDeməli, konfiqurasiya sinifimiz var, lakin hələlik bu, sadəcə bir növ ayrıca sinifdir, tətbiqimizə heç bir şəkildə təsir göstərmir. . Bu konfiqurasiyanı Bahar kontekstində qeydiyyatdan keçirməliyik. Bunun üçün bir sinif lazımdır AbstractAnnotationConfigDispatcherServletInitializer. Paketdə biz onun varisini, deyək ki, AppInitializerconfig yaradırıq və onun üsullarını həyata keçiririk.
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[]{"/"};
    }
}
Sonuncu üsul ünvanları qeyd edir və konfiqurasiya siniflərinin qeydiyyatı üçün daha 2 üsul var. Veb konfiqurasiyaları, burada ViewResolver's və buna bənzərlər müəyyən edilir getServletConfigClasses(). Bütün bunlar haqqında sənədlərdə və müxtəlif təlimatlarda oxumaq daha yaxşıdır, amma bizim vəziyyətimizdə hələ bunu araşdırmaq lazım deyil, bizimkilər, WebConfigprinsipcə, RootClasseshər ikisində müəyyən edilə bilər, hətta hər ikisini birdən təyin edə bilərsiniz, yenə də işləyəcək . Daha bir şey. Formadan rus simvolları ilə dəyərlər göndərildikdə, nəticə cızıqlar olduqda kodlaşdırma ilə bağlı problemlər yarana bilər. Bu problemi həll etmək üçün sorğuları əvvəlcədən emal edəcək filtr əlavə edəcəyik. AppInitializer sinfinə gedirik və istədiyiniz kodlaşdırmanı göstərdiyimiz metodu ləğv edirik getServletFilters, o, əlbəttə ki, səhifələrdə və verilənlər bazasında olduğu kimi hər yerdə olduğu kimi olmalıdır:
protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return new Filter[] {characterEncodingFilter};
    }
Yaxşı, hər şey qurulmuş kimi görünür, onu işə salıb nə baş verdiyini görə bilərsiniz. Çalıştır -> Çalıştır -> Konfiqurasiyaları redaktə et -> Yeni Konfiqurasiya əlavə et -> Tomcat Server -> Yerli Sonra, yerləşdirmək üçün artefakt seçməlisiniz. İdeyanın özü bir ipucu verəcək Xəbərdarlıq: Yerləşdirmə üçün heç bir artefakt qeyd edilməyib . Düzəliş düyməsini basın və seçin ...: müharibə partladı . Və ya gedə bilərsiniz Yerləşdirmə -> əlavə et -> Artifakt -> ...: war exploded . Və siz həmçinin YerləşdirməyəMaven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 5 getmək və Applecation kontekst sahəsini (bu, tətbiqin brauzerdə mövcud olacağı url ünvanının bir hissəsi olacaq) " " olaraq təyin etməlisiniz. Sonra tətbiqimiz dərhal http://localhost:8080/ ünvanında mövcud olacaq (lakin siz orada bir şey də təyin edə bilərsiniz, məsələn, " " və sonra bunu bütün ünvanlara əlavə etməlisiniz, yəni məsələn, olmayacaq. " http://localhost:8080/edit" , lakin "http://localhost:8080/filmography/edit" olacaq ). Run düyməsini basın və başlayana qədər gözləyin. Aldığım budur: Hər şey yaxşı görünür, amma bir xəbərdarlıq var. Məsələ burasındadır ki, səhifələrimiz artıq ictimaiyyət üçün açıqdır və ünvan çubuğuna yolu yazmaqla birbaşa daxil olmaq olar. Biz http://localhost:8080/pages/films.jsp-ə daxil oluruq və indi səhifəmizi nəzarətçinin xəbəri olmadan almışıq. Nədənsə bu çox düzgün deyil, buna görə də xüsusi bir kataloq yaradacağıq . İçəridə olanlar ictimaiyyətdən gizlənəcək və yalnız nəzarətçi vasitəsilə əldə edilə bilər. Görünüşlərimizin olduğu kataloqu ( ) içərisinə yerləşdiririk və müvafiq olaraq onu prefiksə əlavə edirik: /Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 6/filmographyMaven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 7webappWEB-INFpagesWEB-INFViewResolver
viewResolver.setPrefix("/WEB-INF/pages/");
İndi biz səhifəmizi http://localhost:8080 ünvanında əldə edirik, lakin birbaşa http://localhost:8080/WEB-INF/pages/films.jsp- ə cəhd etsək, 404 xətası alırıq. Yaxşı, əladır, bizdə ən sadə veb tətbiqi, necə deyərlər, Salam Dünya. Layihənin strukturu hazırda belə görünür:
Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 8

Model

Artıq baxışlarımız və nəzarətçimiz var, lakin MVC-də 3-cü hərf də var, ona görə də şəkli tamamlamaq üçün model də əlavə edəcəyik. Paketdə, məsələn, aşağıdakı sahələrlə modelbir sinif yaradaq : , (başlıq), (buraxılış ili), (janr) və (yəni, bu filmə artıq baxmısınız və ya yox). Filmint idString titleint yearString genreboolean 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
}
Xüsusi bir şey yoxdur, sadəcə adi bir sinif, özəl sahələr, alıcılar və təyinatçılar. Belə siniflərin obyektləri də adlanır POJO(Plain Old Java Object), yaxşı, yəni. "sadə java obyekti". İndi belə bir obyekt yaratmağa və onu səhifədə göstərməyə çalışaq. Hələlik onu necə yaratmaq və işə salmaq barədə çox narahat olmayacağıq. Bunu sınamaq üçün gəlin onu birbaşa nəzarətçidə axmaqcasına yaradaq, məsələn:
public class FilmController {
    private static Film film;

    static {
        film = new Film();
        film.setTitle("Inception");
        film.setYear(2010);
        film.setGenre("sci-fi");
        film.setWatched(true);
    }
ModelAndViewVə metoddan istifadə edərək bu obyekti bizimkinə əlavə edin addObject:
@RequestMapping(method = RequestMethod.GET)
    public ModelAndView allFilms() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        modelAndView.addObject("film", film);
        return modelAndView;
    }
İndi biz bu obyekti səhifəmizdə göstərə bilərik. Hello World əvəzinə films.jspbiz yazacağıq ${film}və atribut adına uyğun olan obyekt filmburada " " əvəz olunacaq. Gəlin onu işə salmağa çalışaq və nə baş verdiyini görək (obyektin aydın çıxışı üçün sinif Filmyenidən təyin olundu toString()):
Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 9

Model-View-Nəzarətçi

Bu mərhələdə artıq tam hüquqlu Spring MVC tətbiqimiz var. Davam etməzdən əvvəl hər şeyə bir daha nəzər salmaq və hər şeyin necə işlədiyini anlamaq yaxşı olardı. İnternetdə bununla bağlı çoxlu şəkil və diaqram tapa bilərsiniz, mən bunu bəyənirəm:
Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinə giriş (1-ci hissə) - 10
Brauzer xəttinə sorğu yazdıqda, o, qəbul edilir Dispatcher Servlet, sonra o, bu sorğudan istifadə edərək emal etmək üçün uyğun nəzarətçi tapır HandlerMapping(bu, nəzarətçi seçmək üçün interfeysdir, mövcud nəzarətçilərdən hansının belə bir ünvanı qəbul edən metodu olduğunu yoxlayır) , uyğun metodu çağırır və Controllergörünüş haqqında məlumatı qaytarır, sonra dispetçer ViewResolver'a-dan istifadə edərək istədiyi görünüşü tapır, bundan sonra model məlumatları bu görünüşə ötürülür və biz çıxış kimi səhifəmizi alırıq. Bu kimi bir şey. Davamı olacaq... Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinin təqdimatı (1-ci hissə) Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqinin təqdimatı (2-ci hissə) Maven, Spring, MySQL, Hibernate və ilk CRUD tətbiqi (3-cü hissə) Maven, Spring, MySQL, Hibernate-ə giriş və ilk CRUD tətbiqi (4-cü hissə)
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION