JavaServer Pages

De Wikipedia, le encyclopedia libere
Saltar a: navigation, cercar
JavaServer Pages
instantia de: file format[*], Template processor[*]
subclasse de: dynamic web page[*]


sito web official: http://www.oracle.com/technetwork/java/jsp-138432.html
Commons: JavaServer Pages

In informatica JavaServer Pages, usualmente indicate con le abbreviation JSP (legite anque alcun vices como Java Scripting Preprocessor), es un technologia de programmation web in Java pro le disveloppamento del "logica de presentation" (typicamente secundo le pattern MVC) de applicationes Web, per fornir contentos dynamic in formato HTML o XML. Illo se basa sur un ensemble de special etiquettas de HTML/XML, intra un pagina HTML, con le qual on pote invocar functiones predefinite in forma de codice Java (JSTL) e/o functiones Javascript. In addition, permitte de crear bibliothecas de nove etiquettas que extende le ensemble del etiquettas standard (JSP Custom Tag Library). Le bibliothecas de etiquettas JSP pote esser considerate extensiones independente del platteforma del functionalitate de un servitor web.

Description[modificar | modificar fonte]

In le contexto del platteforma Java, le technologia JSP es correlate con aquelle del servlet: al tempore del prime invocation, le paginas JSP son de facto traducite automaticamente per un compilator JSP a in servlet. Un pagina JSP pote dunque esser vidite como un representation a alto nivello de un servlet. A causa de iste dependentia conceptual, anque le uso del technologia JSP require le presentia, sur le servitor web, de un servlet container, ultra que de un server specific JSP dicite "motor JSP" (que include le compilator JSP); usualmente, servlet container e motor JSP son 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 de paginas web dynamic, per exemplo PHP, o ASP o le plus traditional CGI. Illo differe de iste technologias non tanto per le typo de contentos dynamic que pote esser producite, quanto per le architectura interne del programmatura que constitue le application web (e, de consequentia, sur le tempores de disveloppamento, le portabilitate, le modificabilitate, le performantias, e altere aspectos de qualitate del programmatura).

Paradigma MVC[modificar | modificar fonte]

Sun Microsystems recommenda de utilisar le pattern Model-View-Controller con le paginas JSP in modo a divider le nivello de presentation desde aquelle del elaboration del request e desde le memorisation del datos. Le normal servlet o del paginas JSP dedicate son utilisate pro processar le datos. Post que le eleboration es terminate, le controlo passa a un pagina JSP que serve solo a visualisar le rendimento. Iste ultima pagina JSP deberea continer solo HTML, XML e action e etiquetta de JSP; le pagina deberea facer uso del JavaBeans pro obtener le datos.

In altere terminos in le disveloppamento de un application web le convention vole que in le JSP il ha minus de codice Java possibile e aquelle presente va reclamar codice Java native (objectos e methodos) implementate in classes separate special dicite exactemente JavaBeans. Iste separation permitte de facto un facile reuso de codice del Java beans un vice reclamate in un qualcunque puncto requirite del application web.

Structura de un pagina JSP[modificar | modificar fonte]

Un pagina JSP es un documento de texto, scribite con un syntaxe specific, que representa un pagina web de contento partialmente o totalmente dynamic. Per elaborar le pagina JSP, le motor JSP produce dynamicamente le pagina HTML final que essera presentate al navigator web del usator. Le pagina JSP pote continer tres typos de elementos, al qual corresponde tres diverse modos de elaboration: contentos static, directivas e scripto.

Contentos static[modificar | modificar fonte]

Le contentos static son portiones del pagina JSP que debe esser mantenite integralmente in le pagina web generate dynamicamente, sin alcun elaboration. Illos debe dunque esser scribite in le linguage de etiquettas del qual le cliente pote beneficiar directemente, per exemplo HTML (si le cliente es un navigator web), WML (si le cliente es un telephono mobile que accede al pagina in WAP) o XML (varie typos de cliente).

Directivas[modificar | modificar fonte]

Le directivas JSP pote esser interpretate como comandi rivolti al motor JSP. Iste comandi son exequite in un fase de preprocessing, prime que le portiones del pagina contenente scripto son elaborate. Le duo directivas principal son include e page.

  • include: ordina al motor JSP de includer un altere file in lo currente. Illo es un operation equivalente a aquelle de copiar e collar le contento del file indicate in lo currente. (Un directiva de iste typo es simile a aquelle previdite per le preprocessor del C/C++). Iste directiva pote esser usate, per exemplo, pro realisar contentos recurrente in diverse paginas de un sito web.
<%@ include file="fileaincluder.ext" %>
  • page: il ha numerose variationes del directiva page, con scopios plus tosto diverse inter illos:
page import corresponde al import Java, e indica qual classes essera utilisate in le resto del documento;
<%@ page import="java.util.*" %> //importa tote le classes del package java.util
page contentType indica in qual formato le documento sia scribite (per exemplo HTML o XML)
<%@ page contentType="text/html" %>
page errorPage specifica le "pagina de error" que debe esser visualisate si le elaboration del pagina dynamica face fiasco in sequito al verificar si de alcun exception
page isErrorPage indica si lo currente es un pagina de error
<%@ page isErrorPage=false %> //specifica que non es un pagina de error
page isThreadSafe indica si le servlet generate per le pagina JSP es thread safe
page taglib indica que le pagina JSP face uso de un bibliotheca de etiquettas. Le bibliotheca debe esser identificate per un URI (Uniform Resource Identifier)
<%@ taglib prefix="myprefix" uri="taglib/mitaglib.tld" %>

Scripting[modificar | modificar fonte]

Le tertie categoria de elementos presente in un pagina JSP son fragmentos de codice fonte (Java). Iste fragmentos de codice son dunque exequite per le Java Virtual Machine e produce in rendimento un texto, que va a contribuer al fonte del pagina web in via de generation. Le invocation de codice Java es le clave del generation de paginas dynamic in JSP; per exemplo, le paginas JSP de un sito de compras online poterea includer codice Java que verifica le disponibilitate de un producto e genera in rendimento un pagina que reporta iste information.

Declarationes[modificar | modificar fonte]

Le pagina JSP pote includer declarationes de attributos e methodos, introducite per le sequentia <%!. Tal attributos e methodos devenira parte del classe "servlet" generate per le compilator JSP (lor position intra le texto del pagina JSP es irrelevante). Le disveloppator que ha familiaritate con le technologia servlet pote exploitar iste possibilitate, per exemplo, pro facer overriding del "methodos de life-cycle" del servlet, como jspInit.

<%! int serverInstanceVariable = 1; %>

Expressiones[modificar | modificar fonte]

Le expressiones son introducite per le sequentia <%=, e contine un qualcunque expression Java. Durante le elaboration del pagina JSP, le expression es valutate per le motor JSP, le resultato es convertite in stringa, e le stringa immergite in le codice HTML/XML in le puncto correspondente a aquelle ubi le expression mesme appareva.

<body>
	Vos es le usator registrate nr. <%= registroUtenti.conta() %>
<body>

Scriptlet[modificar | modificar fonte]

Le scriptlets son fragmentos de codice immergite in un qualunque puncto del texto. Conceptualmente, on pote immaginar que durante le construction del pagina web dynamic, le motor JSP include sin elaborationes le contentos static, in procedente desde alto verso le basso in le documento, e exeque immediatemente eventual scriptlet incontrate durante le operation. Technicamente, iste scriptlets son includite in le methodos del servlet generate per le pagina JSP, intra le methodos que produce le responsa a un requesta HTTP.

Variabiles implicite[modificar | modificar fonte]

Le elementos de codice in un pagina JSP pote referer se a un ensemble de variabiles predefinite:

out: representa le fluxo de rendimento sur le qual le pagina web es producite. On tracta de un objecto de classe JSPWriter. Su uso es sovente implicite (per exemplo in le expressiones), ma si il es necessari, on pote referer se a iste variabile
page: representa le servlet generate per le pagina JSP
pageContext: un objecto de classe PageContext, que contine datos associate al intera pagina. Le objecto pote esser transferite desde un pagina JSP a un altere
request: le objecto de classe HttpServletRequest que representa le requesta HTTP que ha portate al activation del pagina JSP/servlet
response: le objecto de classe HttpServletResponse que representa le responsa HTTP a inviar
session: le objecto de classe HttpSession que representa le session HTTP intra le qual le pagina JSP ha essite invocate
application: permitte de acceder e de memorisar le objectos pro render los accessibile de qualcunque usator e modificabile de cata pagina
config: es sovente lassate inutilisate, visto que le informationes mittite a disposition per iste objecto implicite son generalmente ponite e relevate in automatico.

Actiones JSP[modificar | modificar fonte]

Le actiones JSP son etiquettas XML que permitte de controlar alcun aspectos del comportamento del servitor web. Alcun exemplos son le sequentes:

jsp:include: cede le controlo a un altere pagina JSP, con retorno del controlo a elaboration terminate; simile a un appellar de procedura
jsp:forward: cede le controlo, definitivemente, a un altere pagina JSP
jsp:param: introduce un parametro additional in le contexto de actiones como include e forward.

Bibliothecas de etiquettas JSP[modificar | modificar fonte]

Ultra al actiones predefinite, le disveloppatores pote adder action disveloppate per illes per usar le API pro le extensiones del etiquettas JSP. Le disveloppatores scribe un classe Java que implementa un del interfacies Tag e forni un descrition XML del bibliotheca in le qual on specifica le etiquettas e le classes Java que implementa los.

Considera le sequente codice:

<%@ taglib uri="mytaglib.tld" prefix="myprefix" %>
...
<myprefix:myaction> <%-- le etiquetta de apertura %>
...
</myprefix:myaction> <%-- le etiquetta de clausura %>
...

Le compilator JSP cargara le file mytaglib.tld e videra que le etiquetta myaction es implementate per le classe MyActionTag. Le prime vice que le etiquetta es usate in le file, un instantia de MyActionTag essera create. Dunque (e cata vice que le etiquetta es usate), le methodo doStartTag() essera invocate quando le etiquetta de apertura es incontrate. Le resultato del etiquetta de apertura es examinate e on determina como processar le contento del etiquetta. Le contento es le texto inter le etiquettas de apertura e de clausura. Le methodo doStrtTag() pote restituer uno del sequente valores:

  • SKIP_BODY - le contento del etiquetta non essera examinate.
  • EVAL_BODY_INCLUDE - processa le contento del etiquetta.
  • EVAL_BODY_TAG - processa le contento del TAG e invia le resultato in le stream de rendimento.

NOTA: si le etiquetta extende le classe BodyTagSupport essera invocate quando le corpore ha essite processate a pena ante invocar le methodo doEndTag. Iste methodo es usate pro implementar constructiones de loop.

Quando le etiquetta de clausura es incontrate, le methodo doEndTag es invocate. Iste methodo pote restituer uno del sequente valores.

  • EVAL_PAGE - indica que le resto del pagina JSP debe esser processate.
  • SKIP_PAGE - indica que il non debe haber ulterior elaborationes. Le controlo lassa le pagina JSP. Illo es empleate per le actiones de forward.

Le etiquetta MyAction describite in alto poterea haber un implementation simile a iste:

public class MyActionTag extends TagSupport 
{
	//Releases all instance variables.
	public void release() {...}

	public MyActionTag() { ... }
		
	//called for the start tag
	public int doStartTag() { ... }

	//called at the end tag
	public int doEndTag() throws JspTagException { ... }
}

Internationalisation[modificar | modificar fonte]

Le internationalisation del paginas JSP es obtenite mediante le mesme technica utilisate in le normal applicationes Java, in altere parolas per usar le resource bundles.

Exemplos[modificar | modificar fonte]

Le sequente fragmento suggere como on poterea crear un intestation a diverse paginas web, de sorta que le presentation pote variar in alcun detalio (per exemplo, per render non cliccabile le ligamine al pagina currente):

<jsp:include page="intestation.jsp" > //include un parte standard
	<jsp:param name="istepagina" value="contacts"/> //forni informationes specific
</jsp:include>

Le proxime exemplo illustra como diriger in modo uniforme le insertion de un applet in un pagina web. Ante le advento del etiquetta OBJECT, il non existeva un methodo univoc pro integrar le applet. Iste etiquetta es bastante tenue e on spera que in futuro essera integrate in modo a supportar attributos dynamic. Al stato actual, le etiquetta non supporta appellar dynamic al applet; per exemplo, si il ha un applet que designa un grafico que require que le punctos sia passate como parametros, on non pote usar le etiquetta jsp:params a minus que le punctos non son constante. Il non es possibile dunque, iterar sur un ResultSet pro crear le etiquetta de jsp:param. Bisogna dunque diriger a mano cata etiquetta de jsp:param; cata un de iste etiquettas comocunque pote haber un nomine dynamic e un contento dynamic.

<jsp:plugin type=applet height="100%" width="100%"
	archive="myjarfile.jar,myotherjar.jar"
	codebase="/applets"
	code="com.foo.MyApplet" >
	<jsp:params>
		<jsp:param name="enableDebug" value="true" />
	</jsp:params>
	<jsp:fallback>
		Your browser does not support applets.
	</jsp:fallback>
</jsp:plugin>

In le sequente fragmento, un objecto con nomine myBean es create o rendite accessibile. Illo pertine al classe MyBean del package com.foo e que essera accessibile per tote le duration del request. Isto significa que le objecto essera accessibile e valide in tote le paginas que son riappellate per le etiquetta jsp:include e jsp:forward desde le pagina que primemente ha recipite le requesta. Le attributo scope pote haber le sequente valores:

  • request - le attributo essera valide in toto per tote le duration del request. Quando le request habera essite processate per tote le paginas JSP, le objecto essera dereferentiate.
  • page - le attributo essera disponibile solo per le pagina currente.
  • session - le attributo es disponibile per tote le duration del session del usator.
  • application - le attributo es disponibile per cata instantia e non es jammais dereferentiate. Es lo mesme de definir un variabile static o global.
<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[modificar | modificar fonte]

Le nove version del specification JSP include nove functionalitate designate a incrementar le productivitate del disveloppator. In detalio:

  • un Expression Language (EL) que permitte al disveloppatores de crear template de stilo (como aquelles de Velocity);
  • un methodo plus simple e veloce de crear nove etiquettas.

Ligamines externe[modificar | modificar fonte]

Nota