JavaRush /Блоги Java /Random-TG /Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин б...
Макс
Сатҳи

Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD (қисми 1)

Дар гурӯҳ нашр шудааст
Нимирӯзи ба хайр. Дар ин мақола ман мехоҳам аввалин вохӯрии худро бо чизҳое ба монанди Maven, Spring, Hibernate, MySQL ва Tomcat дар раванди эҷоди як барномаи оддии CRUD мубодила кунам. Ин қисми якуми 4 аст. Мақола асосан барои онҳое пешбинӣ шудааст, ки дар ин ҷо аллакай 30-40 сатҳро хатм кардаанд, вале то ҳол берун аз Java-и холис ҳаракат накардаанд ва ҳоло ба ҷаҳони кушод бо ҳамаи ин технологияҳо, чаҳорчӯбаҳо ва дигар калимаҳои ношинос. Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD (қисми 1) - 1

Мундариҷа:

Муқаддима

Ман шиносоӣ бо технологияҳо ва чаҳорчӯбаҳое, ки барои ман нав буданд, бо омӯхтани мисолҳои гуногун, ки дар онҳо истифода мешуданд, оғоз кардам, зеро одатан ман чизеро беҳтар мефаҳмам, вақте ки ман онро дар амал бо истифода аз мисоли замимаи мукаммал мебинам. Одатан, чунин мисолҳо барномаҳои CRUD мебошанд ( C reate, Read , U pdate, D elete), Интернет пур аз чунин мисолҳои дараҷаҳои гуногуни мураккаб аст. Масъала дар он аст, ки онҳо одатан муфассал шарҳ намедиҳанд, ки чӣ гуна, чӣ гуна ва барои чӣ дар он ҷо анҷом дода шуд, барои чӣ фалон вобастагӣ илова карда шуд, барои чӣ фалон синф лозим аст ва ғайра. Дар аксари мавридҳо, онҳо як барномаи комилан анҷомёфтаро бо файли ниҳоии POM, бо versionҳои ниҳоии дарсҳо мегиранд ва бидуни тамаркуз ба чизҳои хурде, ки ба шахси ботаҷриба маълуманд, танҳо тавассути ҳар яки онҳо мегузаранд. Ман ба бисёр чунин мисолҳо назар кардаам ва одатан маълум аст, ки ҳама чиз чӣ гуна кор мекунад, аммо чӣ гуна онҳо ба ин кор омадаанд, комилан равшан нест. Аз ин рӯ, ман қарор додам, ки чунин як мисол на аз мавқеи таҳиягари ботаҷриба, балки аз мавқеи як навкоре, ки ҳеҷ гоҳ бо Баҳор, Hibernate ва чизҳои дигар сару кор надошта бошад, муфид хоҳад буд.
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 2
Ман кӯшиш мекунам, ки ба қадри имкон муфассал тавсиф кунам (то ҷое ки фаҳмиши ман ба ман имкон медиҳад) тамоми роҳи эҷоди барномаи CRUD-ро аз чизе дар сатҳи соддатарин Hello World оғоз кунам. Пеш аз ҳама, ман ин корро барои худ мекунам, зеро вақте шумо кӯшиш мекунед, ки чизеро тасвир кунед, нақл кунед, шарҳ диҳед, он дар саратон хеле беҳтар ҷаббида ва ба тартиб медарояд. Аммо агар ин барои касе муфид бошад ва ба онҳо дар фаҳмидани чизе кӯмак кунад, ман хеле шод хоҳам шуд. Дар ин мисол, биёед кӯшиш кунем, ки як барномаи оддии CRUD бо истифода аз Maven , Tomcat , Spring , Hibernate ва MySQL эҷод кунем . Қадамҳои пешакӣ ба монанди насб кардани Maven , MySQL , истифодаи versionи ниҳоии идея ва ғайра. Ба фикрам, ба таври муфассал тавсиф кардан лозим нест, дар ин бобат ягон мушкилот набояд бошад. Қобor зикр аст, ки дар ин мисол, конфигуратсия бо истифода аз синфҳои Java (бо номи JavaConfig) бидуни истифодаи xml танзим карда мешавад.

Эҷоди лоиҳа

