Tvorba informačních systémů Michal Krátký, Miroslav Beneš Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2007/2008 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 1/43
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ů. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 2/43
HTTP požadavek 2. HTTP, Úvod do Java2EE 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 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 3/43
HTTP odpověd 2. HTTP, Úvod do Java2EE 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 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 4/43
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. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 5/43
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é. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 6/43
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í. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 7/43
Reference 2. HTTP, Úvod do Java2EE 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. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 8/43
Architektura J2EE 2. HTTP, Úvod do Java2EE c Sun Microsystems c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 9/43
2. HTTP, Úvod do Java2EE 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 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 10/43
Výhody servletů 2. HTTP, Úvod do Java2EE 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... c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 11/43
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. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 12/43
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/ JBoss, http://www.jboss.org/ Sun ONE Server c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 13/43
Java Servlet API 2. HTTP, Úvod do Java2EE 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... c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 14/43
Java Servlet API 2. HTTP, Úvod do Java2EE c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 15/43
Reprezentace požadavku c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 16/43
Reprezentace odpovědi c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 17/43
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 ( ) ; c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 18/43
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 > " ) ; c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 19/43
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 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 20/43
2. HTTP, Úvod do Java2EE 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. 4 Oddělení prezentace od aplikační logiky pomocí uživatelských značek. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 21/43
Příklad - JSP 2. HTTP, Úvod do Java2EE <%@ 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> c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 22/43
Příklad JSP 2. HTTP, Úvod do Java2EE <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> c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 23/43
Prvky JSP 2. HTTP, Úvod do Java2EE 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" %> c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 24/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 " > c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 25/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 >... c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 26/43
Předdefinované proměnné HttpServletRequest request <%= request.getremotehost() %> HttpServletResponse response HttpSession session PrintWriter out ServlerContext application ServletConfig config PageContext pagecontext page (= this) c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 27/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 > c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 28/43
Výrazy a úseky programů 2/2 c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 29/43
Uživatelské značky 2. HTTP, Úvod do Java2EE 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/ c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 30/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ě. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 31/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. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 32/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. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 33/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> c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 34/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> c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 35/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 > c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 36/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 > c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 37/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 ; } } c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 38/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; } } c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 39/43
Uživatelské značky, příklad c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 40/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> c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 41/43
Reference 2. HTTP, Úvod do Java2EE http://java.sun.com/products/jsp/ pro všechny - http://interval.cz/serial.asp?serial=46 http://java.sun.com/products/servlet/ c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 42/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. c 2005-2008 Michal Krátký, Miroslav Beneš Tvorba informačních systémů 43/43