Serwery aplikacji
dr inż. Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska
[email protected] http://www.cs.put.poznan.pl/~mzakrz/
Aplikacje internetowe i rozproszone
klient
warstwa komunikacji z klientem
usługi systemowe
warstwa logiki biznesowej
warstwa komunikacji z bazą danych baza danych
• Platforma dla uruchamiania komponentów aplikacji wielowarstwowych • Odpowiada za obsługę interakcji z klientem (front-end) • Odpowiada za obsługę interakcji z DBMS (back-end) • Oferuje szereg usług systemowych (transakcje, serwis nazw, połączenia ze źródłami danych, rejestracja wywołań, autoryzacja, szyfrowanie, równoważenie obciążenia, itp.)
Serwer aplikacji
• Funkcjonalność serwerów aplikacji • Administrowanie serwerem WWW • Przetwarzanie danych XML w aplikacjach internetowych: XPath, parsery DOM, parsery SAX • Aplikacje rozproszone w architekturze CORBA • Aplikacje rozproszone w architekturze EJB • Aplikacje rozproszone w architekturze SOAP
Plan wykładów
Apache
Administrowanie serwerem WWW
• BEA WebLogic: CGI, serwlety Java, JSP, EJB, CORBA, SOAP, SSI • IBM WebSphere: CGI, serwlety Java, JSP, EJB, CORBA, SOAP, SSI • Oracle Application Server: CGI, serwlety Java, JSP, EJB, CORBA, SOAP, SSI • Apache: CGI, SSI • Apache Tomcat: CGI, serwlety Java, JSP • Orion: serwlety Java, JSP, EJB
Serwery aplikacji - przykłady
OC4J kod aplikacji J2EE replikowany na wszystkich węzłach OC4J
HTTP Server
OC4J
OC4J
• Uruchamianie, zatrzymywanie z wiersza poleceń: apachectl start apachectl restart apachectl stop
httpd.conf
• Najpopularniejszy serwer WWW, rozwijany w ramach projektu open source • Stanowi podstawę implementacji wielu zaawansowanych serwerów aplikacji (np. Oracle9iAS) • Konfiguracja opisana w tekstowym pliku konfiguracyjnym
Charakterystyka serwera Apache
oddzielna maszyna
Oracle WebCache
HTTP Server
OC4J
Architektura odporna na awarie - przykład Oracle
mod_status
...
mod_alias
• ServerRoot: nazwa katalogu domowego serwera Apache; stosowany jako ścieżka odniesienia dla innych parametrów • PidFile: lokalizacja pliku, w którym nadrzędny proces serwera zapisuje swój własny numer procesu • DocumentRoot: nazwa katalogu, w którym znajdują się dokumenty HTML udostępniane przez serwer • ErrorLog: lokalizacja pliku, w którym zapisywane są komunikaty o błędach obsługi żądań • StartServers: liczba równoległych procesów serwera, automatycznie uruchamianych podczas jego startu • MaxClients: maksymalna liczba żądań, jakie mogą być obsługiwane współbieżnie • MaxSpareServers: maksymalna liczba równoległych procesów serwera, jakie mogą pozostawać bezczynne • MinSpareServers: minimalna liczba równoległych procesów serwera, jakie muszą pozostawać bezczynne
Podstawowe parametry serwera
Prawie cała funkcjonalność serwera Apache jest zaimplementowana w postaci tzw. modułów, statycznie lub dynamicznie linkowanych z rdzeniem serwera.
interfejs HTTP
mod_access
Budowa wewnętrzna serwera Apache
MaxClients=9
Apache
Apache
Apache
Apache
Apache
m ine
r:8
08 0/ A/
B. ht m
Port=80
l
A
B.html
DocumentRoot=/www/htdocs
error.log ErrorLog=logs/error.log
logs
ServerRoot=/www
MinSpareServers=2
ht tp :/ /
Podstawowe parametry serwera - przykład
...
MaxKeepAliveRequests 100
# We recommend you leave this number high, for maximum performance.
# during a persistent connection. Set to 0 to allow an unlimited amount.
# MaxKeepAliveRequests: The maximum number of requests to allow
KeepAlive On
# one request per connection). Set to "Off" to deactivate.
# KeepAlive: Whether or not to allow persistent connections (more than
Timeout 300
# Timeout: The number of seconds before receives and sends time out.
PidFile logs/httpd.pid
# identification number when it starts.
# PidFile: The file in which the server should record its process
ServerRoot "C:\oracle\ora90\Apache\Apache"
# configuration, error, and log files are kept.
# ServerRoot: The top of the directory tree under which the server's
ServerType standalone
# Unix platforms.
# ServerType is either inetd, or standalone. Inetd mode is only supported on
Plik konfiguracyjny httpd.conf
C:\others\prodinfo\a.html
ScriptAlias /mycgi/ "C:/cgi/"
Wszystkie pliki w katalogu zdefiniowanym przy użyciu ScriptAlias są traktowane jako programy CGI
http://www.abc.com/products/a.html
Alias /products/ "C:/others/prodinfo/"
Stosowane w celu umożliwienia dostępu do plików spoza DocumentRoot lub w celu skrócenia ścieżki dostępu do zagłębionych podkatalogów.
Parametry Alias i ScriptAlias
• KeepAlive: uaktywnia obsługę mechanizmu persistent connections protokołu HTTP 1.1 • KeepAliveTimeout: określa maksymalny czas oczekiwania serwera podtrzymującego persistent connection, po upływie którego następuje zamknięcie połączenia HTTP • MaxKeepAliveRequests: określa maksymalną liczbę żądań, jakie mogą zostać obsłużone w ramach jednego persistent connection • Port: numer głównego portu TCP, na którym serwer nasłuchuje połączeń HTTP (domyślnie 80) • Listen: alternatywne adresy IP i numery portów, na których serwer nasłuchuje połączeń HTTP • CustomLog: lokalizacja pliku logu, w którym rejestrowane są wszystkie żądania otrzymane przez serwer • LogFormat: określa format rekordów zapisywanych do pliku logu • DirectoryIndex: nazwa pliku, który zostanie przesłany w odpowiedzi na żądanie z niepełnym adresem URL, np. http://www.abc.com/dir/
Podstawowe parametry serwera
%h: adres IP klienta %l: nazwa użytkownika użyta podczas autoryzacji %u: nazwa użytkownika w systemie klienta %t: czas otrzymania żądania %r: pierwszy wiersz nagłówka żądania HTTP %s: status obsługi żądania (200=OK) %b: rozmiar odpowiedzi w bajtach %{Referer}: adres dokumentu, z którego pochodzi link z żądaniem URL %{User-Agent}: nazwa programu przeglądarki
ErrorDocument 401 /messages/accessdenied.html
ErrorDocument 404 "Przepraszamy, nie posiadamy dokumentu o takim URL
Parametr ErrorDocument
150.254.31.11 - - [19/Mar/2003:19:05:35 +0100] "GET /manual/index.html HTTP/1.0" 200 9268 "http://localhost:7778/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
– – – – – – – – –
• Znaczenie symboli:
CustomLog logs/access.log common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common
Parametr LogFormat
W przypadku, gdy we wskazanym katalogu nie znajduje się domyślny dokument opisany parametrem DirectoryIndex, serwer WWW może automatycznie wygenerować dokument z zawartością katalogu.
Options +Indexes
DirectoryIndex index.html
Options -Indexes
DirectoryIndex index.html
Dyrektywy blokowe - przykład
• : ogranicza zasięg parametrów do nazwanego katalogu fizycznego i jego wszystkich podkatalogów • : jak wyżej, lecz zamiast nazwy katalogu podawane jest wyrażenie regularne • : ogranicza zasięg parametrów do plików spełniających podany wzorzec nazwy • : jak wyżej, lecz zamiast wzorca nazwy pliku podawane jest wyrażenie regularne • : ogranicza zasięg parametrów do nazwanego katalogu wirtualnego • : jak wyżej, lecz zamiast nazwy katalogu wirtualnego podawane jest wyrażenie regularne • : ogranicza zasięg parametrów do podanego serwera wirtualnego
Dyrektywy blokowe
C:\serv2\htdocs\index.html
http://www.xyz.com/index.html
C:\serv1\htdocs\index.html
http://www.abc.com/index.html
allow from 150.254.31.10 192.168.1.12
deny from all
order deny, allow
• allow from: określa adresy komputerów, z których możliwy jest dostęp do zasobów serwera • deny from: określa adresy komputerów, z których niemożliwy jest dostęp do zasobów serwera • order: określa kolejności ewaluacji wyrażeń allow from i deny from
Ochrona dostępu wg adresów
Dzięki zastosowaniu mechanizmu serwerów wirtualnych, jeden fizyczny serwer WWW zachowuje się jak wiele odrębnych, niezależnych serwerów. Rozróżnianie żądań trafiających na ten sam adres IP następuje na podstawie adresów domenowych użytych w URL.
ErrorLog "C:\serv2\logs\error.log"
CustomLog "C:\serv2\logs\access.log" common
DocumentRoot "C:\serv2\htdocs"
ServerName www.xyz.com
ErrorLog "C:\serv1\logs\error.log"
CustomLog "C:\serv1\logs\access.log" common
DocumentRoot "C:\serv1\htdocs"
ServerName www.abc.com
NameVirtualHost 150.254.31.10
Dyrektywy blokowe - przykład
AuthType Basic
AuthUserFile "C:\temp\users.pwd"
Require user scott
Re-type new password: *****
Adding password for user scott
...
Przetwarzanie danych XML w aplikacjach internetowych
Adding password for user guest
Re-type new password: ******
Aplikacja
XML
Aplikacja
Format sieciowej wymiany danych
Aplikacja
XML
TXT
WML
HTML
Źródłowy format danych do prezentacji na różnych platformach
XML
Aplikacja
Format przechowywania danych
Motywacje: wybrane zastosowania XML
SSLCertificateKeyFile conf\ssl.key\server.key
New password: ******
SSLCertificateFile conf\ssl.crt\server.crt
Automatically using MD5 format on Windows.
SSLEngine On
DocumentRoot "C:\serv1\htdocs"
ServerName www.abc.com
Aktywacja modułu SSL
Bezpieczne połączenia
htpasswd c:\temp\users.pwd guest
AuthName "Dostęp tylko dla pracowników"
New password: *****
Ochrona dostępu do katalogu
Automatically using MD5 format on Windows.
htpasswd -c c:\temp\users.pwd scott
Utworzenie pliku haseł
Autoryzacja użytkowników i ochrona dostępu
węzeł atrybutu
węzeł tekstowy
węzeł elementu
korzeń
isbn="83-7243-134-5"
XML krok po kroku
43
Katarzyna Tryc
Read Me
Michael J. Young
XML krok po kroku 43 Michael J. Young Katarzyna Tryc Read Me 2000 ...
Przykład struktury drzewa DOM
Drzewa DOM
2000
prawy węzeł sąsiedni nazwa węzła
nextSibling nodeName
węzeł nadrzędny lewy węzeł sąsiedni
parentNode previousSibling
wartość węzła
ostatni węzeł potomny
lastChild
identyfikator typu węzła
pierwszy węzeł potomny
firstChild
nodeValue
tablica węzłów potomnych
childNodes
nodeType
appendChild(n) tablica atrybutów węzła
replaceChild(n,n)
zamienia istniejący węzeł potomny z podanym węzłem
usuwa wskazany węzeł potomny
dołącza nowy węzeł jako węzeł potomny przed wskazanym węzłem
insertBefore(n,n) removeChild(n)
zwraca prawdę, jeżeli węzeł zawiera węzły potomne
zwraca kopię węzła z/bez węzłami potomnymi
dołącza nowy węzeł jako ostatni węzeł potomny
hasChildNodes()
cloneNode(b)
Metody (W3C)
Atrybuty (W3C) attributes
• Obiekt klasy/typu Node reprezentuje węzeł w drzewie DOM (węzeł elementu, węzeł tekstowy, itd.)
W3C DOM API: obiekt Node
• Document Object Model jest standardem modelowania dokumentów XML przy użyciu struktury drzewa – znaczniki XML i ich zawartość są modelowane przez węzły drzewa; zagnieżdżanie znaczników służy za podstawę do konstruowania hierarchii • Document Object Model jest wykorzystywany jako forma reprezentacji dokumentów XML w pamięci komputera • Transformacja dokumentu XML do postaci Document Object Model jest realizowana automatycznie przez parser DOM • Implementacja, adresowanie i przeszukiwanie drzew Document Object Model mogą być realizowane przy użyciu biblioteki DOM API
Document Object Model (DOM)
zwraca wartość podanego atrybutu
zwraca węzeł podanego atrybutu
zwraca zbiór węzłów o podanej nazwie
usuwa wartość podanego atrybutu
usuwa podany węzeł atrybutu
ustawia nową wartość atrybutu
wstawia nowy węzeł atrybutu
Metody (W3C)
getAttribute(s)
getAttributeNode(s)
getElementsByTagName(s)
removeAttribute(s)
removeAttributeNode(n)
setAttribute(s,s)
setAttributeNode(n)
nazwa węzła
Atrybuty (W3C)
tagName
• Obiekt klasy/typu Element modeluje węzeł reprezentujący znacznik XML
W3C DOM API: obiekt Element
tworzy nowy węzeł komentarza tworzy nowy element tworzy nowy węzeł tekstowy zwraca zbiór węzłów o podanej nazwie
createAttribute(s) createComment(s) createElement(s) createTextNode(s) getElementsByTagName(s)
DTD lub XML Schema dla dokumentu
doctype
wartość atrybutu
value
• Obiekt klasy/typu Text reprezentuje treść umieszczoną wewnątrz znacznika XML
prawda oznacza, że wartość atrybutu jest ustawiona w dokumencie
nazwa atrybutu specified
name
Atrybuty (W3C)
• Obiekt klasy/typu Attr reprezentuje atrybut znacznika XML w formie tzw. węzła atrybutu; obiekt Attr posiada ogólne atrybuty i metody klasy/typu Node plus poniższe:
W3C DOM API: obiekt Attr i Text
tworzy nowy węzeł atrybutu
Metody (W3C) element najwyższego poziomu w dokumencie
Atrybuty (W3C) documentElement
item(i)
zwraca element i-ty element zbioru
Metody (W3C)
Atrybuty (W3C)
length
liczba elementów w zbiorze
• Obiekt klasy/typu Document modeluje całe drzewo DOM; wszystkie węzły drzewa są jego potomkami
W3C DOM API: obiekt Document
• Obiekt klasy/typu NodeList reprezentuje zbiór obiektów typu Node
W3C DOM API: obiekt NodeList
tytulNode.appendChild(tytulText);
Node cenaText = xmlDoc.createTextNode("85");
tytulNode.appendChild(tytulText);
Node tytulText = xmlDoc.createTextNode("Zaawansowany XML");
ksiazkaNode.appendChild(tytulNode);
Node tytulNode = xmlDoc.createElement("tytul");
katalogNode.appendChild(ksiazkaNode);
Node ksiazkaNode = xmlDoc.createElement("ksiazka");
xmlDoc.appendChild(katalogNode);
Node katalogNode = xmlDoc.createElement("katalog");
XMLDocument xmlDoc = new XMLDocument();
Zaawansowany XML
85
Konstrukcja drzewa DOM w języku Java
• Wszystkie typy DOM zostały zaimplementowane w języku Java jako interfejsy w pakiecie org.w3c.dom (posiadają nazwy jak w specyfikacji W3C) i jako klasy rzeczywiste w pakiecie oracle.xml.parser.v2 (posiadają nazwy z prefiksem XML)
Implementacja W3C DOM: Java
•
•
•
•
• • • •
•
•
•
•
•
•
•
•
•
•
•
getDocumentElement() [interfejs Document] – zwraca obiekt węzła reprezentującego znacznik najwyższego poziomu getElementsByTagName(String) [interfejs Document] – zwraca tablicę obiektów węzłów reprezentujących podany znacznik XML getChildNodes() [interfejs Node] – zwraca tablicę obiektów węzłów potomnych (bez węzłow atrybutowych) getAttributes() [interfejs Node] – zwraca tablicę obiektów potomnych węzłów atrybutowych getNodeName() [interfejs Node] – zwraca nazwę znacznika dla węzła getNodeType() [interfejs Node] – zwraca numeryczny identyfikator typu węzła getNodeValue() [interfejs Node] – zwraca treść węzła (tylko dla węzłów tekstowych) getFirstChild() [interfejs Node] - zwraca obiekt pierwszego węzła potomnego (z pominięciem węzłów atrybutowych) getLastChild() [interfejs Node] - zwraca obiekt ostatniego węzła potomnego (z pominięciem węzłów atrybutowych) getNextSibling() [interfejs Node] – zwraca obiekt prawego sąsiada węzła (z pominięciem węzłów atrybutowych) getPreviousSibling() [interfejs Node] – zwraca obiekt lewego sąsiada węzła (z pominięciem węzłów atrybutowych) getParentNode() [interfejs Node] – zwraca obiekt węzła nadrzędnego
Java: funkcje nawigacyjne DOM API
createElement(String) [interfejs Document] – tworzy nowy węzeł, reprezentujący znacznik o podanej nazwie; węzeł ten nie wchodzi jeszcze w skład drzewa dokumentu createTextNode(String) [interfejs Document] – tworzy nowy węzeł tekstowy; węzeł ten nie wchodzi jeszcze w skład drzewa dokumentu appendChild(Node) [interfejs Node] – dodaje nowy węzeł jako ostatni węzeł potomny cloneNode(boolean) [interfejs Node] – wykonuje kopię wskazanego węzła wraz z lub bez jego węzłów potomnych removeChild(Node) [interfejs Node] – odpina wskazany węzeł potomny od jego węzła nadrzędnego replaceChild(Node, Node) [interfejs Node] – odpina istniejący węzeł potomny i na jego miejscu umieszcza nowy węzeł potomny setNodeValue(String) [interfejs Node] – nadaje węzłowi wartość tekstową
Java: funkcje konstrukcji drzew DOM
A
T
E
T
E
Fabio Arc...
#text
autor
E
E
T
T
getChildNodes()
try {
}}} catch (Exception e) {System.out.println(e);}
System.out.println(elementNode.getFirstChild().getNodeValue());
} } catch (Exception e) {System.out.println(e);}
if (elementNode.getNodeName().equals("tytul"))
urlNode = bookNode.getAttributes().item(0);
bookNode = docNodeList.item(i);
for (int i=0; i