Ҳамин тавр, азбаски ман навкорам, мо ҳеҷ гуна архетипҳои норавшанро истифода намебарем. initializr баҳор ҳанӯз хеле даҳшатнок садо медиҳад. Аз ин рӯ, мо лоиҳаи оддии Mavenро эҷод хоҳем кард. Ман номи домен надорам, аз ин рӯ дар groupid ман танҳо менависам testgroupва дар artifactid номро менависам, масалан, filmography(ин рӯйхати филмҳо хоҳад буд). Мо лоиҳа эҷод мекунем ва Enable auto-importвақте ки идея онро пешниҳод мекунад, интихоб мекунем. Ба шарофати ин, ҳар дафъае, ки мо ба файли POM ягон тағирот ворид мекунем (Модели Объекти Лоиҳа, ин файл тамоми сохтори лоиҳаи Mavenро тавсиф мекунад), ҳама чиз фавран ба лоиҳа ба таври худкор татбиқ карда мешавад. Китобхонаҳо аз анбори маҳаллии мо гирифта мешаванд, агар мо онҳо аллакай дошта бошем, ё агар мо баъзе вобастагии наверо истифода барем, ки қаблан бо онҳо сарукор надоштем, Maven онҳоро танҳо тавассути Интернет аз анбори марказӣ зеркашӣ мекунад. Maven инчунин функсияи зеркашии манбаъҳо ва ҳуҷҷатҳоро дорад (Сарчашмаҳоро зеркашӣ ва/ё ҳуҷҷатҳо). Он инчунин хеле қулай аст, агар чизе бо ягон синф ё усул равшан набошад, шумо метавонед ба codeи манбаъ равед ва бубинед, ки ҳама дар дохor он чӣ гуна кор мекунанд. Биёед якчанд тафсилот илова кунем. Ин як барномаи веб хоҳад буд ва мо Tomcat -ро истифода хоҳем бурд . Барои ҷойгир кардани барнома ба Tomcat, шумо бояд онро дар шакли бойгонии ҷангӣ ба он ҷо интиқол диҳед (Захираҳои Web Application, формати махсус барои барномаҳои веб). Барои ин, сатри зеринро ба файли POM илова кунед, то барнома дар бойгонии ҷанг ҷамъоварӣ карда шавад:
<packaging>war</packaging>
Хуб, ба шумо инчунин як феҳристи махсус барои манбаъҳои веб лозим мешавад, дар ҳолати мо саҳифаҳои jsp ва баъзе захираҳои веб мавҷуданд . Биёед mainдиректория эҷод кунем webapp. mainОн бояд маҳз ҳамин тавр номида шавад ва дар ҳамон тарз ҷойгир карда шавад java, resourcesзеро ин сохтори феҳристи стандартии Maven аст. Пас аз он ки мо бастаро дар дохor он насб кардем warва ба ин васила муайян кардем, ки ин веб-лоиҳа аст, директория webappба таври худкор ҳамчун манбаи замимаи веб қайд карда мешавад (дар он нуқтаи кабуд вуҷуд хоҳад дошт) ва ҳама чизҳои марбут ба веб дар ин ҷузвдон ҷустуҷӯ карда мешаванд. Ва як лаҳза. Бо нобаёнӣ, Maven versionи забони 1.5-ро истифода мебарад, аммо ман мехоҳам, масалан, versionи 1.8 - Java 8 -ро истифода барам (Шумо метавонед 10 ё 11-ро гиред, аммо ба ҳар ҳол нақшаи истифодаи ягон хусусият аз он ҷо нест, бинобар ин, бигзор он 8 бошад. ). Инро хеле содда ҳал кардан мумкин аст, мо дар Google чизе ба монанди "Maven java 8" менависем ва бубинем, ки ба файли POM чӣ илова кардан лозим аст, то Maven синфҳои моро барои versionи зарурӣ тартиб диҳад. Дар натиҷа, мо инҳоро дорем: Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 3

Пайвастшавӣ баҳори MVC

Шумо бояд аз ҷое оғоз кунед. Тибқи нақша, мо пойгоҳи додаҳоро пайваст мекунем ва Hibernate-ро истифода мебарем, аммо ин ҳама ҳоло каме даҳшатнок аст. Мо бояд пеш аз ҳама як чизи соддатарро анҷом диҳем. Баҳори MVC, ин аллакай беҳтар аст, мо бо намунаи MVC муддати тӯлонӣ шинос будем, он дар нисфи вазифаҳои калони курс истифода шудааст. Аз ин ҷо мо ба рақс шурӯъ мекунем. Барои сохтани веб-барнома бо Spring MVC, мо инчунин ба Servlet-API ниёз дорем, яъне. он чизе, ки бо ёрии он амали мутақобилаи дархосту ҷавоб сурат мегирад. Биёед кӯшиш кунем, ки инро пайваст кунем. Мо ба Google меравем, вобастагии заруриро дар анбори Maven ҷустуҷӯ мекунем ва онҳоро ба pom.xml. Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 4Дар бахши китобхонаҳои беруна шумо мебинед, ки на танҳо spring-webmvc бор карда шудааст , балки як қатор чизҳои дигар низ. Онхое. ба мо лозим нест, ки ба таври илова вобастагиҳоро ба ядрои баҳор , контекст , лӯбиё ва ғайра дохил кунем. ки ба мо лозим аст, дар баробари бахор-webmvc хамаи чизхои зарурй кашида шуданд .

