Pagini JavaServer

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
JSP
Extensie .jsp
Tip MIME application/jsp
Site-ul web www.oracle.com/technetwork/java/jsp-138432.html

În informatică JavaServer Pages , indicat de obicei prin acronimul JSP (de asemenea, uneori citit ca Java Scripting Preprocessor ), este o tehnologie de programare web în Java pentru dezvoltarea logicii de prezentare (de obicei conform modelului MVC ) a aplicațiilor web , oferind conținut dinamică în format HTML sau XML . Se bazează pe un set de etichete speciale, într-o pagină HTML, cu care pot fi invocate funcții predefinite sub formă de cod Java ( JSTL ) și / sau funcții JavaScript . În plus, vă permite să creați noi biblioteci de etichete care extind setul de etichete standard (JSP Custom Tag Library ). Bibliotecile de etichete JSP pot fi considerate extensii independente de platformă ale funcționalității unui server web .

Descriere

În contextul platformei Java, tehnologia JSP este corelată cu cea a servleturilor : în momentul primei invocații, paginile JSP sunt de fapt traduse automat de un compilator JSP într-un servlet . O pagină JSP poate fi văzută apoi ca o reprezentare la nivel înalt a unui servlet. Datorită acestei dependențe conceptuale, chiar și utilizarea tehnologiei JSP necesită prezența, pe serverul web , a unui container servlet , precum și a unui server JSP specific numit motor JSP (care include compilatorul JSP); de obicei, servletul container și motorul JSP sunt integrate într-un singur produs (de exemplu, Tomcat le face pe ambele).

JSP este o tehnologie alternativă la numeroase alte abordări ale generării de pagini web dinamice, de exemplu PHP sau ASP sau mai tradiționalul CGI . Diferă de aceste tehnologii nu atât pentru tipul de conținut dinamic care poate fi produs, cât și pentru arhitectura internă a software-ului care constituie aplicația web (și, în consecință, asupra timpilor de dezvoltare, portabilitate, modificabilitate , performanță și altele aspecte ale calității software-ului ).

Paradigma MVC

Sun Microsystems recomandă utilizarea Model-View-Controller model cu paginile JSP pentru a împărți stratul de prezentare de la prelucrarea cerere și stocare a datelor. Servletele normale sau paginile JSP dedicate sunt utilizate pentru procesarea datelor. După finalizarea procesării, controlul trece la o pagină JSP care este utilizată doar pentru a vizualiza ieșirea. Această ultimă pagină JSP ar trebui să conțină doar acțiuni și etichete HTML , XML și JSP; pagina ar trebui să utilizeze JavaBeans pentru a obține datele.

Cu alte cuvinte, în dezvoltarea unei aplicații web convenția dorește ca în JSP să existe un cod Java cât mai puțin posibil și prezentul să apeleze cod Java nativ (obiecte și metode ) implementat în clase speciale separate numite JavaBeans. Această separare permite reutilizarea ușoară a codului Java Bean după ce a fost apelat în orice punct necesar al aplicației web.

Structura unei pagini JSP

Un JSP este un document text, scris cu o sintaxă specifică, care reprezintă o pagină web cu conținut parțial sau total dinamic. Prin procesarea paginii JSP, motorul JSP produce dinamic pagina HTML finală care va fi prezentată browserului web al utilizatorului . Pagina JSP poate conține trei tipuri de elemente, care corespund a trei moduri de procesare diferite: conținut static , directive și scripturi .

Conținut static

Conținutul static este porțiuni ale paginii JSP care trebuie păstrate în întregime în pagina web generată dinamic, fără nicio prelucrare. Prin urmare, trebuie să fie scrise în limbajul etichetei pe care clientul îl poate folosi direct, de exemplu HTML (dacă clientul este un browser), WML (dacă clientul este un telefon mobil care accesează pagina în WAP ) sau XML (diferite tipuri de client).

Directivele

Directivele JSP pot fi interpretate ca comenzi care vizează motorul JSP. Aceste comenzi sunt executate într-o fază de preprocesare , înainte ca porțiunile scriptate ale paginii să fie procesate. Cele două directive principale sunt include și page .

  • include : instruiește motorul JSP să includă un alt fișier în cel curent. Acest lucru este echivalent cu copierea și lipirea conținutului fișierului indicat în cel curent. (O astfel de directivă este similară cu cea așteptată de preprocesorul C / C ++ ). Această directivă poate fi utilizată, de exemplu, pentru a crea conținut recurent pe diferite pagini ale unui site web.
<%@ include file="filedaincludere.ext" %>
  • page : Există mai multe variante ale directivei de page , cu scopuri destul de diferite:
