http protokol 2. http, Úvod do java2ee java servlets · 2. http, Úvod do java2ee http protokol...
TRANSCRIPT
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Tvorba informacních systému
Michal Krátký, Miroslav Beneš
1Katedra informatikyVŠB–Technická univerzita Ostrava
Tvorba informacních systému, 2006/2007
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 1/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Hypertext Transfer Protokol (HTTP)
Protokol pro prenos dat mezi webovým serverem aprohlížecem. Klient - server.Protokol aplikacní vrstvy, TCP, port 80.Požadavek (request) - odpoved’ (response).Aktuální verze 1.1.Metody: GET, PUT, POST, ...
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 2/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
HTTP požadavek
metoda URL_dokumentu verze_HTTPhlavickyprazdna_radka
telo_pozadavku
Príklad. Ukázka jednoduchého požadavku
GET /clanky/obsah.html HTTP/1.1User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)Host: www.server.cz
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 3/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
HTTP odpoved’
protokol stavovy_kod stavové_hlasenihlavickyprazdna_radkaobsah_odpovedi
Príklad: Ukázka odpovedi
HTTP/1.1 200 OKServer: Microsoft-IIS/5.0Date: Wed, 06 Dec 2000 13:37:40 GMTX-Powered-By: PHP/4.0.3pl1Content-type: text/html
<!DOCTYPE HTML PUBLIC ’-//W3C//DTD HTML 4.0 Transitional//EN’><html>...
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 4/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Omezení HTTP
Server nemá stále spojení s klienty a nemuže je protojednoznacne identifikovat - komplikace pro webovéaplikace.
Rešení:
Prenášení údaju v URL a skrytých polí formuláre -nebezpecné, komplikované,cookies,session promenné.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 5/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Session, cookie
CookieKrátká informace, kterou si server uloží v prohlížeci.Pri následujících prístupech k témuž serveru je cookiezaslána zpet.Cookie je vázána na server a prípadne i na adresár.Nebezpecné – všechny stavové informace jsou v každémpožadavku/odpovedi.
SessionKaždému novému uživateli se priradí unikátní identifikátor(tzv. session-id).Predává se s každým požadavkem pomocí cookie neboparametru v URL, resp. skrytých polí ve formulári.Pomerne bezpecné – s každým požadavkem se prenášíjen malá cást dat a session-id.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 6/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Odkazy
Libor Dostálek: Velký pruvodce protokoly TCP/IP asystémem DNS. Computer Press, 2002.Jirí Kosek: Protokol HTTP.http://badame.vse.cz/izi228/prednasky/http/frames.html, 2000.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 7/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Architektura J2EE
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 8/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Java Servlets
Metoda rozširování webového serveru o dynamickégenerování obsahu.Rozhraní pro aplikace s tenkým klientem (webovýprohlížec).
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 9/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Výhody servletu
Perzistence mezi voláními – rychlejší odezva napožadavky, sdílení dat.Pro servlet je vytvoreno vlákno z bežícího JVM.
CGI – opakované zavádeníPrístup k celému Java API
JDBC – databázeJAXP – práce s XMLJNDI – adresárové služby
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 10/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Servletový kontejner
Zajišt’uje beh servletuJVM,Správa sezení (session),Udržovaní kontextu,Konfiguracní informace,Perzistence.
Ruzní dodavatele – standardizaceJava Servlet API 2.5 (aktuální verze).
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 11/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Typy servletových kontejneru
Rozšírení WWW serveruApache/JServ
S vestaveným WWW serveremJetty (Mortbay.com)WebSphere (IBM)
Samostatné aplikacní serveryApache TomcatSun ONE ServerJBoss
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 12/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Java Servlet API
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 13/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Reprezentace požadavku
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 14/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Reprezentace odpovedi
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 15/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Prí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 Hel loWorld extends Ht tpSe rv l e t{
public void doGet ( Ht tpServ le tRequest request ,HttpServletResponse response )
throws IOException , Serv le tExcept ion{
response . setContentType ( " t e x t / html " ) ;P r i n t W r i t e r out = response . ge tWr i t e r ( ) ;
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 16/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Prí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 >He l lo 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>Hel lo World ! < / h1>" ) ;out . p r i n t l n ( " </body>" ) ;out . p r i n t l n ( " </ html > " ) ;
}}
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 17/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - HelloWorld
<html><head>< t i t l e >Hel lo World ! < / t i t l e >< / head><body><h1>Hel lo World ! < / h1>< / body>< / html>
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 18/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
JavaServer Pages
1 Rozdílná filosofie oproti servletu – možnost editace HTMLeditory.
2 Kompilace na servletPri prvním požadavku, kontrolují se zmeny.
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 Oddelení prezentace od aplikacní logiky pomocíuživatelských znacek.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 19/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Prí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 >Prvn i 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©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 20/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - JSP
<html><head>
< t i t l e >Prvn i 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 1 3 : 5 8 : 3 1 GMT+01:00 2006< / p>< / body>
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 21/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Prvky JSP
Direktivy<%@ page contentType=’text/html’ %>,
Vložený úsek programu<% out.println("x : " + x); %>,
Výrazx : <%= x %>,
Vestavené znaky akcí<jsp:include page="/headers/header.jsp"/>,
Uživatelem definované znacky<my:Date />,
<% @ taglib uri=http://lib.com/tags prefix="my" %>,
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 22/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
JSP - Expression language example 1/2
<html ><head>
< t i t l e >JSP 2 . 0 Expression Language −Basic Ar i t hmet i c </ t i t l e >
</head><body>
<h1>JSP 2 . 0 Expression Language −Basic Ar i thmet i c </h1>
<hr > . . .<br ><blockquote >
<code>< tab le border= " 1 ">
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 23/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
JSP - Expression language example 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©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 24/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Preddefinované promenné
HttpServletRequest request<%= request.getRemoteHost() %>
HttpServletResponse response
HttpSession session
PrintWriter outServlerContext applicationServletConfig config
PageContext pageContextpage (= this)
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 25/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Výrazy a úseky programu
<!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 / t ime : <%= new java . u t i l . Date()%><br >Remote host : <%= request . getRemoteAddr()%><br >Session ID : <%= session . ge t Id ()%><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©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 26/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Výrazy a úseky programu
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 27/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Uživatelské znacky
Oddelení logiky aplikace od prezentace:Java Beans,uživatelské znacky.
Uživatelské akce jsou volány pomocí uživatelských znacek.JSTL – JavaServer Standard Tag Library.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 28/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Co potrebujeme?
JSP stránku využívající uživatelské znacky - deklaraceumístení souboru popisující knihovnu znacek (Tag LibraryDescriptor - TLD).Tag Library Descriptor – XML soubor popisující vlastnosti aumístení obslužného programu.Tag Handler - obslužný program, trída v Jave.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 29/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
JSP stránka
Deklarace knihovny znacek:<%@ taglib uri = "uri" prefix = "prefix" %>
Znacky:
Jednoduchá znacka:<prefix:name></tagPrefix:name>
Znacka s atributy:<prefix:name attribute = "<%= val %>"/>
Znacka s telem.Znacka definující promennou.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 30/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Tag Handler - implementace
Implementace rozhraníjavax.servlet.jsp.tagext.Tag nebojavax.servlet.jsp.tagext.BodyTag.Dedení za trídjavax.servlet.jsp.tagext.TagSupport nebojavax.servlet.jsp.tagext.BodyTagSupport.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 31/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Prí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 s t ranky< / t i t l e >< / head>
<body>Vloz te jmeno : <br><form action=" enter . j sp " method=" post ">
< input type=" t e x t " name=" n ">< input type=" submit " name=" submit " value="OK">
< / form>< / body>< / html>
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 32/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Prí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 / en ter . 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 >Hel lo Name Tag< / t i t l e >< / head><body>
<fmt : requestEncoding value=" windows−1250" / ><st rong> V i t a j t e ! < / s t rong><p>< i ><exm: ent name=’<%= request . getParameter ( " n " ) %> ’ / >< / i ><p><st rong> P r i j d t e zas . < / s t rong>
< / body>< / html>
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 33/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - enter.tld 1/2
<?xml vers ion=" 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 spve rs i on >1.1< / j spve rs i on ><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©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 34/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - enter.tld 2/2
<tag><name>ent< /name>< tagc lass>exm. tags . Enter< / tagc lass><bodycontent>JSP< / bodycontent>< a t t r i b u t e >
<name>name< /name><requ i red> t rue < / requ i red>< r t exp rva lue > t rue < / r t exp rva lue >
< / a t t r i b u t e >< / tag>< / t a g l i b >
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 35/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - exm.tags.Enter 1/3
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 sp . ∗ ;import javax . s e r v l e t . j sp . tagex t . ∗ ;
public class Enter 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 ( " " ) ) {th is . name = name ;
}}
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 36/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - exm.tags.Enter 2/3
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 ry {
JspWr i te r 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 ( IOExcept ion ex ) {throw new JspTagException ( " Output Er ro r " ) ;
}
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 37/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Príklad - exm.tags.Enter 3/3
return EVAL_PAGE;}
}
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 38/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
JSTL – JavaServer Standard Tag Library
CoreXML
analýza <x:parse .../>transformace<x:transform xslt="..." xml="..."/>
I18n (Internationalization)formátovaní textu <fmt:message key="..."/>formátovaní císel a data/casu <fmt:formatDate .../>
Databázevolba zdroje dat<sql:setDataSource dataSource="..."/>SQL dotazy a transakce<sql:query var="...>...</sql:query>
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 39/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Odkazy
http://java.sun.com/products/jsp/
JavaServer Pages pro všechny -http://interval.cz/serial.asp?serial=46
http://java.sun.com/products/servlet/
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 40/41
2. HTTP, Úvod do Java2EEHTTP ProtokolJava ServletsJavaServer Pages
Struktura webové aplikace
Servlety - .classStatický obsah - .html, .jpg, .gif, . . .JSP - .jspKnihovny tríd - .jar
Soubor war.
Vývoj:
1 Tomcat - beh webové aplikace,2 NetBeans - ladení webové aplikace.
c©2006-2007 Michal Krátký, Miroslav Beneš Tvorba informacních systému 41/41