Aplikacje internetowe i rozproszone

Serwery aplikacji dr inż. Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska [email protected] http://www.cs.put.poznan.pl/~mzakrz/...
Author: Kinga Woźniak
0 downloads 2 Views 475KB Size
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