Tvorba informačních systémů 1/43 Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2008/2009
Tvorba informačních systémů 2/43 HTTP Protokol Hypertext Transfer Protokol (HTTP) Protokol pro přenos dat mezi webovým serverem a klientem (často prohlížeč). Klient server: klient zašle na server požadavek (request), server odpoví zasláním odpovědi (response). Klient request response Server Protokol aplikační vrstvy nad protokolem TCP, implicitní port 80. Metody: GET, PUT, POST,... Aktuální verze 1.1, můžeme využít tzv. persistentní spojení (HTTP keep-alive) jedno TCP spojení je využito pro zaslání více souborů.
Tvorba informačních systémů 3/43 HTTP Protokol HTTP požadavek metoda URL_dokumentu verze_http hlavicky prazdna_radka telo_pozadavku Příklad: GET /clanky/obsah.html HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT) Host: www.server.cz Klient request GET /clanky/obsah.html... HTTP Server
Tvorba informačních systémů 4/43 HTTP Protokol HTTP odpověd protokol stavovy_kod stavové_hlaseni hlavicky prazdna_radka obsah_odpovedi Příklad: HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Content-type: text/html... <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN >... Klient HTTP/1.1 200 OK...... <!DOCTYPE HTML PUBLIC... response HTTP Server
Tvorba informačních systémů 5/43 HTTP Protokol HTTP a (ne)bezpečnost Protokol je čistě textový Zvláště výhodné je zasílání hesla metodou GET: GET /do.login?login=kra28&password=heslo... Metodou POST jsou data zasílána v těle požadavku, není tedy opět problém odchytit osobní údaje. Při práci s citlivými údaji musíme použit šifrovaný přenos, např. HTTPS.
Tvorba informačních systémů 6/43 HTTP Protokol Omezení HTTP bezstavovost 1/2 Řešení: Protokol je bezstavový: server nemá stále spojení s klienty a nemůže je proto jednoznačně identifikovat komplikace pro webové aplikace. Jak bezpečně identifikovat klienta, který již prošel autentizací? Přenášení údajů v URL a skrytých polích formuláře. Uložení kompletní identifikace je nebezpečné. cookies ukládání dat zaslaných serverem v prohlížeči. Při následujících přístupech k témuž serveru/adresáři je cookie zaslána zpět. Uložení kompletní identifikace je nebezpečné.
Tvorba informačních systémů 7/43 HTTP Protokol Omezení HTTP bezstavovost 2/2 Popsané nevýhody vyústily v zavedení tzv. session (sezení): Každému novému uživateli se přiřadí jedinečný identifikátor (tzv. session token/session id). Předává se s každým požadavkem pomocí cookies nebo parametrů v URL, resp. skrytých polích formuláře. Výhoda: přenáší se pouze tento token, kompletní identifikace je uložena na serveru. Důležitá je podpora session při vývoji webových aplikací.
Tvorba informačních systémů 8/43 HTTP Protokol Reference World Wide Web Consortium: http://www.w3.org/. Libor Dostálek: Velký průvodce protokoly TCP/IP a systémem DNS. Computer Press, 2002. Jiří Kosek: Protokol HTTP. http://badame.vse.cz/izi228/prednasky/ http/frames.html, 2000.
Tvorba informačních systémů 9/43 Java Servlets Architektura J2EE c Sun Microsystems
Tvorba informačních systémů 10/43 Java Servlets Java Servlets Metoda rozšiřování webového serveru kódem v jazyce Java umožňující dynamické generování obsahu. Rozhraní pro aplikace s tenkým klientem (webový prohlížeč). Web browser HTTP Java Servlet Container Servlet1... Servletn
Tvorba informačních systémů 11/43 Java Servlets Výhody servletů Perzistence mezi voláními rychlejší odezva na požadavky, sdílení dat. Pro servlet je vytvořeno vlákno z běžícího JVM. CGI opakované zavádění Můžeme využít perzistentní spojení HTTP zaslání více souborů nad jedním TCP spojením Přístup k celému Java API JDBC databáze JAXP práce s XML JNDI adresářové služby...
Tvorba informačních systémů 12/43 Java Servlets Servletový kontejner Servletový kontejner zajišt uje běh servletu běh JVM, správa session, udržovaní kontextu, konfigurační informace. Web browser HTTP Java Servlet Container Servlet Configuration Sessions Context... Nutnost konfigurace servletu (např. v souboru web.xml). Aktuální verze specifikace: Java Servlet API 2.5, různí dodavatelé implementace.
Tvorba informačních systémů 13/43 Java Servlets Typy servletových kontejnerů Rozšíření WWW serveru Apache/JServ, http://httpd.apache.org/ S vestavěným WWW serverem Jetty (Mortbay.com) WebSphere (IBM) Samostatné aplikační servery Apache Tomcat, http://tomcat.apache.org/ GlassFish, https://glassfish.dev.java.net/ Sun GlassFish Enterprise Server, http://www.sun.com/software/products/appsrvr/ JBoss, http://www.jboss.org/
Tvorba informačních systémů 14/43 Java Servlets Java Servlet API Správa session: třída HttpSession. Kontext servletu: třída ServletContext rozhraní pro komunikaci s kontejnerem. Konfigurační informace: ServletConfig parametry předávané při inicializaci servletu. HTTP požadavek: třída HttpRequest. HTTP odpověd : třída HttpReponse. Třída PageContext přístup k různým atributům stránky. Web browser HTTP Java Servlet Container Servlet Configuration Sessions Context...
Tvorba informačních systémů 15/43 Java Servlets Java Servlet API
Tvorba informačních systémů 16/43 Java Servlets Reprezentace požadavku
Tvorba informačních systémů 17/43 Java Servlets Reprezentace odpovědi
Tvorba informačních systémů 18/43 Java Servlets Příklad - HelloWorld 1/2 import java. i o. ; import javax. s e r v l e t. ; import javax. s e r v l e t. h t t p. ; public class HelloWorld extends H t t p S e r v l e t { public void doget ( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { response. setcontenttype ( " t e x t / html " ) ; P r i n t W r i t e r out = response. g e t W r i t e r ( ) ;
Tvorba informačních systémů 19/43 Java Servlets Příklad - HelloWorld 2/2 } } out. p r i n t l n ( " <html > " ) ; out. p r i n t l n ( " <head> " ) ; out. p r i n t l n ( " < t i t l e > Hello World! < / t i t l e > " ) ; out. p r i n t l n ( " </head> " ) ; out. p r i n t l n ( " <body> " ) ; out. p r i n t l n ( " <h1> Hello World! < / h1> " ) ; out. p r i n t l n ( " </body> " ) ; out. p r i n t l n ( " </ html > " ) ;
Tvorba informačních systémů 20/43 Java Servlets Příklad - HelloWorld <html> <head> < t i t l e > Hello World! < / t i t l e > < / head> <body> <h1> Hello World! < / h1> < / body> < / html> Web browser GET /HelloWorld... Java Servlet Container Servlet: HelloWorld
Tvorba informačních systémů 21/43 1 Rozdílná filosofie oproti servletu, kód v jazyce Java píšeme do HTML kódu. 2 Kompilace na servlet Při prvním požadavku, kontrolují se změny. 3 Zjednodušení realizace stránek, možnosti: Servlety generující všechny stránky, Statický obsah HTML + servlety pro akce, Dynamicky obsah v rámci statického JSP. 4 Oddělení prezentace od aplikační logiky pomocí uživatelských značek.
Tvorba informačních systémů 22/43 Příklad - JSP <%@ page contenttype= " t e x t / html ; charset=windows 1250" %> <%@ page import= " java. u t i l. " %> <html > <head> < t i t l e > Prvni pokus </ t i t l e > </ head> <body> <h1> V i t e j t e! < / h1> <p>dnesni datum j e <%= new Date ( ). t o S t r i n g () % > </p> </ body>
Tvorba informačních systémů 23/43 Příklad JSP <html> <head> < t i t l e > Prvni pokus< / t i t l e > < / head> <body> <h1> V i t e j t e < / h1> <p>dnesni datum j e Sun Feb 2 6... < / body>
Tvorba informačních systémů 24/43 Prvky JSP Direktivy <%@ page contenttype= text/html %>, Vložený úsek programu <% out.println("x : " + x); %>, Výraz x : <%= x %>, Vestavěné znaky akcí <jsp:include page="/headers/header.jsp"/>, Uživatelem definované značky <my:date/> <%@ taglib uri=http://lib.com/tg prefix="my" %>
Tvorba informačních systémů 25/43 JSP, Expression language: příklad 1/2 <html > <head> < t i t l e >JSP 2. 0 Expression Language Basic A r i t h m e t i c </ t i t l e > </ head> <body> <h1>jsp 2. 0 Expression Language Basic A r i t h m e t i c </ h1> <hr >... <br > < blockquote > <code> < t a b l e border= " 1 " >
Tvorba informačních systémů 26/43 JSP, Expression language: příklad 2/2 <thead > <td ><b>el Expression </ b> </ td > <td ><b>result </ b> </ td > </ thead > < t r > <td >\ $ { 1 } < / td > <td >$ { 1 } < / td > </ t r > < t r > <td >\ $ { 1 + 2 } < / td > <td >$ { 1 + 2 } < / td > </ t r >...
Tvorba informačních systémů 27/43 Předdefinované proměnné HttpServletRequest request <%= request.getremotehost() %> HttpServletResponse response HttpSession session PrintWriter out ServlerContext application ServletConfig config PageContext pagecontext page (= this)
Tvorba informačních systémů 28/43 Výrazy a úseky programů 1/2 <!DOCTYPE HTML PUBLIC " //W3C/ / DTD HTML 4.0 T r a n s i t i o n a l / / EN" > <html > <head>< t i t l e >Ukazka JSP vyrazu a... < / t i t l e > </head> <body> Curent date / time : <%= new java. u t i l. Date()%><br > Remote host : <%= request. getremoteaddr()%>< br > Session ID : <%= session. g e t I d ()%><br > Request URI: <%= request. getrequesturi()%>< br > <% S t r i n g method = request. getmethod ( ) ; out. p r i n t l n ( " Method : " + method ) ; %> </ body> </ html >
Tvorba informačních systémů 29/43 Výrazy a úseky programů 2/2
Tvorba informačních systémů 30/43 Uživatelské značky Oddělení logiky aplikace od prezentace: Java Beans, uživatelské značky. Uživatelské akce jsou volány pomocí uživatelských značek. Knihovny značek různých dodavatelů. Např. specifikace fy. Sun: JSTL JavaServer Standard Tag Library. http://java.sun.com/products/jsp/jstl/
Tvorba informačních systémů 31/43 Co potřebujeme pro implementaci uživatelské značky? JSP stránku využívající uživatelské značky deklarace umístění souboru popisující knihovnu značek. Tag Library Descriptor (TLD) XML soubor popisující vlastnosti a umístění obslužného programu. Tag Handler obslužný program, třída v Javě.
Tvorba informačních systémů 32/43 Uživatelské značky: JSP stránka Deklarace knihovny značek: <%@ taglib uri = "uri" prefix = "prefix" %> Typy uživatelských značek: Jednoduchá značka: <prefix:name></tagprefix:name> Značka s atributy: <prefix:name attribute = "<%= val %>"/> Značka s tělem. Značka definující proměnnou.
Tvorba informačních systémů 33/43 Uživatelské značky: Tag Handler, implementace Obslužný program akce vyvolaná při pársování značky v JSP souboru. Implementace rozhraní javax.servlet.jsp.tagext.tag nebo javax.servlet.jsp.tagext.bodytag. Dědění ze tříd javax.servlet.jsp.tagext.tagsupport nebo javax.servlet.jsp.tagext.bodytagsupport.
Tvorba informačních systémů 34/43 Uživatelské značky, příklad - index.html <html> <head> <META HTTP EQUIV= " Content Type " CONTENT= " t e x t / html ; charset=windows 1250"> < t i t l e >Vstup na stranky< / t i t l e > < / head> <body> Vlozte jmeno : <br> <form action= " enter. j s p " method= " post " > <input type= " t e x t " name= " n " > <input type= " submit " name= " submit " value= "OK" > < / form> < / body> < / html>
Tvorba informačních systémů 35/43 Uživatelské značky, příklad - enter.jsp <%@ page contenttype= " t e x t / html ; charset=windows 1250"%> <%@ t a g l i b p r e f i x = "exm" u r i = "WEB INF / enter. t l d " %> <%@ t a g l i b p r e f i x = " fmt " u r i = "WEB INF / fmt. t l d " %> <html> <head>< t i t l e > Hello Name Tag< / t i t l e >< / head> <body> <fmt : requestencoding value= " windows 1250" / > <strong> V i t a j t e! < / strong> <p>< i > <exm : ent name= <%= request. getparameter ( " n " ) %> / > < / i ><p> <strong> P r i j d t e zas. < / strong> < / body> < / html>
Tvorba informačních systémů 36/43 Uživatelské značky, příklad - enter.tld 1/2 <?xml version=" 1.0 " encoding= " ISO 8859 1"? > <!DOCTYPE t a g l i b PUBLIC " //Sun Microsystems, Inc. / / DTD JSP Tag L i b r a r y 1. 1 / /EN" " h t t p : / / java. sun. com / j2ee / dtds / web j s p t a g l i b r a r y _ 1 _ 1. dtd " > < t a g l i b > < t l i b v e r s i o n >1.0< / t l i b v e r s i o n > < j s p v e r s i o n >1.1< / j s p v e r s i o n > <shortname> i n t e r v a l < / shortname> < i n f o >Simple welcome l i b r a r y. < / i n f o >
Tvorba informačních systémů 37/43 Uživatelské značky, příklad - enter.tld 2/2 <tag> <name>ent< /name> < t a g class>exm. tags. Enter< / t a g c l a s s > < bodycontent >JSP< / bodycontent > < a t t r i b u t e > <name>name< / name> < r e quired>true< / r e q uired> < r t e x p r v a l u e > t r u e < / r t e x p r v a l u e > < / a t t r i b u t e > < / tag> < / t a g l i b >
Tvorba informačních systémů 38/43 Uživatelské značky, příklad - exm.tags.enter 1/2 package exm. tags ; import java. i o. ; import java. u t i l. Date ; import java. t e x t. DateFormat ; import javax. s e r v l e t. j s p. ; import javax. s e r v l e t. j s p. t a g e x t. ; public class E n t e r extends TagSupport { private S t r i n g name = " nobody " ; public void setname ( S t r i n g name) { i f (! name. equals ( " " ) ) { this. name = name ; } }
Tvorba informačních systémů 39/43 Uživatelské značky, příklad - exm.tags.enter 2/2 public i n t dostarttag ( ) throws JspTagException { return EVAL_BODY_INCLUDE; } public i n t doendtag ( ) throws JspTagException { DateFormat d f = DateFormat. getdateinstance ( ) ; S t r i n g date = df. format (new Date ( ) ) ; t r y { JspWriter out = pagecontext. getout ( ) ; out. p r i n t ( " Hi, " +name+ " <br > " ) ; out. p r i n t ( "My name i s " + getclass ( ). getname ( ) + " today i s " + date + " <p/ > " ) ; } catch ( IOException ex ) { throw new JspTagException ( " Output E r r o r " ) ; } return EVAL_PAGE; } }
Tvorba informačních systémů 40/43 Uživatelské značky, příklad
Tvorba informačních systémů 41/43 JSTL JavaServer Standard Tag Library Core XML analýza <x:parse.../> transformace <x:transform xslt="..." xml="..."/> I18n (Internationalization) formátovaní textů <fmt:message key="..."/> formátovaní čísel a data/času <fmt:formatdate.../> Databáze volba zdroje dat <sql:setdatasource datasource="..."/> SQL dotazy a transakce <sql:query var="...>...</sql:query>
Tvorba informačních systémů 42/43 Reference http://java.sun.com/products/jsp/ pro všechny - http://interval.cz/serial.asp?serial=46 http://java.sun.com/products/servlet/
Tvorba informačních systémů 43/43 Struktura webové aplikace Struktura webové aplikace J2EE: Servlety -.class Statický obsah -.html,.jpg,.gif,... JSP -.jsp Knihovny tříd -.jar Můžeme vygenerovat soubor war. Vývoj: 1 Tomcat běh webové aplikace, 2 NetBeans ladění webové aplikace.