In le contexto del platteformaJava, le technologia JSP es correlate con isto delservlet: al tempore del prime invocation, lepaginas web JSP es de factotraducite automaticamente per uncompilator JSP a inservlet. Unpagina web JSP pote dunque esser vidite como un representation de alto nivello de unservlet. A causa de iste dependentia conceptual, anque le uso del technologia JSP require le presentia, super leservitor web, de unservlet container, ultra que de un servitor specific JSP dicite "motor JSP" (qui include lecompilator JSP); usualmente,servlet container e motor JSP es integrate in un unic producto (per exemplo,Tomcat exeque ambe le functiones).
JSP es un technologia alternative in comparation a numerose altere approches al generation depaginas web dynamic, per exemploPHP, oASP o le plus traditionalCGI. Illo differe de iste technologias non tanto per le typo de contentos dynamic qui pote esser producite, quanto per le architectura interne del programmatura qui constitue le application web (e, de consequentia, sur le tempores de disveloppamento, leportabilitate, lemodificabilitate, le performantias, e altere aspectos dequalitate del programmatura).
Sun Microsystems recommenda de usar lepatronoModello-Vista-Controllator (MVC) con lepaginas web JSP de maniera a divider le nivello de presentation ab isto del elaboration del requesta e ab le memorisation deldatos. Le normalservlet opagina web JSP dedicate es usate pro tractar ledatos. Post que le eleboration es terminate, le controlo passa a unpagina web JSP qui serve solo a visualisar le rendimento. Iste ultimapagina web JSP deberea continer soloHTML,XML e action e etiquetta JSP; lepagina web deberea facer uso delJavaBeans pro obtener ledatos.
In altere terminos in le disveloppamento de unapplication web le convention vole que in le JSP il ha minus de codiceJava possibile e illo presente va reclamar codiceJava native (objectos emethodos) implementate in classes separate special dicite exactementeJavaBeans. Iste separation permitte de facto un facilereuso de codice delJavabeans un vice reclamate in un qualcunque puncto requirite del application web.
Unpagina JSP es un documento de texto, scribite con unsyntaxe specific, qui representa unpagina web de contento partialmente o totalmente dynamic. Per elaborar lepagina web JSP, le motor JSP produce dynamicamente lepagina webHTML final qui essera presentate alnavigator web delusator. Lepagina web JSP pote continer tres typos de elementos, le quales corresponde a tres diverse modos de elaboration:contentos static,directivas escripto.
Le contentos static es portiones delpagina web JSP qui debe esser mantenite integralmente in lepagina web generate dynamicamente, sin alcun elaboration. Illos debe dunque esser scribite in lelinguage de marcation del qual le cliente pote beneficiar directemente, per exemploHTML (si le cliente es unnavigator web),WML (si le cliente es untelephono mobile qui accede alpagina web inWAP) oXML (varie typos de cliente).
Le directivas JSP pote esser interpretate como commandos al motor JSP. Iste commandos es exequite in un phase de pretractamento, prime que le portiones delpagina web contenentescripto es elaborate. Le duo directivas principal esinclude epage.
include: ordina al motor JSP de includer un alterefile in isto currente. Illo es un operation equivalente a isto decopiar e collar le contento delfile indicate in isto currente. (Un directiva de iste typo es simile a ist previdite per lepreprocessator delC/C++). Iste directiva pote esser usate, per exemplo, pro realisar contentos recurrente in diversepaginas web de unsito web.
<%@includefile="fileaincluder.ext"%>
page: il ha numerose variationes del directivapage, con scopios plus tosto diverse inter illos:
page import corresponde alimportJava, e indica qualclasses essera usate in le resto del documento;
page contentType indica in qual formato le documento sia scribite (per exemploHTML oXML)
<%@pagecontentType="text/html"%>
page errorPage specifica le "pagina de error" qui debe esser visualisate si le elaboration delpagina web dynamica face fiasco in sequito de verificar si de alcunexception
page isErrorPage indica si isto currente es un pagina de error
page taglib indica que lepagina web JSP face uso de unbibliotheca de etiquettas. Le bibliotheca debe esser identificate per unURI (Uniform Resource Identifier)
Le tertie categoria de elementos presente in unpagina web JSP es fragmentos decodice original inJava. Iste fragmentos de codice es dunque exequite per leMachina Virtual Java e produce in rendimento un texto, qui va contribuer al fonte delpagina web in via de generation. Le invocation de codiceJava es le clave del generation depaginas web dynamic in JSP; per exemplo, lepaginas web JSP de unsito web decomprasonline poterea includer codiceJava qui verifica le disponibilitate de un producto e genera in rendimento unpagina web qui reporta iste information.
Lepagina web JSP pote includer declarationes deattributos emethodos, introducite per le sequentia<%!. Talattributos emethodos devenira parte del classe "servlet" generate per lecompilator JSP (lor position intra le texto delpagina web JSP es irrelevante). Le disveloppator qui ha familiaritate con le technologiaservlet pote exploitar iste possibilitate, per exemplo, pro redefinir le "methodos de cyclo de vita" delservlet, comojspInit.
Le expressiones es introducite per le sequentia<%=, e contine un qualcunque expressionJava. Durante le elaboration delpagina web JSP, le expression es evalutate per le motor JSP, le resultato es convertite in serie de characteres, e le serie immergite in le codiceHTML/XML in le puncto correspondente a isto ubi le expression mesme appareva.
Le scriptlets es fragmentos de codice immergite in un qualunque puncto del texto. Conceptualmente, on pote immaginar que durante le construction delpagina web dynamic, le motor JSP include sin elaborationes le contentos static, in procedente ab alto verso le basso in le documento, e exeque immediatemente eventual scriptlet incontrate durante le operation. Technicamente, iste scriptlets es includite in lemethodos delservlet generate per lepagina web JSP, intra lemethodos qui produce le responsa a un requestaHTTP.
Le elementos de codice in unpagina web JSP pote referer se a un ensemble de variabiles predefinite:
out: representa lefluxo de rendimento super le qual lepagina web es producite. On tracta de unobjecto de classeJSPWriter. Su uso es sovente implicite (per exemplo in le expressiones), sed si il es necessari, on pote referer se a iste variabile
request: leobjecto de classeHttpServletRequest qui representa le requestaHTTP qui ha portate al activation delpagina web JSP/servlet
response: leobjecto de classeHttpServletResponse qui representa le responsaHTTP a inviar
session: leobjecto de classeHttpSession qui representa le sessionHTTP intra le qual lepagina web JSP ha essite invocate
application: illo permitte de acceder e de memorisar leobjectos pro render illos accessibile a un qualcunqueusator e modificabile de catapagina web
config: illo es sovente lassate inusate, visto que le informationes mittite a disposition per isteobjecto implicite es generalmente ponite e relevate in automatico.
Ultra al actiones predefinite, le disveloppatores pote adderaction disveloppate per illes pro usar le API pro le extensiones del etiquettas JSP. Le disveloppatores scribe un classeJava qui implementa un delinterfacies Tag e provide un descritionXML del bibliotheca in le qual on specifica le etiquettas e le classesJava qui lo implementa.
Lecompilator JSP cargara lefilemytaglib.tld e videra que le etiquettamyaction es implementate per le classeMyActionTag. Le prime vice que le etiquetta es usate in lefile, un instantia deMyActionTag essera create. Dunque (e cata vice que le etiquetta es usate), lemethododoStartTag() essera invocate quando le etiquetta de apertura es incontrate. Le resultato del etiquetta de apertura es examinate e on determina como tractar le contento del etiquetta. Le contento es le texto inter le etiquettas de apertura e de clausura. LemethododoStrtTag() pote restituer un del valores sequente:
SKIP_BODY - le contento del etiquetta non essera examinate.
EVAL_BODY_INCLUDE - illo tracta le contento del etiquetta.
EVAL_BODY_TAG - illo tracta le contento del TAG e invia le resultato in le stream de rendimento.
NOTA: si le etiquetta extende le classeBodyTagSupport illo essera invocate quando le corpore ha essite tractate a pena ante invocar lemethododoEndTag. Istemethodo es usate pro implementar constructiones de buclas.
Quando le etiquetta de clausura es incontrate, lemethododoEndTag es invocate. Iste methodo pote restituer un del valores sequente.
EVAL_PAGE - illo indica que le resto delpagina web JSP debe esser tractate.
SKIP_PAGE - illo indica que il non debe haber ulterior elaborationes. Le controlo lassa lepagina web JSP. Illo es empleate per le actiones in avante.
Le etiquettaMyAction describite in alto poterea haber un implementation simile a iste:
publicclassMyActionTagextendsTagSupport{//Releases all instance variables.publicvoidrelease(){...}publicMyActionTag(){...}//called for the start tagpublicintdoStartTag(){...}//called at the end tagpublicintdoEndTag()throwsJspTagException{...}}
Le internationalisation delpaginas web JSP es obtenite mediante le mesme technica usate in le normal applicationesJava, in altere parolas in usante leresource bundles.
Le sequente fragmento suggere como on poterea crear un intestation a diversepaginas web, de sorta que le presentation pote variar in alcun detalio (per exemplo, per render non cliccabile le ligamine alpagina web currente):
Le proxime exemplo illustra como diriger in modo uniforme le insertion de unapplet Java in unpagina web. Ante le advento del etiquettaOBJECT, il non existeva un methodo univoc pro integrar leapplet Java. Iste etiquetta es bastante tenue e on spera que in le futuro illo essera integrate in maniera de supportar attributos dynamic. Al stato actual, le etiquetta non supporta de appellar dynamicmente alapplet Java; per exemplo, si il ha unapplet Java qui designa un grafico qui require que le punctos sia passate como parametros, on non pote usar le etiquettajsp:params a minus que le punctos non es constante. Il non es possibile dunque, iterar super un ResultSet pro crear le etiquetta dejsp:param. Bisogna dunque diriger a mano cata etiquetta dejsp:param; cata un de iste etiquettas comocunque pote haber un nomine dynamic e un contento dynamic.
In le sequente fragmento, unobjecto con nominemyBean es create o rendite accessibile. Illo pertine al classeMyBean del pacchettocom.foo e qui essera accessibile per tote le duration del requesta. Isto significa que leobjecto essera accessibile e valide in tote lepaginas web qui es riappellate per le etiquettajsp:include ejsp:forward ab lepagina web qui primemente ha recipite le requesta. Le attributoscope pote haber le sequente valores:
request - le attributo essera valide in toto pro tote le duration del requesta. Quando le requesta habera essite processate per tote lepaginas web JSP, leobjecto essera dereferentiate.
page - le attributo essera disponibile solo per lepagina web currente.
session - le attributo es disponibile pro tote le duration del session delusator.
application - le attributo es disponibile pro cata instantia e non es jammais dereferentiate. Illo es lo mesme de definir un variabile static o global.
<jsp:useBeanid="myBean"class="com.foo.MyBean"scope="request"/><jsp:getPropertyname="myBean"property="lastChanged"/><jsp:setPropertyname="myBean"property="lastChanged"value="<%= new Date()%>"/>
Iste articulo contine material traducite abWikipedia in italiano. Le texto original se trova ait:JavaServer Pages, e es usate secundo le mandatos del licentia respective.