Sprievodca stránkami JavaServer (JSP)
Obsah
- 1. Prehľad
- 2. Stránky JavaServera
- 2.1. Syntax JSP
- 2.2. Statický a dynamický obsah
- 2.3. Implicitné objekty
- 2.4. Ostatné implicitné objekty
- 2.5. Smernice
- 2.6. Smernice o stránkach
- 3.0. Tri príklady
- 3.1. HTML vykreslené v servlete
- 3.2. Java v statickom obsahu JSP
- 3.3. JSP s preposielaním
- 3.4. Vyskúšaj to!
- 4. Záver
1. Prehľad
Stránky JavaServer Pages (JSP) umožňujú dynamický vstrekovanie obsahu do statický obsah pomocou Java a Java Servlets. Môžeme podať žiadosť na a Servlet Java, vykonajte príslušnú logiku a vykreslite konkrétne zobrazenie na strane servera, ktoré sa spotrebuje na strane klienta. Tento článok poskytne komplexný prehľad stránok JavaServer používajúcich Java 8 a Jave 7 EE.
Začneme preskúmaním niekoľkých kľúčových pojmov dôležitých pre JSP: konkrétne rozdielov medzi dynamický a statický obsah, životný cyklus JSP a syntax JSP, ako aj smernice a implicitné objekty vytvorené pri kompilácii!
2. Stránky JavaServera
Stránky JavaServer Pages (JSP) umožnili, aby sa údaje špecifické pre Javu preniesli alebo umiestnili do zobrazenia .jsp a spotrebovali na strane klienta.
Súbory JSP sú v podstate súbory .html s nejakou extra syntaxou a niekoľkými menšími počiatočnými rozdielmi:
- the .html prípona je nahradená .jsp (považuje sa to za typ súboru .jsp) a
- nasledujúca značka sa pridáva na začiatok prvkov značkovania .html:
Prejdime si niektoré kľúčové pojmy v JSP.
2.1. Syntax JSP
Existujú dva spôsoby, ako pridať kód Java do súboru .jsp. Najprv môžeme použiť základnú syntax jazyka Java Scriptlet, ktorá spočíva v umiestnení blokov kódu Java do dvoch značiek Scriptlet:
<% Java code here %>
Druhá metóda je špecifická pre XML:
Java kód tu
Dôležité je, že pomocou JSP je možné použiť podmienenú logiku na strane klienta s JSP ak, potoma inak doložky a potom zalomenie príslušných blokov značiek týmito zátvorkami.
Doodad! Ahoj!
Napríklad ak doodad je pravda, zobrazili by sme prvý, div inak by sme zobrazili druhý, p element!
2.2. Statický a Dynamický Obsah
Statický webový obsah sú stále aktíva, ktoré sa spotrebúvajú nezávisle od požiadaviek RESTful, SOAP, HTTP, HTTPS alebo iných informácií poskytnutých používateľom.
Statický obsah je však pevný a nemení sa podľa vstupov používateľa. Dynamický webový obsah sú tie aktíva, ktoré reagujú, sú upravované alebo sa menia na základe akcií alebo informácií používateľa!
Technológia JSP umožňuje čisté rozdelenie zodpovedností medzi dynamický a statický obsah.
Server (servlet) spravuje server dynamický obsah a klient (skutočná stránka .jsp) je statický kontext, do ktorého sa vkladá dynamický obsah.
Poďme sa pozrieť na implicitné objekty ktoré sú vytvorené JSP a ktoré vám umožňujú prístup k údajovým serverom na strane JSP!
2.3. Implicitné objekty
Implicitné objekty sú generované motorom JSP automaticky počas kompilácia.
Implicitné objekty zahrnúť HttpRequest a HttpResponse objekty a vystaviť rôzne funkcie servera na použitie vo vašom servlete a na interakciu s vaším .jsp! Tu je zoznam implicitné objekty ktoré sú vytvorené:
žiadosť
žiadosť patrí do triedy javax.servlet.http.HttpServletRequest. The žiadosť objekt sprístupňuje všetky vstupné údaje používateľa a sprístupňuje ho na strane servera.
odpoveď
odpoveď patrí do triedy javax.servlet.http.HttpServletResponse a určuje, čo sa odovzdá späť klientovi po a žiadosť je vyrobené.
Poďme sa bližšie pozrieť na žiadosť a odpoveď implicitné objekty, pretože sú to tie najdôležitejšie a najviac používané.
Nasledujúci príklad demonštruje veľmi jednoduchú, neúplnú metódu servletu na spracovanie požiadaviek GET. Vynechal som väčšinu podrobností, aby sme sa mohli sústrediť na to, ako používať žiadosť a odpoveď objekty:
protected void doGet (požiadavka HttpServletRequest, odpoveď HttpServletResponse) vyvolá ServletException, IOException {String message = request.getParameter ("message"); response.setContentType ("text / html"); . . . }
Po prvé, vidíme, že žiadosť a odpoveď objekty sa odovzdávajú ako parametre do metódy, ktorá ich sprístupňuje v rámci jej rozsahu.
K parametrom žiadosti môžeme pristupovať pomocou .getParameter () funkcie. Hore zasekneme správa parameter a inicializovať reťazcovú premennú, aby sme ju mohli použiť v našej logike na strane servera. Môžeme tiež získať prístup k odpoveď objekt, ktorý určuje, čo a ako budú dáta odovzdané do zobrazenia.
Vyššie sme na ňom nastavili typ obsahu. Nemusíme vracať odpoveď namietajte proti tomu, aby sa jeho užitočné zaťaženie zobrazilo na stránke JSP pri renderovaní!
von
von patrí do triedy javax.servlet.jsp.JspWriter a slúži na zápis obsahu klientovi.
Existujú najmenej dva spôsoby tlače na vašu stránku JSP, ktoré by ste tu mali diskutovať. von sa vytvára automaticky a umožňuje vám zapisovať do pamäte a potom do súboru odpoveď objekt:
out.print („ahoj“); out.println („svet“);
To je všetko!
Druhý prístup môže byť výkonnejší, pretože umožňuje písať priamo do súboru odpoveď objekt! Tu používame PrintWriter:
PrintWriter out = response.getWriter (); out.println („Hello World“);
2.4. Ostatné implicitné objekty
Tu sú niektoré ďalšie Implicitné objekty ktoré sú tiež dobré vedieť!
zasadanie
zasadanie patrí do triedy javax.servlet.http.HttpSession udržiava údaje používateľa po celú dobu relácie.
žiadosť
žiadosť patrí do triedy javax.servlet.ServletContext ukladá parametre celej aplikácie nastavené pri inicializácii alebo tie, ktoré je potrebné sprístupniť v celej aplikácii.
výnimkou
výnimkou patrí do triedy javax.servlet.jsp.JspException sa používa na zobrazenie chybových správ na stránkach JSP, ktoré majú značku .
stránke
stránke patrí do triedy java.lang.Objekt umožňuje prístup alebo referenciu k aktuálnym informáciám servletu.
pageContext
pageContext patrí do triedy javax.servlet.jsp.PageContext predvolené hodnoty pre stránke rozsahu, ale je možné ich použiť na prístup žiadosť, žiadosťa atribúty relácie.
konfigur
konfigur patrí do triedy javax.servlet.ServletConfig je konfiguračný objekt servletu, ktorý umožňuje získať kontext, názov a konfiguračné parametre servletu.
Teraz, keď sme pokryli implicitné objekty poskytované JSP, obráťme sa na smernice ktoré umožňujú stránkam .jsp (nepriamo) prístup k niektorým z týchto objektov.
2.5. Smernice
JSP dodáva po vybalení z krabice smernice, ktoré možno použiť na určenie základných funkcií pre naše súbory JSP. Smernice JSP majú dve časti: (1) samotná smernica a (2) atribút tejto smernice, ktorému je priradená hodnota.
Existujú tri druhy smerníc, na ktoré je možné odkazovať pomocou direktívnych značiek ktorá definuje závislosti a atribúty JSP vrátane Druh obsahu a Jazyk, - ktorá určuje import alebo súbor, ktorý sa má použiť, a - ktorá určuje knižnicu značiek definujúcu vlastné akcie, ktoré má stránka použiť.
Napríklad by bola direktíva stránky špecifikovaná pomocou značiek JSP nasledujúcim spôsobom:
A to môžeme urobiť pomocou XML nasledovne:
2.6. Atribúty smernice stránky
V smernici o stránkach je možné deklarovať množstvo atribútov:
autoFlush autoFlush riadi výstup medzipamäte a vymaže ju, keď sa dosiahne veľkosť medzipamäte. Predvolená hodnota je pravda. nárazník nárazník nastavuje veľkosť medzipamäte použitej našou stránkou JSP. Predvolená hodnota je 8 kB. errorPage errorPage špecifikuje stránku JSP ako chybovú stránku. predlžuje predlžuje určuje super triedu zodpovedajúceho kódu servletu. Info Info sa používa na nastavenie textového popisu JSP. isELIgnorované isELIgnorované uvádza, či bude stránka ignorovaná alebo nie Výrazový jazyk (EL) v JSP. EL umožňuje prezentačnej vrstve komunikovať s Java Managed Beans a robí to pomocou ${…} syntax, a aj keď sa tu nebudeme venovať zložitosti EL, tu je niekoľko príkladov, ktoré stačia na zostavenie našej ukážkovej aplikácie JSP! Predvolená hodnota pre isELIgnorované je nepravdivé. isErrorPage isErrorPage hovorí, či stránka je alebo nie je chybová. Ak pre našu stránku v aplikácii vytvoríme obslužný program chýb, musíme určiť chybovú stránku. isThreadSafe isThreadSafe má predvolenú hodnotu pravda. isThreadSafe určuje, či JSP môže alebo nemôže používať Servlet multi-threading. Všeobecne by ste nikdy nechceli túto funkciu vypnúť. Jazyk Jazyk určuje, aký skriptovací jazyk sa má v JSP použiť. Predvolená hodnota je Java. zasadanie zasadanie určuje, či sa má alebo nemá udržiavať relácia HTTP. Predvolene má hodnotu true a akceptuje hodnoty pravda alebo nepravdivé. trimDirectiveWhitespaces trimDirectiveWhitespaces vymaže biele miesta na stránke JSP a kondenzuje kód do kompaktnejšieho bloku v čase kompilácie. Nastavením tejto hodnoty na pravda môže pomôcť zmenšiť veľkosť kódu JSP. Predvolená hodnota je nepravdivé. Teraz, keď sme preskúmali koncepty ústredné pre JSP, poďme tieto koncepty aplikovať na niekoľko základných príkladov, ktoré vám pomôžu pri uvedení prvého servletu slúžiaceho do JSP do prevádzky! Existujú tri hlavné spôsoby, ako vložiť Javu do súboru .jsp, a každý z týchto spôsobov preskúmame nižšie pomocou natívnych funkcií v prostredí Java 8 a Jakarta EE. Najskôr vykreslíme našu značku na strane servera, aby sa zobrazila na strane klienta. Po druhé sa pozrieme na to, ako pridať kód Java priamo do nášho súboru .jsp nezávisle od javax.servlet.http‘S žiadosť a odpoveď predmety. Po tretie, predvedieme, ako postúpiť HttpServletRequest na konkrétny .jsp a naviažte na ňu spracovanú Javu na strane servera. Poďme nastaviť náš projekt v Eclipse pomocou Súbor / Nový / Projekt / Web / Dynamický webový projekt / zadajte hostiteľa v Tomcat! Po vytvorení projektu by ste mali vidieť: Do štruktúry aplikácie pridáme niekoľko súborov, aby sme nakoniec dosiahli: Poďme na to index.jsp ktoré sa zobrazia, keď vstúpime do kontextu URL v Tomcat 8: Vyvolajte kód HTML vykreslený serverom Servlet: tu Java na statickej stránke: tu Java vložená Servletom: tu Sú tam tri a, každý odkaz na jeden z príkladov, ktoré si prejdeme nižšie v častiach 4.1 až 4.4. Musíme sa tiež ubezpečiť, že máme svoje web.xml nastaviť: Hlavná poznámka je tu - ako správne mapovať každý z našich servletov na konkrétne mapovanie servletov. Týmto spôsobom priradíte každý servlet konkrétnemu koncovému bodu, kde sa môže spotrebovať! Teraz si prejdeme všetky ďalšie súbory uvedené nižšie! V tomto príklade vlastne preskočíme vytváranie súboru .jsp! Namiesto toho vytvoríme reťazcové znázornenie nášho označenia a potom ho zapíšeme do odpovede GET pomocou PrintWriter po tom, ako Servlet ExampleOne dostane požiadavku GET: Táto stránka bola vykreslená Servletom ExampleOne! To, čo tu robíme, je vstrekovanie našich značiek priamo do našej aplikácie vybavovania požiadaviek servletu. Namiesto značky JSP generujeme náš HTML spolu so všetkými údajmi špecifickými pre Javu, ktoré sa majú vložiť, čisto na strane servera bez statického JSP! Predtým sme skontrolovali von objekt, ktorý je vlastnosťou JspWriter. Vyššie som použil PrintWriter objekt, ktorý zapisuje priamo do súboru odpoveď objekt. JspWriter skutočne ukladá reťazec, ktorý sa má zapísať do pamäte, ktorý sa potom zapíše do odpoveď objekty po vyprázdnení medzipamäte. PrintWriter je už pripojený k odpoveď objekt. Radšej som písal priamo do odpoveď z týchto dôvodov namietajte v príkladoch vyššie a nižšie. Tu vytvoríme súbor JSP s názvom ExampleTwo.jsp so značkou JSP. Ako je vidieť vyššie, toto umožňuje pridanie Javy priamo do nášho označenia. Tu náhodne vytlačíme prvok a Reťazec []: Vyššie uvidíte uvedenú deklaráciu premennej v objektoch značiek JSP: typunázov premennej a an inicializácia rovnako ako bežná Java. Vyššie uvedený príklad som uviedol na demonštráciu toho, ako pridať Javu na statickú stránku bez použitia konkrétneho servletu. Tu sa Java jednoducho pridá na stránku a o ostatné sa postará životný cyklus JSP. Teraz pre náš posledný a najviac zapojený príklad! Tu použijeme @WebServlet anotácia k príkladu Three, ktorá eliminuje potrebu mapovania servletov v systéme Windows server.xml. ExampleThree vezme parameter URL odovzdaný ako správa, naviaže tento parameter na žiadosť objekt a potom ho presmeruje žiadosť namietať proti ExampleThree.jsp. Dosiahli sme teda nielen skutočne dynamický web skúsenosti, ale urobili sme to aj v rámci aplikácie obsahujúcej viac súborov .jsp. getRequestDispatcher (). forward () je jednoduchý spôsob, ako zabezpečiť, aby sa vykreslila správna stránka .jsp. Všetky údaje spojené s žiadosť objekt odoslaný spôsobom (súboru .jsp) sa potom zobrazí! Tu poslednú časť spracovávame takto: Povedali ste: $ {text} Všimnite si značku JSP pridanú na začiatok stránky ExampleThree.jsp. Všimnete si, že som tu prepol značky JSP. Používam výrazový jazyk (ktorý som už spomínal) na vykreslenie nášho nastaveného parametra (ktorý je viazaný ako $ {text})! Teraz exportujeme našu aplikáciu do súboru .war, ktorý bude spustený a hostený v Tomcat 8! Nájdite svoje server.xml a my aktualizujeme našu Kontext do: Čo nám umožní prístup k našim servletom a JSP localhost: 8080 / spring-mvc-xml / jsp / index.jsp! Pracovnú kópiu si môžete vyzdvihnúť na adrese: GitHub. Gratulujem! Prešli sme dosť veľa pôdy! Dozvedeli sme sa o tom, čo sú stránky JavaServer, čo ich zaviedlo k dosiahnutiu, o ich životnom cykle, o tom, ako ich vytvoriť, a nakoniec o niekoľkých rôznych spôsoboch ich implementácie! Týmto sa končí úvod do JSP! Majte sa dobre a kódujte!3. Tri príklady
| -project | - WebContent | - META-INF | - MANIFEST.MF | - WEB-INF | - lib | - src
| -project | - WebContent | - META-INF | - MANIFEST.MF | - WEB-INF | -lib * -web.xml | - ExampleTree.jsp | - ExampleTwo.jsp * - index.jsp | - src | - com | - baeldung * - ExampleOne.java * - ExampleThree.java
Príklady JSP
index.html index.htm index.jsp ExampleOne com.baeldung.ExampleOne ExampleOne / ExampleOne
3.1. HTML vykreslené v servlete
verejná trieda ExampleOne rozširuje HttpServlet {@Override chránený void doGet (požiadavka HttpServletRequest, odpoveď HttpServletResponse) hodí ServletException, IOException {response.setContentType ("text / html"); PrintWriter out = response.getWriter (); out.println ("" + "" + "" + "HTML vykreslené servletom" + "" + "" + "
" + "3.2. Java v statickom obsahu JSP
Príklad Java na statickej stránke
3.3. JSP s preposielaním
@WebServlet (name = "ExampleThree", description = "JSP Servlet s anotáciami", urlPatterns = {"/ ExampleThree"}) verejná trieda ExampleThree rozširuje HttpServlet {@Override chránený void doGet (požiadavka HttpServletRequest, HttpServletResponse odpoveď, IO ServletException, hodí ServletException Reťazec message = request.getParameter ("správa"); request.setAttribute ("text", správa); request.getRequestDispatcher ("/ ExampleThree.jsp"). forward (požiadavka, odpoveď); }}
Príklad väzby Java
3.4. Vyskúšaj to!
4. Záver