Мо бояд як радди хурде кунем. Одатан тавсия дода мешавад, ки то ҳол барои ҳар як китобхонаи истифодашуда вобастагӣ алоҳида илова карда шавад, ҳатто агар онҳо аллакай бо китобҳои аллакай иловашуда баста шуда бошанд, зеро ин метавонад барои пешгирӣ кардани баъзе мушкилот ва хатогиҳо кӯмак кунад.

Як мисоли оддӣ. Фарз мекунем, ки мо вобастагӣеро илова кардем, ки баъзе API-ро истифода мебарад ва ҳамзамон он як навъ татбиқи ин API-ро ба кор мебарад. Ва он гоҳ мо вобастагии дигареро илова кардем, ки ҳамон API-ро истифода мебарад ва инчунин як қисми татбиқи онро барои ин кор мекунад, аммо ин дафъа он дигар аст. Ҳамин тариқ, мо 2 татбиқи гуногуни ҳамон API хоҳем дошт. Ва агар мо худамон хоҳем, ки баъзе усулҳои ин API-ро дар ҷое истифода барем, пас мушкилот ба миён меояд, зеро система намедонад, ки кадом татбиқро истифода барад, он ба таври тасодуфӣ интихоб мекунад, шояд он чизе, ки мо интизор набудем. Ва агар шумо вобастагии яке аз татбиқҳоро ба таври возеҳ муайян кунед, он гоҳ афзалият ба он дода мешавад.

Аммо, ин тавсияи қатъӣ нест; он асосан ба лоиҳаҳои калон дахл дорад, ки дар он китобхонаҳои гуногуни ширкатҳои гуногун истифода мешаванд. Мо дар ин ҷо ин корро намекунем, то файли POM-ро аз ҳад зиёд бор накунем; ягон мушкилот интизор нест. Аммо бо вуҷуди ин, дар хотир нигоҳ доштан лозим аст.

Боз як ёддошт. providedВобаста ба чӣ маъно дорад javax.servlet-api? Доира доираи вобастагӣ мебошад, providedки маънои вобастагӣ дар марҳилаи тартиб додан ва санҷиши барнома дастрас хоҳад буд, аммо он бойгонӣ нахоҳад шуд. Гап дар он аст, ки барои ҷойгиркунии барнома мо як контейнери сервлети Tomcat-ро истифода хоҳем бурд ва он аллакай дар дохor он чунин китобхонаҳо мавҷуд аст, бинобар ин, интиқоли онҳоро ба он ҷо ва ба бойгонӣ бори нолозим бор кардан лозим нест. Ба пеш нигоҳ карда, бо ҳамин сабаб мо бе усули муқаррарӣ кор хоҳем кард main, зеро он аллакай дар дохor 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;
    }
}
Гап дар чист? Spring MVC дорои чизе бо номи DispatcherServlet. Ин мисли контролери асосӣ аст, ҳама дархостҳои воридотӣ аз он мегузарад ва сипас онҳоро ба контроллери мушаххас мефиристад. Эзоҳ @Controllerтанҳо ба Spring MVC мегӯяд, ки ин синф контроллер аст (хуб, умуман мантиқӣ), диспетчер эзоҳҳоро тафтиш мекунад, @RequestMappingто усули мувофиқро даъват кунад. Эзоҳ @RequestMappingба шумо имкон медиҳад, ки суроғаҳоро барои усулҳои контроллер таъин кунед, ки тавассути онҳо онҳо дар муштарӣ (браузер) дастрас хоҳанд буд. Он инчунин метавонад ба синфи контроллер барои муқаррар кардани суроғаи реша барои ҳама усулҳо истифода шавад. allFilms()Параметри усул valueба " " муқаррар карда шудааст , бинобар ин, вақте ки комбинатсияи http://host:port// дар браузер ворид карда мешавад , фавран даъват карда мешавад (яъне, ба таври нобаёнӣ он http://localhost:8080/ ё http аст. ://127.0 .0.1:8080/ ). Параметр муайян мекунад, ки кадом намуди дархост дастгирӣ мешавад (GET, POST, PUT ва ғайра). Азбаски дар ин ҷо мо танҳо маълумот мегирем, GET истифода мешавад. Баъдтар, вақте ки усулҳои илова ва таҳрир пайдо мешаванд, аллакай дархостҳои POST пайдо мешаванд. (Дар омади гап, ба ҷои эзоҳе, ки усулро нишон медиҳад, шумо метавонед эзоҳҳо ва ғайраро ба таври баробар истифода баред ) ) . Дар усулҳои мо, мо an object эҷод мекунем ва номи намудеро, ки бояд баргардонида шавад, муқаррар мекунем. method@RequestMapping@GetMapping@PostMapping@GetMapping@RequestMapping(method = RequestMethod.GETModelAndView

