Pagini de server Java

JSP
Extensie .jsp
tip MIME aplicație/jsp
Dezvoltator Fundația Eclipse
Ultima lansare 3.1.0 (15 mai 2022 ) ( 15.05.2022 )
Tip de format format de fișier , motor de șablon și specificație tehnică
Standard(e) JSR 245
Site-ul web projects.eclipse.org/… ​(  engleză)
 Fișiere media la Wikimedia Commons

JSP ( JavaServer Pages ) este o tehnologie care permite dezvoltatorilor web să creeze conținut care are atât componente statice, cât și dinamice. O pagină JSP conține două tipuri de text: date sursă statice, care pot fi într-unul dintre formatele de text HTML , SVG , WML sau XML , și elemente JSP care construiesc conținut dinamic. În plus, bibliotecile de etichete JSP, precum și Expression Language (EL), pot fi folosite pentru a încorpora codul Java în conținutul static al paginilor JSP.

Codul paginii JSP este tradus în cod servlet Java utilizând compilatorul de pagină Jasper JSP și apoi compilat în bytecode Java Virtual Machine ( JVM ) . Containerele servlet capabile să execute pagini JSP sunt scrise în limbajul Java independent de platformă. JSP-urile sunt încărcate pe server și gestionate dintr-o structură specială de pachete de server Java numită Jakarta EE Web Application. De obicei, paginile sunt ambalate în arhive de fișiere .war și .ear .

Tehnologia JSP este o tehnologie independentă de platformă, portabilă și ușor extensibilă pentru dezvoltarea aplicațiilor web .

Versiuni

Începând cu versiunea 1.2, dezvoltarea JavaServer Pages a avut loc în cadrul Java Community Process . JSR 53 definește standardele JSP 1.2 și Servlet 2.3, în timp ce JSR 152 definește specificația JSP 2.0. În mai 2006, specificația JSP 2.1 a fost lansată sub JSR 245 ca parte a Java EE 5 . La 10 decembrie 2009, specificația JSP 2.2 a fost lansată ca conținut al versiunii JSR 245 .

JSP 1.0 și JSP 1.1

Aceste versiuni sunt fundamental diferite de versiunile anterioare, care au fost percepute ca răspunsul Java la ASP . Unele dintre caracteristicile de bază ale versiunilor anterioare (cum ar fi capacitatea de a dezvolta biblioteci de etichete) au fost eliminate sau înlocuite în conformitate cu principiul separării codului și conținutului. Deoarece este dificil să navigați și să separați conținutul de codul în sine în volume mari de cod sursă , a venit ideea de a le separa (transfera) folosind etichete JSP, cum ar fi <jsp:useBean/>. Pentru a implementa această idee, etichetele JSP au fost împărțite în trei grupuri logice: directive, elemente de script și acțiuni.

JSP 1.2

JSP 1.2 extinde specificația JavaServer Pages 1.1 (JSP 1.1) după cum urmează:

JSP 2.0

Noua versiune a specificației JSP adaugă următoarele funcționalități:

Bună ziua , $ { param . vizitator } <%-- similar cu : Bună ziua , <%= cerere . getParameter ( „vizitator” ) %> --%>

JSP 2.1

Platforma Java EE 5 se concentrează pe dezvoltarea ușoară folosind adnotările în limbajul Java care au fost introduse de J2SE 5.0 . JSP 2.1 sprijină acest obiectiv prin definirea adnotărilor de injectare a dependenței pe instrucțiunile JSP și ascultătorii de context.

Prezentare generală

Paginile JavaServer (JSP) vă permit să separați partea dinamică a paginilor de HTML static . Partea dinamică este închisă în etichete speciale "<% %>":

Numele dvs. de gazdă : <% = cerere . getRemoteHost () %>

Paginile JSP au o extensie .jspși sunt plasate în același loc cu paginile Web obișnuite. Structura unor astfel de pagini poate consta din cinci constructe: HTML , comentarii, elemente de script, directive și acțiuni. Pagina JSP este compilată într-un servlet cu conținut static care este trimis către fluxul de ieșire asociat cu metoda de serviciu . Prin urmare, la prima solicitare, acest proces poate provoca o ușoară întârziere. Comentariile dintr-un document sau program nu determină încetinirea programului, deoarece sunt ignorate de compilator și executant. Elementele de script vă permit să specificați codul Java care va deveni mai târziu parte a servlet-ului final, directivele vă permit să controlați întreaga structură a servlet-ului, iar acțiunile servesc la specificarea componentelor existente utilizate, precum și la controlul comportamentului motorului JSP. . Pentru a face scriptarea mai ușoară, există variabile predefinite, cum ar fi request, response, pageContext, session, out, application, config, page, exception. Un exemplu de pagină JSP care utilizează toate componentele JSP:

Comentarii

Comentariile sunt folosite pentru a explica codul sursă al unui program. În paginile JSP, comentariile pot fi împărțite în două grupuri:

  • Comentarii la codul sursă JSP
  • Comentarii de markup HTML .

