Mazmuny:
- Giriş
- Taslama döretmek
- Bahar MVC birikmesi
- Sahypalary we dolandyryjy döretmek
- Sazlama
- Model
- Model-Görkeziji
Giriş
Ulanylan dürli mysallary öwrenip, meniň üçin täze bolan tehnologiýalar we çarçuwalar bilen tanşyp başladym, sebäbi adatça doly hukukly programmanyň mysaly bilen hereketde görenimde iň gowy zada düşünýärin. Adatça, şular ýaly mysallar CRUD programmalarydyr ( C reate, Read , U pdate, D elete), Internet dürli çylşyrymlylyk mysallaryndan doly. Mesele, adatça, ol ýerde nädip, näme we näme üçin edilendigi, beýle we beýle garaşlylygyň näme üçin goşulandygy, beýle synpyň näme üçin zerurdygyny we ş.m. jikme-jik düşündirip bilmezligidir. Köplenç, gutarnykly POM faýly, sapaklaryň soňky wersiýalary bilen doly gutarnykly programmany alýarlar we tejribeli adama düşnükli ýaly görünýän ownuk zatlara ünsi jemlemän, hersiniň üstünden geçýärler. Şeýle mysallaryň köpüsine göz aýladym we adatça hemme zadyň nähili işleýändigi düşnükli, ýöne muňa nädip gelendigi düýbünden düşnükli däl. Şol sebäpden, şeýle mysalyň tejribeli işläp düzüjiniň wezipesinden däl-de, Bahar, Gibernate we beýleki zatlar bilen iş salyşmadyk başlangyç wezipesinden peýdaly boljakdygyna karar berdim.Taslama döretmek
Şeýlelik bilen, täze gelenim üçin, düşnüksiz arhetipleri ulanmarys. Bahar başlangyjy henizem gaty gorkunç bolup görünýär. Şonuň üçin iň ýönekeý Maven taslamasyny dörederis. Domen adym ýok, şonuň üçin toparlaýyn görnüşde diňe ýazaryntestgroup
, artifaktidde bolsa adyny ýazaryn, mysal üçin filmography
(bu filmleriň sanawy bolar). Taslama döredýäris we Enable auto-import
ideýa teklip edeninde saýlaýarys. Munuň netijesinde her gezek POM faýlyna haýsydyr bir üýtgeşme girizenimizde (Taslamanyň obýekt modeli, bu faýl Maven taslamasynyň ähli gurluşyny suratlandyrýar), hemme zat derrew taslama awtomatiki usulda ulanylar. Kitaphanalar ýerli ammarymyzdan eýýäm bar bolsa ýa-da öň işlemedik käbir täze garaşlylyklarymyzy ulansak, Maven olary merkezi ammardan internet arkaly göçürip alar. Maveniň çeşmeleri we resminamalary göçürip almak funksiýasy bar (Çeşmeleri we / ýa-da resminamalary göçürip almak). Şeýle hem bu örän amatly, haýsydyr bir synp ýa-da usul bilen bir zat düşnüksiz bolsa, deslapky koda baryp, içindäki zatlaryň nähili işleýändigini görüp bilersiňiz. Geliň, birnäçe jikme-jiklik goşalyň. Bu web programmasy bolar we Tomcat ulanarys . Tomkata bir programma ýerleşdirmek üçin ony söweş arhiwi görnüşinde geçirmeli (Web Programma Resursy, web programmalary üçin ýörite format). Munuň üçin programma söweş arhiwine düzüler ýaly POM faýlyna aşakdaky setiri goşuň:
<packaging>war</packaging>
Şeýle hem, web çeşmeleri üçin ýörite katalog gerek bolar, biziň ýagdaýymyzda jsp sahypalary we käbir web çeşmeleri bolar . Geliň, bir main
katalog döredeliň webapp
. Edil şonuň ýaly atlandyrylmaly we edil şol main
bir ýerde ýerleşmeli java
, resources
sebäbi bu adaty Maven katalog gurluşy. Bukjany gurnanymyzdan war
we munuň web taslamasydygyny kesgitlänimizden soň, katalog webapp
awtomatiki usulda Web programma çeşmesi hökmünde bellik ediler (üstünde gök nokat bolar) we web bilen baglanyşykly hemme zat şu bukjada gözlener. Bir pursat. Düzgüne görä, Maven 1.5 wersiýa dilini ulanýar, ýöne men, mysal üçin, 1.8 - Java 8 wersiýasyny ulanasym gelýär (10 ýa-da 11 alyp bilersiňiz, ýöne şonda-da ol ýerden haýsydyr bir aýratynlygy ulanmak meýilnamasy ýok, şonuň üçin 8 bolsun ). Bu gaty ýönekeý çözülip bilner, Google-da “Maven java 8” ýaly bir zat ýazýarys we POM faýlyna nämäniň goşulmalydygyny görýäris, şonuň üçin Maven sapaklarymyzy zerur wersiýa üçin düzýär. Netijede, aşakdakylar bar:
Bahar MVC birikmesi
Bir ýerden başlamaly. Meýilnama görä, maglumat bazasyny birikdireris we Gibernate ulanarys, ýöne häzirlikçe bularyň hemmesi birneme gorkunç bolup görünýär. Ilki bilen has ýönekeý bir zat etmeli. Bahar MVC, bu eýýäm has gowudyr, MVC nagşy bilen köpden bäri tanyş, kursyň uly meseleleriniň ýarysynda ulanyldy. Bu ýerden tans edip başlarys. Bahar MVC bilen web programmasy döretmek üçin bize Servlet-API, ýagny zerur. kömegi bilen haýyş-jogap täsiri amala aşyrylar. Muny birikdirmäge synanyşalyň. Google-a girýäris, Maven ammarynda zerur baglylyklary gözleýäris we olara goşýaryspom.xml
. Daşarky kitaphanalar bölüminde diňe bir bahar-webmvc-iň däl , eýsem başga-da bir topar zadyň ýüklenendigini görüp bilersiňiz. Bular. goşmaça baharyň özenine , kontekstine , noýba we ş.m. baglylyklary goşmaly däldiris. bize gerek zat, bahar-webmvc bilen bilelikde çekildi .
Kiçijik boýun gaçyrmaly. Adatça ulanylan her bir kitaphana üçin garaşlylygy goşmak maslahat berilýär, hatda eýýäm goşulanlar bilen birikdirilen hem bolsa, sebäbi bu käbir kynçylyklardan we ýalňyşlyklardan gaça durup biler. Simpleönekeý mysal. Käbir API ulanýan garaşlylygy goşduk diýeliň we şol bir wagtyň özünde bu API üçin haýsydyr bir durmuşa geçiriş çeker. Soň bolsa şol bir API ulanýan we munuň üçin durmuşa geçirilişiniň käbirini çekýän başga bir garaşlylygy goşduk, ýöne bu gezek başgaça. Şeýlelik bilen, şol bir API-den 2 dürli durmuşa geçirişimiz bolar. Eger-de özümiz bu API-iň käbir usullaryny bir ýerde ulanmak islesek, bir mesele ýüze çykar, sebäbi ulgam haýsy durmuşa geçirilişini bilmez, tötänleýin saýlar, belki garaşyşymyz ýaly bolmaz. Eger ýerine ýetirişleriň birine baglylygy aç-açan kesgitlän bolsaňyz, oňa ileri tutular. Şeýle-de bolsa, bu beýle berk maslahat däl, esasan dürli kompaniýalardan köp dürli kitaphanalaryň ulanylýan uly taslamalaryna degişlidir. POM faýlyny gaty köp ýüklemezlik üçin bu ýerde etmeris, hiç hili problema garaşylmaýar. Emma, muňa garamazdan, muny ýatda saklamaly. |
provided
Baglamak nämäni aňladýar javax.servlet-api
? Ulanyş çäkleri garaşlylygyň çägidir, provided
bu garaşlylygy programmany düzmek we synagdan geçirmek tapgyrynda elýeterli boljakdygyny aňladýar, ýöne arhiwlenmez. Hakykat, programmany ýerleşdirmek üçin “Tomcat” hyzmat ediş konteýnerini ulanarys we içinde eýýäm şeýle kitaphanalar bar, şonuň üçin olary şol ýere geçirmegiň we arhiwi zerur däl ýük bilen ýüklemegiň zerurlygy ýok. Öňe seretseň, şol bir sebäbe görä, adaty usul bolmazdan ederis main
, sebäbi ol Tomkatyň içinde eýýäm bar.
Sahypalary we dolandyryjy döretmek
Geliň indi ýönekeý bir zat bişirmäge synanyşalyň. Ilki bilen, mysal üçin pikirlerimiziň saklanjakwebapp
goşmaça bukjany döredeliň. pages
jsp sahypalary we iki sahypa dörediň. Geljekde filmleriň sanawy görkeziljek sahypa gerek bolar, meselem films.jsp
, redaktirlemek üçin aýratyn sahypa ýasap bileris editPage.jsp
. Olary häzirlikçe çynlakaý bir zat bilen doldurmarys, diňe synag üçin, bir sahypada beýlekisine baglanyşyk ederis. Indi bize haýyşlary gaýtadan işleýän synp gerek. gözegçilik ediji. Geliň, täze paket goşalyň controller
we onda synp döredeliň FilmController
(umuman, hemme zady dürli paketlere gaplamak hökman däl, bu programma gaty kiçi we ýönekeý bolar, ýöne adaty bir taslamada gözegçilik edijiler, konfigurasiýa synplary, modeller köp bolup biler we ş.m., şonuň üçin hatda kiçi taslamalardan başlap, hemme zady tertipsiz we tertipli ýerine ýetirmäge öwrenişmek has gowudyr). Bu synpda haýyşlara jogap hökmünde pikirlerimizi yzyna gaýtarjak usullary dörederis.
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äme? Bahar MVC diýilýän bir zat bar DispatcherServlet
. Bu esasy gözegçä meňzeýär, gelýän ähli haýyşlar ondan geçýär we soňra belli bir gözegçä geçirilýär. Bellik @Controller
diňe Bahar MVC-e bu synpyň gözegçilik ediji (umuman logiki) diýýändigini, dispetçeriň @RequestMapping
degişli usuly çagyrmak üçin bellikleri barlajakdygyny aýdýar. Bellik, @RequestMapping
müşderide (brauzerde) elýeterli boljak gözegçilik ediji usullaryň salgylaryny kesgitlemäge mümkinçilik berýär. Şeýle hem, ähli usullaryň kök salgysyny bellemek üçin kontrol synpyna hem ulanylyp bilner. Usulyň allFilms()
parametri value
"" "düzüldi , şonuň üçin brauzere http: // host: port //
kombinasiýasy girizilende derrew çagyrylar (ýagny, adaty ýagdaýda http: // localhost: 8080 / ýa-da http) : //127.0 .0.1: 8080 / ). Parametr haýsy haýyşyň goldanýandygyny kesgitleýär (GET, POST, PUT we ş.m.). Bu ýerde diňe maglumatlary alýarys, GET ulanylýar. Soňrak, goşmak we redaktirlemegiň usullary peýda bolanda, eýýäm POST haýyşlary bolar. (Theeri gelende aýtsak, usuly görkezýän düşündirişiň ýerine , bellikleri we ş.m. deň derejede ulanyp bilersiňiz )). Usullarymyzda bir obýekt döredýäris we yzyna gaýtarylmaly görnüşiň adyny kesgitleýäris. method
@RequestMapping
@GetMapping
@PostMapping
@GetMapping
@RequestMapping(method = RequestMethod.GET
ModelAndView
Sazlama
Sazlamany düzmäge geçeliň. Geliň, bukjadaconfig
synp döredeliň WebConfig
. Onda görnüşdäki obýekti yzyna gaýtaryp berýän diňe bir usul bolar ViewResolver
, bu at bilen wekilçilik tapmak üçin zerur interfeýsdir.
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
Baharyň bu synpyň konfigurasiýa synpydygyny we bean
komponentleriň kesgitlemelerini we garaşlylygyny öz içine alýandygyny aýdýar. Fasulye Bahar tarapyndan dolandyrylýan zatlar. Annotasiýa noýba kesgitlemek üçin ulanylýar @Bean
. @EnableWebMvc
bahar MVC konfigurasiýasyny import etmäge mümkinçilik berýär WebMvcConfigurationSupport
. Mundan başga-da, WebMvcConfigurer
bir topar usuly bolan interfeýsi durmuşa geçirip bilersiňiz we hemme zady öz islegiňiz boýunça düzüp bilersiňiz, ýöne entek girmeli däl, adaty sazlamalar ýeterlikdir. @ComponentScan
dolandyrmaly komponentleri nireden gözlemelidigini Bahara aýdýar. düşündiriş bilen bellenen synplar ýa @Component
-da @Controller
,, @Repository
. @Service
Bu düşündirişler synp noýbasyny awtomatiki kesgitleýär. Usulda, viewResolver()
onuň ýerine ýetirilişini döredýäris we wekilçilikleri nireden gözlemelidigini kesgitleýäris webapp
. Şonuň üçin gözegçilik ediji usulynda "" films
"adyny goýanymyzda görnüş" "" tapylar /pages/films.jsp
, şonuň üçin konfigurasiýa synpymyz bar, ýöne häzirlikçe bu diňe bir aýratyn synp, bu biziň amalymyza hiç hili täsir etmeýär. . Bu konfigurasiýany Bahar kontekstinde hasaba almaly. Munuň üçin synp gerek AbstractAnnotationConfigDispatcherServletInitializer
. Bukjada, “AppInitializer”config
diýýäris we onuň usullaryny durmuşa geçirýäris.
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[]{"/"};
}
}
Iň soňky usul salgylary hasaba alýar we konfigurasiýa synplaryny hasaba almak üçin ýene 2 usul bar. Web konfigurasiýalary, ViewResolver
we şuňa meňzeşler kesgitlenen ýerde ýerleşdirilýär getServletConfigClasses()
. Bularyň hemmesini resminamalarda we dürli gollanmalarda okamak has gowudyr, ýöne biziň ýagdaýymyzda entek öwrenmek zerurlygy ýok, biziňkiler, ikisinde-de kesgitlenip WebConfig
bilner RootClasses
, hatda ikisini hem kesgitläp bilersiňiz, ol henizem işlär . Ýene bir zat. Kodlamakda kynçylyklar bolup biler, haçan-da formadan rus harplary bilen bahalar iberilende, netijeler ýazylar. Bu meseläni çözmek üçin haýyşlary öňünden işleýän süzgüç goşarys. “AppInitializer” synpyna girýäris we islenýän kodlamagy görkezýän usulymyzy ýok edýäris getServletFilters
, elbetde, sahypalardaky we maglumatlar bazasyndaky ýaly beýleki ýerlerdäki ýaly bolmaly:
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return new Filter[] {characterEncodingFilter};
}
Dogrusy, hemme zat gurnalan ýaly, ony işledip, nämäniň bolup geçýändigini görüp bilersiňiz. Işletmek -> Işletmek -> Sazlamalary redaktirlemek -> Täze konfigurasiýa goşmak -> Tomcat serweri -> Nexterli indiki, ýerleşdirmek üçin artefakt saýlamaly. Pikiriň özi duýduryş berer : ýerleşdirmek üçin bellik edilen eserler ýok . Düzediş düwmesine basyň we ...: uruş partlady . Ora-da Deployment -> add -> Artifact -> ... gidip bilersiňiz : uruş ýaryldy . Şeýle hem, “Deployment” -e girip , “Applecation” kontekst meýdançasyny (bu programma brauzerde elýeterli boljak url salgysynyň bir bölegi bolar) “" ” bellemeli . Soňra programmamyz derrew http: // localhost: 8080 / -de elýeterli bolar (ýöne siz ol ýerde bir zady görkezip bilersiňiz, mysal üçin " ", soň bolsa muny diňe ähli salgylara goşmaly bolarsyňyz, mysal üçin ýok "http: // localhost: 8080 / edit" , ýöne "http: // localhost: 8080 / filmografiýa / redaktirlemek" bolar . Işlet düwmesine basyň we başlaýança garaşyň. Ine, alan zadym: Hemme zat gowy ýaly bolup görünýär, ýöne bir gowak bar. Hakykat, sahypalarymyza indi köpçülige açyk we salgy setirine ýol ýazmak arkaly göni girip bolýar. Http: // localhost: 8080 / pages / films.jsp girýäris we indi sahypamyzy gözegçiniň habary bolmazdan aldyk. Näme-de bolsa bu gaty dogry däl, şonuň üçin ýörite katalog dörederis . Içindäki zatlar halkdan gizlener we diňe gözegçilik ediji arkaly girip bolar. Katalogy öz pikirlerimiz ( ) bilen ýerleşdirýäris we şoňa görä prefiksine goşýarys: /
/filmography
webapp
WEB-INF
pages
WEB-INF
ViewResolver
viewResolver.setPrefix("/WEB-INF/pages/");
Indi sahypamyzy http: // localhost: 8080- den alýarys , ýöne göni http: // localhost: 8080 / WEB-INF / pages / films.jsp-a synanyşsak , 404 ýalňyşlyk alarys. Gowy, bizde bar iň ýönekeý web-ýüz tutma, Olaryň aýdyşy ýaly Salam Dünýä. Taslamanyň gurluşy häzirki wagtda şeýle:
Model
Bizde eýýäm görüşler we gözegçilik ediji bar, ýöne MVC-de 3-nji harp bar, şonuň üçin suraty tamamlamak üçin bir model hem goşarys. Bukjada, mysal üçin, aşakdaky meýdanlar bilenmodel
synp döredeliň : , (ady), (çykan ýyly), (reanr) we (meselem, bu filmi eýýäm gördüňizmi ýa-da görmediňiz). 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
}
Üýtgeşik zat ýok, diňe adaty synp, hususy meýdanlar, getterler we sazlaýjylar. Şeýle synplaryň obýektlerine (Plain Old Java Object) hem diýilýär POJO
, ýagny "ýönekeý java obýekti". Indi şeýle obýekti döretmäge we sahypada görkezmäge synanyşalyň. Häzirlikçe, ony nädip döredip boljakdygy barada kän alada etmeris. Synap görmek üçin, samsyklyk bilen gönüden-göni kontrolda döredeliň, mysal üçin:
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
Usuly ulanyp, bu obýekti bize goşuň addObject
:
@RequestMapping(method = RequestMethod.GET)
public ModelAndView allFilms() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("films");
modelAndView.addObject("film", film);
return modelAndView;
}
Indi bu obýekti sahypamyzda görkezip bileris. “Salam World” -yň ýerine films.jsp
ýazarys ${film}
we atribut adyna gabat gelýän obýekt film
şu ýerde çalşyrylar. Ony işletmäge we nämäniň bolandygyny görmäge synanyşalyň (obýektiň anyk çykmagy üçin synp Film
täzeden kesgitlenildi toString()
):
Model-Görkeziji
Bu etapda, eýýäm doly bahaly MVC programmasy bar ýaly. Dowam etmezden ozal hemme zada göz aýlap, hemmesiniň nähili işleýändigini anyklamak gowy bolardy. Internetde bu hakda köp suratlary we diagrammalary tapyp bilersiňiz, men muny haladym:Dispatcher Servlet
, soň bolsa bu haýyşy ulanmak üçin amatly gözegçi tapýar HandlerMapping
(bu kontrolleýeri saýlamak üçin interfeýs, bar bolan dolandyryjylaryň haýsysynyň şeýle salgyny kabul edýän usulynyň bardygyny barlaýar) , amatly usuly çagyrýar we Controller
görnüş barada maglumat berýär, soň dispetçer islenýän görnüşi ViewResolver
'a' ulanyp tapýar, şondan soň model maglumatlary bu görnüşe geçirilýär we sahypamyzy çykyş hökmünde alýarys. Şuňa meňzeş bir zat. Dowam etmek üçin ... Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (1-nji bölüm) Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy bilen tanyşdyrmak (2-nji bölüm) Maven, Bahar, MySQL, Gibernate we the ilkinji CRUD programmasy (3-nji bölüm) Maven, Bahar, MySQL, Gibernate we ilkinji CRUD programmasy (4-nji bölüm)
GO TO FULL VERSION