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.
|