Comentariile codului sursă JSP sunt marcate cu o secvență specială de caractere: <%--la începutul și --%>la sfârșitul comentariului. Acest tip de comentariu este eliminat atunci când pagina JSP este compilată. Exemplu de comentariu JSP:

<%-- Afișează catalogul de produse și coșul de cumpărături curent . --%>

Comentariile de markup HTML sunt formatate conform regulilor limbajului HTML. Acest tip de comentariu este tratat ca text static de către compilatorul JSP și plasat în documentul HTML de ieșire. Expresiile JSP din comentariile HTML sunt executate. Exemplu de comentariu HTML:

<!-- Data creării paginii : <%= java nou . util . Data () %> -->

Elemente de script

Specificația JSP distinge trei tipuri de elemente de script:

  • Declarații <%!una sau mai multe declarații%>
  • Expresii <%=o singură expresie%>
  • skriplets <%_%>

Declarațiile sunt utilizate în mod obișnuit pentru a defini variabile, metode, clase interne și alte constructe Java valide la nivel de clasă. Expresiile devin argumente pentru metoda out.print(). Cu ajutorul scriptlet -urilor , părțile de lucru ale codului Java sunt încorporate în paginile JSP.

Declarații JSP

Declarațiile JSP vă vor permite să definiți variabile, metode, clase interne și așa mai departe. Declarațiile sunt folosite pentru a defini constructele Java utilizate în program. Deoarece declarațiile nu sunt randate, ele sunt de obicei folosite împreună cu expresii JSP sau scriptlet-uri. Exemplul de fragment JSP arată numărul de solicitări către această pagină de când serverul a fost pornit (sau de la ultima modificare și reîncărcare a servlet-ului). Rețineți că în exemplu folosim atât o declarație, cât și o expresie și că în interiorul constructului, există un punct și virgulă ( ; ) după declarație:

<%! private int accessCount = 0 ; %> Numărul de accesări de pagină de la încărcarea serverului : < %= ++ accessCount % > Expresii JSP

Expresiile JSP sunt folosite pentru a insera valori Java direct în ieșire. Expresiile Java sunt evaluate, convertite într-un șir și inserate în pagină. Aceste calcule au loc în timpul execuției (adică atunci când pagina este solicitată) și, prin urmare, există acces deplin la informații despre cererea în sine. În expresii, puteți folosi constante, variabile, apeluri la diferite metode. Toate expresiile, indiferent de complexitatea conținutului lor, se evaluează la un singur rezultat sau număr. Paginile JSP se bazează pe JSP Writer , care preia orice rezultat al unei expresii, îl convertește într-un tip (text) și îl plasează înString buffer . De exemplu, următorul cod afișează data și ora unei anumite solicitări de pagină:

Ora curentă : <%= java nou . util . Data () %> Numele dvs. de gazdă : <% = cerere . getRemoteHost () %>

Trebuie să fiți atenți la trei reguli:

  • Expresiile JSP trebuie să conțină expresii Java;
  • fiecare expresie JSP trebuie să conțină o singură expresie Java;
  • Expresiile JSP nu trebuie să se termine cu punct și virgulă ( ;), spre deosebire de declarațiile Java.
Scripturi JSP

Scriptleturile JSP vă permit să inserați orice cod într-o metodă servlet care va fi generată atunci când pagina este randată, permițându-vă să utilizați majoritatea constructelor Java. Scriptleturile au, de asemenea, acces la aceleași variabile predefinite ca și expresiile. Prin urmare, de exemplu, pentru a afișa o valoare pe o pagină, trebuie să utilizați o variabilă predefinită out.

<% String queryData = cerere . getQueryString (); afară . println ( "Date de interogare suplimentare: " + queryData ); %>

Codul din interiorul scriptlet-ului este inserat așa cum a fost scris. Tot HTML static (text șablon) înainte sau după scriptlet este convertit folosind print. De exemplu, următorul fragment JSP conține un text mixt de șablon și scriptlet:

<% if ( Math . random () < 0,5 ) { %> < B > O zi bună </ B > ! <% } else { %> < B > Să ai o zi proastă </ B > pentru tine ! <% } %>

După convertirea scriptlet-ului, codul va arăta astfel:

if ( Math . aleatoriu () < 0,5 ) { out . println ( "<B>O zi buna</B>!" ); } else { afară . println ( „<B>O zi proastă</B> să ai!” ); }

Aceasta înseamnă că scriptlet-urile nu trebuie să conțină fragmente Java complete și că blocurile lăsate deschise pot afecta HTML static în afara scriptlet-ului.

Directive JSP

Pagina JSP poate trimite un mesaj către containerul corespunzător cu instrucțiuni despre ce trebuie făcut. Aceste mesaje se numesc directive. Toate directivele încep cu <%@, urmate de numele directivei și unul sau mai multe atribute cu valori și se termină cu %>. Directivele din pagina JSP determină containerul să trimită o solicitare pentru a executa un anumit serviciu care nu este declarat în documentul generat. Forma directivelor poate fi reprezentată după cum urmează:

