Technologie Java Server Pages doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Java Servlets Struktura webové aplikace Java Server Pages Komponenty Java Beans Uživatelské značky Knihovny značek (JSTL / Jakarta Struts) Technologie JSP 2 Java Servlets Standardní metoda rozšiřování webových serverů o dynamické generování obsahu Základní rozhraní pro aplikace s tenkým klientem (webový prohlížeč) Web Browser Java Servlet Container Servlet Servlet Výhody servletů Perzistence mezi voláními rychlejší odezva na požadavky, sdílení dat CGI opakované zavádění Přístup k celému Java API JDBC databáze JAXP práce s XML JNDI adresářové služby Technologie JSP 3 Technologie JSP 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1
Servletový kontejner Zajišťuje běh servletu JVM Správa sezení Udržování kontextu Konfigurační informace Perzistence Různí dodavatelé standardizace Java Servlet API 2.4 Typy servletových kontejnerů Rozšíření WWW serveru Apache/JServ S vestavěným WWW serverem Jetty (Mortbay.com) WebSphere (IBM) Samostatné aplikační servery Apache Tomcat Sun ONE Server JBoss Technologie JSP 5 Technologie JSP 6 Java Servlet API ServletConfig servletname getinitparameter(n) * servletcontext 1 ServletContext attribute(n) getinitparameter(n) javax.servlet.* javax.servlet.http.* servletconfig 1 1 servletinfo GenericServlet init() service(request, response) destroy() lastmodified doget() dopost() HttpServlet Technologie JSP 7 Reprezentace požadavku ServletRequest remotehost, parameter(name) reader HttpServletRequest contextpath header(name) cookies[] http://www.lib.com/catalog - context path session * 1 HttpSession attribute(n) removeattribute(n) invalidate() Technologie JSP 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2
Reprezentace odpovědi ServletResponse contenttype writer outputstream HttpServletResponse header(name) addcookie(cookie) addheader(name, value) senderror(sc, msg) Struktura webové aplikace Servlety.class Statický obsah.html,.jpg,.gif, JSP.jsp Knihovny tříd.jar http://www.lib.com/catalog WEB-INF classes images index.jsp lib web.xml http://www.lib.com/catalog/web-inf/... Technologie JSP 9 Technologie JSP 10 Java Server Pages Oddělení prezentace od aplikační logiky Zjednodušení realizace stránek Servlety na všechno Statický obsah HTML + servlety pro akce Dynamický obsah v rámci statického Možnost editace HTML editory Kompilace na Java servlet Při prvním požadavku, kontrolují se změny Prvky JSP Direktivy <%@ page contenttype= text/html %> Vložený úsek programu <% out.println( x : + x); %> Výraz x : <%= x %> Vestavěné značky akcí <jsp:include page= /headers/header.jsp /> Uživatelem definované značky <my:date /> <% @ taglib uri=http://lib.com/tags prefix= my %> Technologie JSP 11 Technologie JSP 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3
Příklad 1 <%@ page contenttype= text/html; charset=iso-8859-2 %> <%@ page import= java.util.* %> <html> <head> <title>první pokus</title> </head> <body> <h1>vítejte na mé stránce</h1> <p> Dnešní datum je <%= new Date().toString() %> </p> </body> Technologie JSP 13 Příklad 2 <%@ page contenttype="application/vnd.ms-excel" %> <% out.println("x\tx^2"); for(int i = 1; i <= 10; i++) { out.println(i + "\t + (i * i)); %> Technologie JSP 14 Příklad 3 <% Iterator i = cart.getitems().iterator(); while (i.hasnext()) { ShoppingCartItem item = (ShoppingCartItem)i.next(); BookDetails bd = (BookDetails)item.getItem(); %> <tr> <td align="right bgcolor="#ffffff"> <%=item.getquantity() %> </td><td bgcolor="#ffffaa"> <strong><a href="<%=request.getcontextpath()%> /bookdetails?bookid=<%=bd.getbookid()%>"> <%=bd.gettitle()%></a></strong> </td>... <% // End of while %> Technologie JSP 15 Předdefinované proměnné HttpServletRequest request <%= request.getremotehost() %> HttpServletResponse response HttpSession session PrintWriter out ServlerContext application ServletConfig config PageContext pagecontext page (= this) Technologie JSP 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4
Komponenty Java Beans Konstruktor public StringBean() { Vlastnosti (properties) private String msg = Nic ; public String getmsg() { return msg; public void setmsg(string m) { msg=m; Metody public void clear() { msg = Nic ; Události (events) Technologie JSP 17 Příklad package cviceni2; import java.util.hashtable; import java.util.collection; public class SeznamUzivatelu { private Hashtable tabulka = new Hashtable(); public void uloz(uzivatel u) { tabulka.put(u.getlogin(), u); public Uzivatel hledej(string login) { return (Uzivatel)tabulka.get(login); public Collection getseznam() { return tabulka.values(); Technologie JSP 18 Použití JavaBeans v JSP Zavedení komponenty <jsp:usebean id= sb class= StringBean /> Přístup k vlastnostem <jsp:getproperty name= sb property= msg /> Nastavení vlastnosti <jsp:setproperty name= sb property= msg value= Ahoj /> <jsp:setproperty name= sb property= msg param= message /> <jsp:setproperty name= sb property= * /> Sdílení komponent <jsp:usebean id= class= scope= /> scope= page (implic. hodnota) v objektu PageContext scope= application v objektu ServletContext sdílí se všemi servlety ve stejné aplikaci scope= session v objektu HttpSession scope= request v objektu ServletRequest Technologie JSP 19 Technologie JSP 20 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5
Uživatelské značky Třída obslužného programu (handler) rozhraní javax.servlet.jsp.tagext.tag metody dostarttag(), doendtag() Deskriptor knihovny značek soubor xxx.tld ve formátu XML Soubor JSP používající značky <%@ taglib uri= xxx.tld prefix= xxx %> <xxx:znacka param= > </xxx:znacka> Technologie JSP 21 Příklad DatumTag.java package tis.tags; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class DatumTag extends TagSupport { public int dostarttag() { try { JspWriter out = pagecontext.getout(); out.print(new java.util.date()); catch( java.io.ioexception e ) { return SKIP_BODY; Technologie JSP 22 Příklad tis-taglib.tld <?xml version="1.0" encoding= iso-8859-2?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>tis</shortname> <uri></uri> <info>testy pro TIS</info> <tag> <name>datum</name> <tagclass>tis.tags.datumtag</tagclass> <info>vloží dnešní datum</info> </tag> </taglib> Příklad tags.jsp <%@ taglib uri="/web-inf/tis-taglib.tld" prefix= tis" %> Dnes je <tis:datum/> Technologie JSP 23 Technologie JSP 24 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6
JSTL JavaServer Standard Tag Library Core výrazy <c:out value= /> tok řízení <c:foreach var= items= "> </c:foreach> práce s URL <c:url var= value= /> XML analýza <x:parse /> transformace <x:transform xslt= xml= /> I18n (Internationalization) formátování textů <fmt:message key= /> formátování čísel a data/času <fmt:formatdate /> Database volba zdroje dat <sql:setdatasource datasource= /> SQL dotazy a transakce <sql:query var= > </sql:query> Jakarta Struts Tag Library bean definice a zpřístupnění JavaBeans z různých zdrojů html HTML formuláře a další prvky uživ. rozhraní logic řízení toku aplikace template práce se šablonami stránek tiles tvorba stránek z komponent Technologie JSP 25 Technologie JSP 26 Příklad <%@ page contenttype="text/html; encoding=iso-8859-2" %> <%@ taglib uri="/web-inf/c.tld" prefix="c" %> <%@ taglib uri="/web-inf/struts-html.tld" prefix="html" %> <jsp:usebean id="uzivatele" class="cviceni2.seznamuzivatelu" scope="session"> <% uzivatele.uloz(new Uzivatel("wal314", "Johnny", "Walker")); %> </jsp:usebean> <html:html> <body> <h2>seznam uživatelů</h2> <table border="1"> <c:foreach var="uziv" varstatus="st" items="${uzivatele.seznam"> <tr> <td><c:out value="${st.count"/></td> <td><c:out value="${uziv.login"/></td> <td><c:out value="${uziv.jmeno"/> <c:out value="${uziv.prijmeni"/></td> </tr> </c:foreach> </table> </body> </html:html> Technologie JSP 27 Literatura Marty Hall: Java servlety a stránky JSP. Neocortex, Praha, 2001, ISBN 80-86330-06-0 http://java.sun.com/products/jsp http://www.jboss.org http://jakarta.apache.org Technologie JSP 28 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7