page import de import page import corespunde Java import , și indică clase vor fi utilizate în restul documentului;
<%@ page import="java.util.*" %> //importa tutte le classi del package java.util
page contentType indică în ce format este scris documentul (de exemplu HTML sau XML)
<%@ page contentType="text/html" %>
page errorPage specifică „pagina de eroare” care trebuie afișată dacă procesarea dinamică a paginii eșuează din cauza apariției unor excepții
page isErrorPage indică dacă pagina curentă este o pagină de eroare
<%@ page isErrorPage=false %> //specifica che non è una pagina di errore
page isThreadSafe indică dacă servletul generat de pagina JSP este sigur pentru fire
page taglib indică faptul că pagina JSP folosește o bibliotecă de etichete . Biblioteca trebuie identificată printr-un identificator de resurse uniform ( URI )
<%@ taglib prefix="myprefix" uri="taglib/miataglib.tld" %>

Scripting

A treia categorie de elemente dintr-o pagină JSP sunt fragmente de cod sursă (Java). Aceste fragmente de cod sunt apoi executate de mașina virtuală Java și generează un text, care contribuie la generarea sursei paginii web. Invocarea codului Java este cheia generării de pagini dinamice în JSP; de exemplu, paginile JSP ale unui site de cumpărături online pot include cod Java care verifică disponibilitatea unui produs și afișează o pagină care raportează aceste informații.

Declarații

Pagina JSP poate include declarații de atribute și metode , introduse de secvența <%! . Aceste atribute și metode vor deveni parte a clasei „servlet” generată de compilatorul JSP (poziția lor în textul paginii JSP este irelevantă). Dezvoltatorul familiarizat cu tehnologia servletului poate profita de această posibilitate, de exemplu, pentru a suprascrie „metodele ciclului de viață” ale servletului, cum ar fi jspInit .

<%! int serverInstanceVariable = 1; %>

Expresii

Expresiile sunt introduse prin secvența <% = și conțin orice expresie Java. În timpul procesării paginii JSP, expresia este evaluată de motorul JSP, rezultatul este convertit într-un șir și șirul inserat în codul HTML / XML în punctul corespunzător celui în care apare expresia în sine.

<body>
Sei l'utente registrato nr. <%= registroUtenti.conta() %>
</body>

Scriptlet

Scriptletele sunt fragmente de cod încorporate oriunde în text. Din punct de vedere conceptual, vă puteți imagina că în timpul construcției paginii web dinamice, motorul JSP va include conținut static fără procesare, continuând de sus în jos în document și executând imediat orice scriptlet întâlnit în timpul operației. Din punct de vedere tehnic, aceste scriptleturi sunt incluse în metodele de servlet generate de pagina JSP, în cadrul metodelor care produc răspunsul la o cerere HTTP .

Variabile implicite

Elementele de cod dintr-o pagină JSP se pot referi la un set de variabile predefinite:

out : reprezintă fluxul de ieșire pe care este produsă pagina web. Este un JSPWriter clasă JSPWriter . Utilizarea sa este adesea implicită (de exemplu în expresii), dar această variabilă poate fi menționată dacă este necesar
page : reprezintă servletul generat de pagina JSP
pageContext : un PageContext clasă PageContext , care conține date asociate întregii pagini. Obiectul poate fi transferat de la o pagină JSP la alta
request : obiectul clasei HttpServletRequest care reprezintă cererea HTTP care a dus la activarea paginii JSP / servlet
response : obiectul clasei HttpServletResponse care reprezintă răspunsul HTTP de trimis
session : obiectul clasei HttpSession care reprezintă sesiunea HTTP în cadrul căreia a fost invocată pagina JSP
application : vă permite să accesați și să stocați obiecte pentru a le face accesibile de către orice utilizator și editabile de pe orice pagină
config : este adesea lăsat neutilizat, deoarece informațiile puse la dispoziție de acest obiect implicit sunt, în general, setate și detectate automat.

Acțiuni JSP

Acțiunile JSP sunt etichete XML care vă permit să controlați anumite aspecte ale comportamentului serverului web . Câteva exemple sunt următoarele:

jsp:include : oferă control unei alte pagini JSP, cu returnarea controlului la finalizarea procesării; similar cu un apel de procedură
jsp:forward : dă controlul, permanent, altei pagini JSP
jsp:param : introduce un parametru suplimentar în contextul acțiunilor precum include și forward .

Biblioteci de etichete JSP

În plus față de acțiunile predefinite, dezvoltatorii pot adăuga acțiuni dezvoltate de aceștia utilizând API-urile de extensie a etichetei JSP. Dezvoltatorii scriu o clasă Java care implementează una dintre interfețele Tag și oferă o descriere XML a bibliotecii în care sunt specificate etichetele și clasele java care le implementează.

Să luăm în considerare următorul cod:

 <% @ taglib uri = "mytaglib.tld" prefix = "myprefix"%>
 ...
<myprefix: myaction> <% - eticheta de deschidere%>
 ...
</ myprefix: myaction> <% - eticheta de închidere%>
...

Compilatorul JSP va încărca fișierul mytaglib.tld și va vedea că eticheta „myaction” este implementată de clasa „MyActionTag”. Prima dată când eticheta este utilizată în fișier, „MyActionTag” va fi instanțiat. Apoi (și ori de câte ori este utilizată eticheta), metoda „ doStartTag ()” va fi invocată când se întâlnește eticheta de deschidere. Rezultatul etichetei de deschidere este examinat și se determină modul de procesare a conținutului etichetei. Conținutul este textul dintre etichetele de deschidere și de închidere. Metoda doStartTag () poate returna una dintre următoarele valori:

  • SKIP_BODY - conținutul etichetei nu va fi scanat.
  • EVAL_BODY_INCLUDE - procesați conținutul etichetei.
  • EVAL_BODY_TAG - procesează conținutul TAG și trimite rezultatul la fluxul de ieșire.

NOTĂ : dacă eticheta extinde clasa BodyTagSupport va fi invocată atunci când corpul a fost procesat chiar înainte de a invoca metoda doEndTag . Această metodă este utilizată pentru a implementa construcții de buclă.

Când se întâlnește eticheta de închidere, se invocă metoda doEndTag . Această metodă poate returna una dintre următoarele valori.

  • EVAL_PAGE - indică faptul că restul paginii JSP urmează să fie procesată.
  • SKIP_PAGE - indică faptul că nu ar trebui să existe alte prelucrări. Controlul părăsește pagina JSP. Se folosește pentru acțiuni înainte.

Eticheta MyAction descrisă mai sus ar putea avea o implementare similară cu aceasta:

 public class MyActionTag extinde TagSupport {
   // Eliberează toate variabilele de instanță.
   public void release () {...}
public MyActionTag () {...}
// a solicitat eticheta de start
   public int doStartTag () {...}
// sunat la eticheta de final
   public int doEndTag () aruncă JspTagException {...}
}

Internaționalizare

Internaționalizarea paginilor JSP se realizează prin aceeași tehnică utilizată în aplicațiile Java normale, adică folosind pachete de resurse .

Exemple

Următorul fragment sugerează modul în care ați putea crea un antet către diferite pagini web, făcând prezentarea să difere în anumite detalii (de exemplu, făcând linkul către pagina curentă non-clicabil):

 <jsp: include page = "header.jsp"> // include o parte standard
<jsp: param name = "this page" value = "contacts" /> // Furnizez informații specifice
</ jsp: include>

Următorul exemplu ilustrează cum să gestionați în mod consecvent inserarea unui applet pe o pagină web. Înainte de apariția etichetei <OBJECT> , nu exista o modalitate unică de a integra appleturile. Această etichetă este destul de rară și sperăm că în viitor va fi integrată pentru a susține atribute dinamice. În prezent, eticheta nu acceptă apeluri dinamice către applet; de exemplu, dacă aveți un applet care desenează un grafic care necesită trecerea punctelor ca parametri, nu puteți utiliza eticheta jsp: params decât dacă punctele sunt constante. Prin urmare, nu este posibil să iterați pe un ResultSet pentru a crea etichete jsp: param. Prin urmare, trebuie să gestionăm fiecare etichetă jsp manual: param; cu toate acestea, fiecare dintre aceste etichete poate avea un nume dinamic și un conținut dinamic.

 <jsp: plugin type = applet height = "100%" width = "100%"
      arhivă = "myjarfile.jar, myotherjar.jar"
      codebase = "/ applets"
      code = "com.foo.MyApplet">
  <jsp: params>
     <jsp: param name = "enableDebug" value = "true" />
  </ jsp: params>
  <jsp: rezervă>
    Browserul dvs. nu acceptă applet-uri.
  </ jsp: rezervă>
</ jsp: plugin>

În următorul fragment, un obiect cu numele myBean este creat sau accesibil , care aparține clasei MyBean a pachetului com.foo și care va fi accesibil pe durata solicitării. Aceasta înseamnă că obiectul va fi accesibil și valid pe toate paginile care sunt apelate prin etichetele <jsp: include> și <jsp: forward> de pe pagina care a primit prima cerere. Atributul scope poate avea următoarele valori:

  • cerere - atributul va fi valabil în toate pe durata cererii. Când solicitarea a fost procesată de toate paginile JSP, obiectul va fi deverențiat.
  • pagina - atributul va fi disponibil numai pentru pagina curentă.
  • sesiune - atributul este disponibil pe durata sesiunii utilizatorului.
  • aplicație - atributul este disponibil pentru fiecare instanță și nu este niciodată dereferențiat. Este la fel ca definirea unei variabile statice sau globale.
 <jsp: useBean id = "myBean" class = "com.foo.MyBean" scope = "request" />
<jsp: getProperty name = "myBean" property = "lastChanged" />
<jsp: setProperty name = "myBean" property = "lastChanged" value = "<% = new Date ()%>" />

JSP 2.0

Noua versiune a specificației JSP include noi caracteristici care vizează creșterea productivității dezvoltatorilor. Detaliat:

  • un limbaj de expresie (EL) care permite dezvoltatorilor să creeze șabloane de stil (precum cele ale Velocity );
  • o modalitate mai rapidă și mai ușoară de a crea etichete noi.

Elemente conexe

Alte proiecte

linkuri externe