IPRO - PC Magazine Romania, Aprilie 2004
SOLUŢII PENTRU PROGRAMATORII ŞI DESIGNERII WEB
JSP la pachet
Exemple de utilizare ale tehnologiei
Mircea Scărlătescu
În acest număr ne vom concentra atenţia asupra unor cazuri practice de folosire
a noţiunilor prezentate în numerele anterioare.
Detectarea browser-ului client
Problemele care apar în momentul în care o pagină web este afişată în browsere
diferite sunt arhicunoscute. Problemele apar atunci când un script funcţionează
bine în Internet Explorer, dar în Opera, Netscape sau alte browsere totul apare
diferit. O soluţie universală nu veţi regăsi pentru a face ca un script să ruleze
bine pe toate browserele. O soluţie (preferată cam de… nimeniJ) este să
realizăm 2-3 variante ale codului script-ului în funcţie de browser.
În acest caz însă, punem problema de a detecta ce browser foloseşte clientul
pentru a vizualiza pagina. Detecţia browserului este prezentă în orice limbaj
de scripting, iar JSP nu face excepţie.
Iată care sunt paşii pentru a reuşi o astfel de detecţie.
<%! public final static int IE = 0; public final static int NETSCAPE = 1; public final static int WML = 2; public int getBrowser(HttpServletRequest request) { String accept = request.getHeader("ACCEPT"); if (null != accept && -1 != accept.indexOf("wml")) { return WML; } String agent = request.getHeader("USER-AGENT"); if (null != agent && -1 != agent.indexOf("MSIE")) { return IE; } return NETSCAPE; } %>
Codul de mai sus defineşte 3 variabile, care corespund valorilor detecţiei
browser-ului. De precizat că WML reprezintă un browser care citeşte format Wireless
Markup Language, formatul folosit la navigarea pe Internet cu ajutorul device-urilor
mobile.
Metoda definită, getBrowser(), acceptă obiectul Request şi analizează proprietăţile
acestuia, mai exact citeşte header-ul ACCEPT. Cum folosim o astfel de metodă:
iată un exemplu concret:
<% switch (getBrowser(request)) { case WML: response.setContentType("text/vnd.wap.wml"); %> <?xml version="1.0"?> <wml> <card id="index" title="Browser Greeting"> <p align="center">Acces via WML</p> </card> </wml> <% break; case IE: %> <HTML><BODY><H1>Acces IE</H1></BODY></HTML> <% break; default: %> <HTML><BODY><H1>Acces Netscape</H1></BODY></HTML> <% } %>
Folosind metoda de mai sus, conţinutul returnat de script diferă de la browser
la bowser. Metoda este desigur dificil de aplicat pentru siturile de mari dimensiuni.
În general, siturile sunt astfel proiectate pentru ca pe orice browser, conţinutul
să fie util vizitatorului. Astfel, dacă pe un anumit browser aspectul general
nu este ideal, funcţionalitatea nu este afectată.
Afişarea datei şi orei într-un site.
Problema comună a afişării orei server-ului pe un sit. Exemplul de mai jos
prezintă modalitatea de a afişa cu ajutorul obiectelor de tip bean.
<%@ page language="java" contentType="text/html" %> <html> <body> <jsp:useBean id="clock" class="java.util.Date" /> <b>Timpul si ora la server:</b><hr> <ul> <li>Date: <jsp:getProperty name="clock" property="date" /> <li>Month: <jsp:getProperty name="clock" property="month" /> <li>Year: <jsp:getProperty name="clock" property="year" /> <li>Hours: <jsp:getProperty name="clock" property="hours" /> <li>Minutes: <jsp:getProperty name="clock" property="minutes" /> </ul> <hr> </body> </html>
Să analizăm putin acest exemplu. Prima linie specifică directivă de declarare
a limbajului în care script-ul este scris. Atributele prezente specifică şi
tipul de răspuns întors de script, şi anume HTML. Documentaţia JSP vă oferă
o listă cu toate opţiunile pe care le puteţi seta în aceste directive. În exemplul
de mai sus, majoritatea conţinutului este de tip HTML. Să lăsăm însă această
parte (foarte uşor de înţeles) şi să analizăm partea dinamică a paginii.
Observăm în primul rând prezenţa unei componente de tip JavaBeans. În esenţă
o astfel de componentă repezintă o clasă Java, utilizată în contextul unei pagini
web. Pentru a putea utiliza o astfel de componentă într-o pagină JSP, ea trebuie
mai întâi declarată:
<jsp:useBean id="clock" class="java.util.Date" />
şi reprezintă modalitatea de declarare. Id-ul repezintă un nume (unic) pentru
componentă noastră. Acest nume trebuie să respecte restricţiile de nume de variabile
pe care le impune limbajul de scripting (în cazul nostru Java). Atributul class
reprezintă clasa Java pe care obiectul nostru o instanţiază.
O astfel de componentă este definită pentru a-i folosi proprietăţile şi metodele.
Astfel, bean-ul folosit mai sus, care instanţiază clasa Date are disponibile
proprietăţile:
După ce am declarat un bean, proprietăţile acestuia pot să fie afişate folosind
tag-ul JSP de mai jos:
<jsp:getProperty name="clock" property="date" />
Detalii despre cum se folosesc şi ce pot să facă bean-urile în cazul JSP, vom
mai avea ocazia să discutăm.
Referinţe: www.java.sun.com; www.javaworld.com.
|