Конфигуратсия

Биёед ба танзими конфигуратсия гузарем. Биёед дар баста configсинф эҷод кунем WebConfig. Он танҳо як усул дорад, ки an objectи навъи ро бармегардонад 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;
    }
}
@Configurationба Spring мегӯяд, ки ин синф синфи конфигуратсия аст ва таърифҳо ва вобастагии beanҷузъҳоро дар бар мегирад. Лӯбиё an objectҳое мебошанд, ки аз ҷониби Баҳор идора карда мешаванд. Эзоҳ барои муайян кардани лӯбиё истифода мешавад @Bean. @EnableWebMvcба шумо имкон медиҳад, ки конфигуратсияи Spring 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ва монанди инҳо муайян шудаанд, дар 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, шумо бояд артефактро барои ҷойгиркунӣ интихоб кунед. Худи идея маслиҳат медиҳад Огоҳӣ: Ягон артефакт барои ҷойгиркунӣ қайд карда нашудааст . Тугмаи ислоҳро клик кунед ва ... -ро интихоб кунед: ҷанг таркид . Ё шумо метавонед ба Ҷойгиркунӣ -> илова -> Артефакт -> ...: ҷанг таркид . Ва шумо инчунин бояд ба ҶойгиркунӣЗнакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 5 равед ва майдони контексти Applecation-ро (ин як қисми суроғаи URL, ки барнома дар браузер дастрас хоҳад буд) ба " " таъин кунед. Пас замимаи мо фавран дар http://localhost:8080/ дастрас хоҳад шуд (вале шумо инчунин метавонед дар он ҷо чизеро муайян кунед, масалан " ", ва он гоҳ ба шумо танҳо лозим меояд, ки инро ба ҳама суроғаҳо илова кунед, яъне, масалан, вуҷуд нахоҳад дошт. " http://localhost:8080/edit" , аммо он "http://localhost:8080/filmography/edit" хоҳад буд ). Иҷро карданро клик кунед ва то оғоз шудани он интизор шавед. Ин аст он чизе ки ман гирифтам: ҳама чиз хуб ба назар мерасад, аммо як огоҳӣ вуҷуд дорад. Гап дар сари он аст, ки саҳифаҳои мо ҳоло дастраси омма ҳастанд ва онҳоро метавон мустақиман тавассути навиштани роҳ дар сатри суроғаҳо дастрас кард. Мо ба http://localhost:8080/pages/films.jsp ворид мешавем ва ҳоло мо саҳифаи худро бе огоҳии контроллер қабул кардем. Ба ҳар ҳол ин чандон дуруст нест, аз ин рӯ мо феҳристи махсус эҷод мекунем . Он чизе, ки дар дохor он аст, аз мардум пинҳон хоҳад шуд ва онро танҳо тавассути контроллер дастрас кардан мумкин аст. Мо директорияро бо назари худ ( ) дар , ҷойгир мекунем ва мувофиқан онро ба префикс илова мекунем: /Знакомство с 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 мегирем. Хуб, олиҷаноб, мо соддатарин веб -барнома, Hello World, чунон ки мегӯянд. Сохтори лоиҳа ҳоло чунин менамояд:
Знакомство с Maven, Spring, MySQL, Hibernate и первое CRUD приложение (часть 1) - 8

Модели

Мо аллакай манзараҳо ва контроллер дорем, аммо дар MVC ҳарфи 3-юм низ ҳаст, аз ин рӯ барои пурра кардани тасвир мо моделро низ илова мекунем. Дар баста, 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) низ меноманд , хуб, яъне. "an objectи оддии java". Биёед ҳоло кӯшиш кунем, ки чунин an 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);
    }
Ва ин an objectро ModelAndViewбо истифода аз усули мо илова кунед addObject:
@RequestMapping(method = RequestMethod.GET)
    public ModelAndView allFilms() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("films");
        modelAndView.addObject("film", film);
        return modelAndView;
    }
Акнун мо метавонем ин an objectро дар саҳифаи худ нишон диҳем. Дар ин ҷо films.jspба ҷои Hello World мо менависем ${film}ва an objectи мувофиқ ба номи атрибут " film" иваз карда мешавад. Биёед кӯшиш кунем, ки онро иҷро кунем ва бубинем, ки чӣ рӯй дод (барои баромади равшани an object, синф 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 ва аввалин барномаи CRUD (қисми 3) Муқаддима ба Maven, Spring, MySQL, Hibernate ва аввалин барномаи CRUD (қисми 4)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION