PDA

View Full Version : [JAVA-JSP] oggetto implicito jsp: pageContext


prazision
06-06-2005, 17:39
ho visto in alcuni esempi come usare l'oggetto implicito
pageContext in una pagina jsp.

poi ho trovato nella definizione di tale oggetto:"Un'istanza di PageContext
consente di accedere a tutti gli scope JSP...inoltre,essa mette a
disposizione un livello sopra i dettagli d'implementazione del
container, in modo da permettere al container stesso di generare
classi d'implementazione JSP portabili"

fino ai puntini (e quel che non ho scritto dopo) è tutto chiaro;
dalla parola 'inoltre' in poi c'è il buio totale.

qualcuno mi saprebbe dire (in maniera semplice) cosa si intende nella seconda
parte della definizione

grazie

kingv
06-06-2005, 18:31
vado a intuito perchè non conosco quella classe, diciamo che aggiunge un livello di astrazione in più alle API che permettono a ogni web container di non fare riferimento a oggetti o metodi particolari per accedere agli scope JSP (che sarebbero dipendenti dall'implmentazione) ma a un'inferfaccia generale (pageContext, appunto, anche se nell'implementazione hanno scelto una classe astratta).

Così facendo una jsp compilata potrà recuperare le informazioni necessarie al suo metodo _jspService anche se il compilato (e non il .jsp) venisse spostato da un web container a un altro.

E' un pattern molto comune in java.

prazision
06-06-2005, 20:42
provo a interpretare quello che hai detto(io più che a intuito vado a caso :mc: )
vado a intuito perchè non conosco quella classe, diciamo che aggiunge un livello di astrazione in più alle API che permettono a ogni web container di non fare riferimento a oggetti o metodi particolari per accedere agli scope JSP (che sarebbero dipendenti dall'implmentazione) ma a un'inferfaccia generale (pageContext, appunto, anche se nell'implementazione hanno scelto una classe astratta).

dunque quindi il web container (quando chiama la classe d'implementazione della pagina jsp per elaborare la richiesta e generare la risposta) non accede a oggetti particolari (tipo session o request) ma a un'interfaccia generale anche se nella pagina jsp il codice contiene il riferimento agli oggetti particolari (tipo session o request)???
ho visto ad esempio che nella classe java generata da una jsp c'è
session = pageContext.getSession();(ma forse non centra nulla)



Così facendo una jsp compilata potrà recuperare le informazioni necessarie al suo metodo _jspService anche se il compilato (e non il .jsp) venisse spostato da un web container a un altro.

E' un pattern molto comune in java.


quanon ci sono proprio; si può eseguire il compilato(insomma la servlet) anche senza che ci sia la jsp ??????(penso di no anche ma non capisco cosa vuoi dire)
in che senso "Così facendo una jsp compilata potrà recuperare le informazioni necessarie al suo metodo _jspService..."?

grazie e ciao

kingv
06-06-2005, 21:58
ho visto ad esempio che nella classe java generata da una jsp c'è
session = pageContext.getSession();(ma forse non centra nulla)


ecco un buon esempio, per recuperare la sessione viene chiamato il metodo getSession() della classe PageContext. Questo metodo sarà sicuramente implementato in maniera differente dagli sviluppatori di Tomcat piuttosto che da quelli di WebSphere o di JRun, ma tutto quello che vede la jsp è il suddetto metodo, non deve chiamare in un caso jakartaPageContext.getTomcatSession() piuttosto che ibmPageContext.getWebSphereSession().
La tua jsp quindi puo' girare su web container differenti senza nessuna modifica.


quanon ci sono proprio; si può eseguire il compilato(insomma la servlet) anche senza che ci sia la jsp ??????(penso di no anche ma non capisco cosa vuoi dire)
in che senso "Così facendo una jsp compilata potrà recuperare le informazioni necessarie al suo metodo _jspService..."?


mi son spiegato coi piedi, scusa, il ciclo di vita di una jsp, la prima volta che viene invocata è:
pagina.jsp -> paginaServlet.java -> paginaServlet.class -> ora puo' servire le richieste
il metodo principale viene implementato in un metodo di paginaServlet chiamato jspService, e al suo interno vengono fatte operazioni come il recupero della servletRequest e del servletResponse e così via. Queste operazioni penso che vengano fatte sfruttando l'interfaccia di PageContext, in modo che funzioni su web container differenti (vedi precedente esempio)

prazision
06-06-2005, 22:34
ok forse ci sono:la classe PageContext è un'interfaccia in modo che le jsp possono limitarsi a utlizzare i suoi metodi senza dover sapere di preciso come questa interfaccia è implementata nei singoli web container, giusto?





quando dici

il metodo principale viene implementato in un metodo di paginaServlet chiamato jspService, e al suo interno vengono fatte operazioni come il recupero della servletRequest e del servletResponse e così via. Queste operazioni penso che vengano fatte sfruttando l'interfaccia di PageContext, in modo che funzioni su web container differenti (vedi precedente esempio)

non so se è proprio così(almeno per il recupero della servletRequest e del servletResponse );infatti iil metodo _jspService ha come parametri :HttpServletRequest request, HttpServletResponse response.
è invece vero che session e application vengono recuperati tramite l'interfaccia di PageContext


application = pageContext.getServletContext();
session = pageContext.getSession();

forse sto dicendo baggianate...

cmq grazie, ho un'idea molto più chiara ora

kingv
07-06-2005, 07:51
no è tutto corretto.

per quanto riguarda reqest e response ho "sparato", era solo per spiegare che l'interfaccia espone metodi per recuperare oggetti necessari al funzionamento della jsp ;)

prazision
07-06-2005, 09:25
ok.graz