<% @ atribut directive = „valoare” %>

De asemenea, puteți combina setarea mai multor atribute pe o singură directivă:

<% @ directivă atribut1 = "valoare1" atribut2 = "valoare2" ... atributN = " valoareN " %>

Există trei tipuri principale de directive: page , care vă permite să faceți lucruri precum importarea claselor, modificarea superclasei unui servlet și așa mai departe; include , care vă permite să inserați un fișier într-o clasă de servlet atunci când traduceți un fișier JSP într-un servlet; și taglib , care vă permite să extindeți multe etichete cu propriile dvs., pe care containerul JSP este capabil să le interpreteze.

Directiva de pagină JSP

După cum sugerează și numele, această directivă oferă atribute pentru pagina JSP. Atributele definite în această directivă sunt încorporate în pagina JSP dată și toate elementele sale statice imbricate, indiferent dacă au fost inserate cu directiva includesau cu acțiunea jsp:include. Forma directivei este pageurmătoarea:

<% @ atribut pagină = " valoare " %>

Să luăm următoarea intrare ca exemplu:

<% @ import page = java . util . * , com . clasele mele . * buffer = 15 kb %>

Această directivă afirmă că pagina JSP va importa clase din două pachete Java java.utilși com.myclassesapoi specifică dimensiunea memoriei tampon care ar trebui utilizată pentru a procesa pagina JSP dată.

În continuare, luați în considerare atributele directivei page:

  • import="пакет.class1, пакет.class2, ..., пакет.classN".Vă permite să specificați pachetele de importat. Acesta este singurul atribut care poate fi folosit de mai multe ori în aceeași directivă. Lista ar trebui să includă toate clasele Java pe care doriți să le utilizați și care nu fac parte din setul original de clase importate. Setul sursă conține: java.lang.*, javax.servlet.*, javax.servlet.jsp.* и javax.servlet.http.*.Un exemplu de utilizare a atributului import:
<% @ import page = "java.util.Date, javax.text.SimpleDateFormat, com.myclasses.*" %>
  • language="java".Acest atribut este destinat să stabilească limbajul de programare utilizat . Valoarea implicită este "java". Acest atribut este opțional, dar problema poate apărea în continuare dacă furnizorul JSP al containerului folosește alte limbi (cum ar fi JavaScript ). Un exemplu de intrare pentru acest atribut este următorul:
<% @ limba paginii = " java " %>
  • extends="пакет.class".Specifică superclasa (clasa părinte) pentru servletul generat. De obicei, un servlet este o extensie a clasei originale. Programatorii cu experiență pot folosi acest atribut pentru a-și crea propriile superclase. Un exemplu de utilizare a acestui atribut ar putea arăta astfel:
<% @ page extins = myPackage . HttpExample %>
  • session="true|false".Acest atribut poate fi setat la adevărat sau fals , ceea ce determină dacă pagina JSP participă la traducerea HTTP . Valoarea true(„adevărat”, implicit) semnalează că variabila predefinită session(tipul HttpSession) ar trebui să fie legată de o sesiune existentă, dacă există una, în caz contrar, este creată și legată o nouă sesiune. Valoarea false("false") specifică că sesiunile nu vor fi utilizate, iar încercările de a accesa variabila sessionvor avea ca rezultat o eroare la traducerea paginii JSP în servlet. Un exemplu de utilizare a acestui atribut ar putea arăta astfel:
<% @ page session = " fals " %>
  • buffer="размерkb|none".Acest atribut specifică cantitatea de memorie tampon necesară pentru obiectul JspWriter referit de variabila predefinită out. Valoarea implicită depinde de setările serverului, dar ar trebui să fie mai mare decât 8kb. Valoarea este dată fie sub forma „sizekb”, fie sub forma „none”. Dacă setați valoarea memoriei tampon la none, atunci servletul nu va stoca nimic în memoria tampon și va transmite rezultatul scris înaintea variabilei outdirect obiectului PrintWritercare este furnizat cu obiectul ServletResponse.. Dacă setați valoarea memoriei tampon la un anumit valoare, JspWriterva stoca date în această memorie, rezultând o creștere a performanței. Spre deosebire de un obiect , PrintWriterun obiect JspWriterpoate arunca excepții IOExceptions. Valoarea inițială a memoriei tampon este 8kB. Un exemplu de intrare pentru acest atribut ar putea arăta astfel:
<% @ pagebuffer = 12 kb % >
  • autoflush="true|false".Acest atribut poate fi adevărat sau fals . Valoarea true(„adevărat” în mod implicit) specifică că, dacă memoria tampon depășește, aceasta va fi ștearsă automat. O valoare false("false"), care este folosită rar, specifică faptul că o depășire a memoriei tampon ar trebui să aibă ca rezultat o excepție ( IOExceptions). De obicei, atributele și buffersunt autoflushsetate împreună într-o singură directivă. Când setați o valoare de atribut, buffer="none"setarea unei valori falsepentru un atribut este autoflushinvalidă. Un exemplu ar putea arăta astfel:
<% @ buffer de pagină = 16 kb autoflush = adevărat %>
  • isThreadSafe="true|false".Acest atribut poate fi adevărat sau fals . Valoarea true(„adevărat”, implicit) specifică modul normal de execuție a servlet-ului, atunci când cererile multiple sunt procesate simultan folosind o singură instanță de servlet, pe baza presupunerii că autorul are acces sincronizat la variabilele acestei instanțe. Valoarea false("false") semnalează că servletul ar trebui să moștenească SingleThreadModel(model cu un singur fir) în care cererile secvențiale sau concurente sunt gestionate de instanțe separate de servlet. Cu alte cuvinte, valoarea trueva determina containerul să trimită cereri multiple către servlet simultan, în timp ce valoarea va determina falsecontainerul să trimită cereri pe rând. Un exemplu de utilizare arată astfel:
<% @ page isThreadSafe = fals %>
  • info="информация".Specifică un șir care poate fi preluat atunci când se folosește metoda Servlet.getServletInfo().. De obicei, această metodă returnează informații despre servlet (cum ar fi autor, versiune și copyright). Un exemplu de intrare pentru acest atribut ar putea arăta astfel:
<% @ page info = Autor : Petr Ivanovich ; versiunea : 1.0 " %>
  • errorPage="url".Specifică o pagină JSP care este apelată atunci când apar evenimente Throwablescare nu sunt gestionate de această pagină. Dacă apare o excepție într-o pagină JSP, iar pagina JSP nu are propriul cod pentru a rezolva excepția, containerul va transfera automat controlul către adresa URL pe care ați specificat-o ca valoare a atributului errorPage. Un exemplu de intrare arată astfel:
<% @ page errorPage = " / myweb / errors / myerror . jsp " %>
  • isErrorPage="true|false".Acest atribut poate fi adevărat sau fals . Semnalează dacă această pagină poate fi utilizată pentru tratarea erorilor pentru alte pagini JSP sau nu. Valoarea implicită este false„false”. Un exemplu de utilizare a acestui atribut ar putea arăta astfel:
<% @ page isErrorPage = adevărat %>
  • contentType="MIME-Тип".Acest atribut setează MIMEtipul de ieșire și opțional puteți seta codificarea caracterelor în răspuns ( răspuns HTML ). Valoarea implicită MIMEeste text/html. Pentru claritate, putem folosi următorul exemplu:
<% @ page contentType = „text/plain” %>

Puteți obține același rezultat folosind un scriptlet:

<% răspuns . setContentType ( "text/plain" ); %> JSP include directiva

Această directivă vă permite să includeți fișiere într-un servlet atunci când traduceți o pagină JSP. Utilizarea directivei arată astfel:

<% @ include file = „url relativ” %>

URL -ul dat este de obicei interpretat în raport cu JSP-ul paginii pe care se află linkul, dar, ca și în cazul oricăror alte adrese URL relative, puteți spune sistemului locația resursei de care sunteți interesat în raport cu serverul web . directorul principal prin prefixarea URL - ului cu simbolul „ / ” . Conținutul unui fișier include este tratat ca text JSP simplu și, prin urmare, poate include elemente precum HTML static , elemente de script, directive și acțiuni. De exemplu, multe site-uri folosesc o mică bară de navigare pe fiecare pagină. Din cauza problemelor de utilizare a cadrelor HTML , această sarcină este adesea rezolvată prin plasarea unui tabel mic în partea de sus sau în jumătatea stângă a paginii, al cărui cod HTML este repetat de mai multe ori pentru fiecare pagină a site-ului. Directiva includeeste cea mai naturală modalitate de a îndeplini această sarcină, salvând dezvoltatorul de coșmarul copierii HTML în fiecare fișier. Se intampla asa:

<! DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN” > < html > < head > < title > Pagina de testare </ title > </ head > < body > <% @ include file = "/navbar .html" %> <!-- Un fragment specific din această pagină ... --> </ body > </ html >

Rețineți că, deoarece directiva includeinclude fișiere în timpul traducerii paginii, după ce faceți modificări în bara de navigare, va trebui să retraduceți toate paginile JSP folosind-o. Ceea ce în acest caz este un compromis bun, deoarece, de regulă, bara de navigare se schimbă destul de rar și procesul de conectare nu își pierde eficacitatea. Dacă fișierele incluse se modifică destul de des, puteți utiliza acțiunea jsp:include. Această acțiune include fișierul în timp ce accesați JSP.

Directiva JSP taglib

După cum știți deja, în paginile JSP, elementele sunt scrise folosind etichete (semne convenționale, etichete, mărci). Setul de etichete pe care un container JSP le poate interpreta poate fi extins cu așa-numitele biblioteci de etichete. De asemenea, puteți atașa acțiuni la un set extins de etichete, ceea ce duce la o extensie a limbajului JSP în sine. Etichetele pot fi împărțite în etichete standard și personalizate. Un mod generalizat de a scrie ar putea arăta astfel:

<% @ taglib uri = URI la biblioteca de etichete prefix = prefix de caractere %>

Biblioteca de etichete trebuie să fie identificată printr-o adresă URI (un identificator unic de resursă). URI poate fi absolut sau relativ. Identificatorul unic al resursei identifică locația unei biblioteci de etichete ( TLD ) care definește propriile etichete ale bibliotecii respective. Un exemplu de intrare de directivă:

<% @ taglib uri = " http://www.moywebserver.ru/naydiznaki.tld " prefix = "iskat" %>

O pagină JSP poate conține un număr infinit de directive taglib, dar fiecărei directive trebuie să i se atribuie un prefix diferit care definește conținutul bibliotecii de pe pagină. Ca prefix, puteți folosi orice text, cuvânt. În timp ce o directivă taglibpoate fi folosită oriunde într-o pagină JSP, orice etichete native pe care le folosesc aceste directive trebuie să fie folosite în spatele lor.

Acțiuni

Acțiunile JSP folosesc constructe de sintaxă XML pentru a controla funcționarea motorului servlet. Puteți să includeți dinamic un fișier, să reutilizați JavaBeans , să direcționați utilizatorul către o altă pagină sau să generați HTML pentru un plugin Java . Toate aceste acțiuni sunt discutate în detaliu mai jos. Amintiți-vă că, la fel ca în cazul tuturor XML , numele elementelor și atributelor sunt sensibile la majuscule și minuscule. Acțiunile pot fi împărțite în două grupe: standard și create (proprii, pe care le creează programatorul). Sunt permise următoarele acțiuni standard:

  • jsp:declaration  — Declarație, similară cu eticheta <%! … %>;
  • jsp:scriptlet  - Scriptlet, similar cu eticheta <% ... %>;
  • jsp:expression  - Expresie, similară cu eticheta <%= ... %>;
  • jsp:text  - Ieșire text;
  • jsp:useBean  - Găsiți sau creați o nouă instanță JavaBean;
  • jsp:setProperty  - Setează proprietățile JavaBean;
  • jsp:getProperty  - Inserați o proprietate JavaBean în fluxul de ieșire;
  • jsp:include  - Include fișierul în momentul solicitării paginii;
  • jsp:forward  - Redirecționează solicitarea către o altă pagină;
  • jsp:param  - Adaugă parametri la obiectul de solicitare, cum ar fi forward, include, plugin.;
  • jsp:plugin  - generează cod (în funcție de tipul de browser utilizat) care creează o etichetăOBJECTsauEMBEDpentru un plugin Java;
  • jsp:params  - Grupează parametrii în eticheta jsp:plugin;
  • jsp:fallback  - Specifică conținutul care va fi utilizat de browserul client dacă pluginul nu reușește să pornească. Folosit în interiorul elementului plugin.
jsp:useBean acțiune

Această acțiune vă permite să încărcați un JavaBean pentru utilizare ulterioară într-o pagină JSP. Această caracteristică vă permite să reutilizați clasele Java fără a sacrifica beneficiile oferite de servleturile JSP. În plus, aceasta este o modalitate de a elimina o mare parte a procesării Java din pagina JSP. Dacă transferați procesarea Java de la o pagină JSP la un JavaBean, atunci aceste funcții pot fi utilizate în alte pagini JSP. Cea mai simplă sintaxă pentru specificarea bean-ului de utilizat este:

< jsp : useBean id = "nume" class = "pachet.clasa" />

De obicei, aceasta înseamnă „crearea unei noi instanțe a unui obiect din clasa specificată de clasă și asocierea acesteia cu o variabilă numită de id ”. Cu toate acestea, puteți seta atributul scope (preia valorile page|request|session|application, pagepentru pagină, requestpentru solicitări, sessionpentru sesiuni sau dialoguri, applicationpentru aplicație), care este asociat beannu numai cu pagina curentă. În acest caz, este util să obțineți referințe la existente beans, iar acțiunea jsp:useBeaninstanțiază un obiect nou doar dacă nu există niciun obiect cu aceleași valori de id și domeniu . Acum că aveți un bean, puteți modifica proprietățile acestuia cu o acțiune jsp:setPropertysau folosind un scriptlet pentru a face acest lucru și apelând explicit metoda obiectului cu numele variabilei specificat mai devreme prin atributul id . Amintiți-vă că în cazul beans , când spuneți „acest bean are o proprietate de tip X numită foo„, vă referiți cu adevărat la „această clasă are o metodă getFoocare returnează date de tip X și o altă metodă care ia X setFooca parametru”. Acțiunea jsp:setPropertyeste tratată mai detaliat în secțiunea următoare, dar deocamdată ar trebui să vă amintiți că puteți fie setați în mod explicit valoarea setând atributul param pentru a obține valoarea din parametrul de interogare corespunzător, fie pur și simplu enumerați proprietățile pentru a obține valori de la parametrii de interogare cu aceleași nume ca și proprietăți. Puteți obține valorile proprietăților existente folosind expresii JSP sau scriptlet-uri apelând metoda corespunzătoare getXxxsau (cel mai frecvent) folosind o acțiune jsp:getProperty.

Clasa dată bean-ului trebuie să fie în directorul de clasă normal al serverului, nu în partea rezervată claselor care sunt reîncărcate automat după editare. De exemplu, pentru Java Web Server, toate clasele utilizate trebuie să fie plasate într-un director classessau într-un fișier .jar în directorul lib, nu în directorul servlets. Mai jos este un exemplu simplu care încarcă beanși setează/obține un parametru șir simplu.

BeanTest.jsp

<! DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN” > < html > < head > < title > Reutilizarea JavaBeans în JSP < / title > < / head > < body > < h1 > Reutilizarea JavaBeans în JSP </ h1 > < jsp : useBean id = "test" class = "hall.SimpleBean" /> < jsp : setProperty name = "test" property = "message" value = "Salut WWW" /> < p > Mesaj : < jsp : getProperty name = "test" property = "message" /> </ p > </ body > </ html >

SimpleBean.java

sala de pachete ; public class SimpleBean { private String message = "Textul mesajului nu este setat" ; public String getMessage () { return ( mesaj ); } public void setMessage ( șir de mesaje ) { this . mesaj = mesaj _ } }

Câteva detalii suplimentare despre modul de utilizare jsp:useBean. Cel mai simplu mod de a- bean l folosi este folosirea constructului:

< jsp : useBean id = "nume" class = "pachet.clasa" />

pentru a încărca beanși apoi utiliza jsp:setPropertyși jsp:getPropertypentru a modifica și obține proprietățile (parametrii). Cu toate acestea, există alte două moduri. În primul rând, puteți utiliza formatul containerului, și anume:

< jsp : useBean ... > Corp </ jsp : useBean >

pentru a se asigura că Corpul este executat numai atunci când o instanță beaneste creată pentru prima dată și nu atunci când este găsită și utilizată una existentă bean. După cum se discută mai jos, beanspoate fi partajat, astfel încât nu fiecare expresie jsp:useBeanare ca rezultat o nouă instanță de bean. În al doilea rând, pe lângă id și class , există alte trei atribute pe care le puteți utiliza: scope , type și beanName . Aceste atribute sunt descrise mai jos:

  • id  - Oferă numele variabilei care se referă labean. Dacă poate fi găsitbeancu aceleași valori aleidșiscope, atunci obiectul creat anterior este utilizat în loc de a crea o instanță nouă;
  • class  - specifică numele complet al pachetuluibean;
  • domeniul de aplicare  - specifică domeniul de aplicare în carebeanar trebui să fie disponibil. Poate lua patru valori valide: pagina , cerere , sesiune și aplicație . Este implicit la pagina , ceea ce înseamnă căbeaneste disponibil numai pe pagina curentă (găzduită pePageContextpagina curentă). Valoarea cererii înseamnă căbeaneste disponibilă numai pentru cererea curentă a clientului (găzduită în obiectulServletRequest). Valoarea sesiunii înseamnă că obiectul este disponibil pentru toate paginile pe durata de viață a celei curenteHttpSession. Și, în sfârșit, aplicația de valoare înseamnă că este disponibilă pentru toate paginile care folosesc acelașiServletContext. Motivul pentru care acest atribut este necesar este pentru căjsp:useBeandetermină crearea unei noi instanțe a obiectului dacă nu există niciun obiect existent cu acelașiidșiscope. În caz contrar, se folosește un obiect deja existent și toate elementelejsp:setParametersau oricare dintre etichetejsp:useBeansunt ignorate.
  • tip  - indică tipul variabilei care se referă la obiect. Trebuie să se potrivească cu numele clasei, superclasei sau interfeței implementate. Numele variabilei este specificat prin atributulid.
  • beanName  - dă numelebeancare va fi folosit de metodăinstantiate. Puteți specificatypeșibeanNameși omiteți atributulclass.
acțiune jsp:setProperty

Puteți utiliza jsp:setPropertycele descrise anterior beans. Puteți face acest lucru în două moduri. În primul rând, puteți utiliza jsp:setPropertydupă dar în afara elementului jsp:useBean, așa cum se arată în exemplu:

< jsp : useBean id = "numele meu" ... /> ... < jsp : numele setProperty = "Numele meu" proprietate = "uneaProprietate" ... />

În acest caz, se jsp:setPropertyexecută indiferent dacă a fost găsită o instanță existentă beansau a fost creată o instanță nouă. O altă opțiune este să plasați jsp:setPropertyîn corpul elementului jsp:useBean, așa cum se arată într-un alt exemplu:

< jsp : useBean id = "myName" ... > ... < jsp : setProperty name = "myName" property = "someProperty" ... /> </ jsp : useBean >

Acest lucru jsp:setPropertyse face numai dacă a fost creată o nouă instanță a obiectului, și nu atunci când este găsită una existentă. O acțiune jsp:setPropertyacceptă următoarele patru atribute:

  • nume  - Acest atribut necesar este folosit pentru a setabeanproprietățile cărora vor fi setate. Elementuljsp:useBeantrebuie să precedă utilizarea elementuluijsp:setProperty.
  • proprietate  - Acest atribut obligatoriu setează proprietatea pe care doriți să o setați. Cu toate acestea, există un caz special: valoarea " * " înseamnă că toți parametrii de interogare ale căror nume se potrivesc cu numele proprietățilorbeanvor fi trecuți la metoda de setare a proprietăților corespunzătoare.
  • valoare  - Acest atribut opțional stabilește valoarea proprietății. Valorile șirurilor de caractere sunt convertite automat în numeric, boolean , boolean , octet , octet , caracter și caracter folosind metoda standard avalueOfclasei corespunzătoare. De exemplu, valoarea"true"proprietățiibooleansauBooleanva fi convertită utilizând metodaBoolean.valueOf, iar valoarea „42” pentru proprietateaintsauIntegerva fi convertită folosind metodaInteger.valueOf. Nu puteți utiliza atributele value și param în același timp , dar puteți alege să nu le folosiți deloc. Vedeți mai jos descrierea atributului param .
  • param  - Acest atribut opțional setează parametrul de interogare utilizat pentru a obține proprietatea. Dacă acest parametru este absent în cererea curentă, nu are loc nicio acțiune: sistemul nu transmite valoareanullmetodei care setează proprietățile. Astfel, este acceptabil să se utilizezebeanproprietățile implicite, suprascriindu-le doar dacă sunt cerute de parametrii de solicitare. De exemplu, următorul fragment înseamnă următorul: „setați proprietateanumberOfItemsîn funcție de valoarea parametrului cereriinumItems, iar dacă nu există un astfel de parametru în cerere, nu se ia nicio acțiune”.
< jsp : setProperty name = "orderBean" property = "numberOfItems" param = "numItems" />

Dacă nu utilizați nici valuenici param, este același lucru ca și cum ați fi dat un nume care paramse potrivește cu numele property. Puteți aplica acest principiu de utilizare automată a proprietăților de solicitare ale căror nume se potrivesc cu numele proprietăților și mergeți mai departe setând numele proprietății la „ * ” și omițând parametrii valoare și parametri . În acest caz, serverul va procesa proprietățile valide și parametrii de interogare pentru potrivirea numelor identice. Următorul este un exemplu care este folosit beanpentru a crea un tabel cu numere prime. Dacă un parametru există numDigitsîn datele de solicitare, acesta este transmis la bean numDigits. La fel pentru numPrimes. JspPrimes.jsp

<! DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN” > < html > < head > < title > Reutilizarea JavaBeans în JSP < / title > < / head > < body > < h1 > Reutilizarea JavaBeans în JSP </ h1 > < jsp : useBean id = "primeTable" class = "hall.NumberedPrimes" /> < jsp : setProperty name = "primeTable" property = "numDigits" /> < jsp : setProperty name = "primeTable" property = "numPrimes" /> < p > Mai multe caractere prime < jsp : getProperty name = " primeTable " property = "numDigits" /> : < jsp : getProperty name = "primeTable" property = "numberedList" /> </ p > </ body > </ html > jsp:getProperty acțiune

Acest element determină valoarea proprietății bean, o convertește într-un șir și o trimite în fluxul de ieșire. Pentru a efectua o acțiune, trebuie setate două atribute: numele bean, care este prestabilit în acțiune jsp:useBeanși numele proprietății a cărei valoare trebuie determinată. Următorul este un exemplu de utilizare a acestei acțiuni:

< jsp : useBean id = "itemBean" ... /> ... < UL > < LI > Număr de articole : < jsp : getProperty name = "itemBean" property = "numItems" / > < LI > Preț unitar : < jsp : getProperty name = "itemBean" proprietate = "unitCost" /> </ UL > jsp:include acțiune

Această acțiune vă permite să inserați conținutul fișierelor în pagina generată. Sintaxa acțiunii:

< jsp : include pagina = "adresă URL relativă" flush = "adevărat" />

Spre deosebire de directiva include, care inserează un fișier în timpul etapei de traducere JSP a paginii, această acțiune inserează fișierul atunci când pagina este solicitată. Acest lucru duce la o oarecare pierdere a eficienței și elimină posibilitatea codului JSP în fișierul lipit, dar oferă un avantaj semnificativ în flexibilitate.

Un exemplu de inserare a conținutului a patru fișiere într-o pagină JSP:

<! DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.01//EN” „http://www.w3.org/TR/html4/strict.dtd” > < html > < head > < title > News </ title > </ head > < body > < h1 > News </ h1 > < p > Iată fragmente din cele mai populare patru articole ale noastre : </ p > < ol > < li >< jsp : include page = "news/Item1. html" flush = "adevărat" /></ li > < li >< jsp : include pagina = "news/Item2.html" flush = "adevărat" /></ li > < li >< jsp : include pagina = " news/ Item3.html" flush = "true" /></ li > < li >< jsp : include page = "news/Item4.html" flush = "true" /></ li > </ ol > </ body > </ html > jsp:forward action

Această acțiune vă permite să transmiteți cererea către altă pagină HTML statică, servlet sau pagină JSP. Spre deosebire de o acțiune jsp:include, procesarea paginii curente se încheie. Utilizează un singur atribut , care trebuie să conţină o adresă URLpage relativă , pe baza căreia este ordonat obiectul . Puteți adăuga alți parametri la parametrii de interogare inițiali trecuți către o altă pagină folosind o acțiune . Valoarea atributului poate fi fie o valoare statică, fie o valoare calculată în timpul solicitării, așa cum se arată în următoarele două exemple: requestjsp:parampage

< jsp : înainte pagina = "/utils/errorReporter.jsp" /> < jsp : înainte pagina = "<%= someJavaExpression %>" />

De asemenea, folosind o acțiune jsp:forward, puteți transfera controlul către o altă pagină, dar cu condiția ca înainte de a apela această acțiune nu a fost scris nimic în memoria tampon de ieșire (în caz contrar se va arunca o excepție IllegalStateException).

jsp:param action si jsp:params action

Această acțiune oferă informații despre tipul nume/valoare. Această acțiune este utilizată în principal împreună cu acțiunile deja familiare jsp:includeși jsp:forward. În plus, poate fi folosit și împreună cu acțiunea jsp:plugin. În alte cazuri, utilizarea acestei acțiuni nu contează. Folosit jsp:paramcu acțiuni jsp:includeși jsp:forwardtrece obiectul original către pagini noi request, care vor fi extinse cu noii parametri. Dacă specificați valori noi pentru parametrii deja existenți, atunci noile valori vor avea prioritate. Folosind o acțiune jsp:params, puteți seta mai mulți parametri simultan

jsp:plugin action

Această acțiune vă permite să introduceți elementul OBJECT sau EMBED (în funcție de tipul de browser pe care îl utilizați) necesar pentru a rula applet-uri care utilizează pluginul Java. Cu alte cuvinte, această acțiune servește la generarea codului HTML pentru a încorpora API-ul Java în pagina JSP. În același mod, puteți lipi adresa URL pentru a descărca module pentru API-ul Java de la JavaSoft, care oferă posibilitatea de a rula applet-uri în interiorul browserului. Formularul de înscriere pentru această acțiune arată astfel:

< jsp : tip plugin = "fasole|applet" cod = "fișier de clasă" codebase = "obiect CodeBase" align = "locație" arhivă = "lista de arhive" înălțime = "înălțime" hspace = "spațiu orizontal" jreversion = "versiune" nume = „nume componente” vspace = „spațiu vertical” lățime = „lățime” nspluginurl = „url” iepluginurl = „url” > < jsp : parametri > < jsp : nume param = „nume1” valoare = „valoare1” /> < jsp : nume param = "nume2" valoare = "valoare2" /> ... < jsp : nume param = "numeN" valoare = "valoareN" /> </ jsp : parametri > < jsp : alternativă > </ jsp : rezervă > </ jsp : plugin >

Să ne uităm la un exemplu de utilizare a acestei acțiuni în codul appletului:

< jsp : tipul de plugin = cod "applet" = "Blink.class" lățime = 300 înălțime = 100 > < jsp : params > < jsp : param name = lbl value = "Da, este mai delicios decât doar pâinea feliată! " /> < jsp : param name = speed value = "4" /> < jsp : params > < jsp : fallback > Browserul dvs. , dintr -un motiv necunoscut , nu poate rula acest applet </ fallback > </ jsp : plugin >

Un exemplu de pagină JSP care utilizează sintaxa XML

<? xml version = "1.0" codificare = "UTF-8" ?> < jsp : root xmlns : jsp = "http://java.sun.com/JSP/Page" version = "2.0" > < jsp : directive . page contentType = "application/xhtml+xml; charset=UTF-8" /> < jsp : tip de document de ieșire - rădăcină - element = tip de document "html" - public = " -//W3C//DTD XHTML 1.1//EN" tip de document - system = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" omite - xml - declaration = "true" /> < html xmlns = "http://www.w3.org/ 1999/xhtml" > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=UTF-8" /> < title > Page title </ title > </ head > < body > < h1 > Titlu </ h1 > < p > Text </ p > < jsp : scriptlet > out . print ( Calendar . getInstance ( request . getLocale ()). getFirstDayOfWeek () == Calendar . SUNDAY ? "In tara ta, saptamana incepe duminica" : "In tara ta, saptamana nu incepe duminica" ); </ jsp : scriptlet > </ body > </ html > </ jsp : root >

Vezi și

Link -uri