Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego www.math.uni.lodz.pl/ radmat radmat@math.uni.lodz.



Podobne dokumenty
Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Serwery aplikacji. dr Radosław Matusik. radmat

1 Wprowadzenie do J2EE

CGI i serwlety. Plan wykładu. Wykład prowadzi Mikołaj Morzy. Przykład: serwlety vs. szablony. Implementacja logiki prezentacji

Piotr Laskowski Krzysztof Stefański. Java Servlets

Java wybrane technologie spotkanie nr 3. Serwlety

Wybrane działy Informatyki Stosowanej

Nowe mechanizmy w wersji 3 Java Card. Mateusz LESZEK (138775)

Architektury Usług Internetowych. Laboratorium 1 Servlety

Architektury Usług Internetowych. Laboratorium 1. Servlety

Wybrane działy Informatyki Stosowanej

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Serwlety. Co to jest serwlet? Przykładowy kod serwletu. Po co są serwlety?

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

EJB 3.0 (Enterprise JavaBeans 3.0)

Aplikacje Internetowe, Servlety, JSP i JDBC

mgr inż. Michał Paluch

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

1 90 min. Aplikacje WWW Harmonogram spotkań, semestr zimowy (studia stacjonarne)

In»ynieria systemów informacyjnych - Adam Krechowicz

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Serwery Aplikacji "CC" Grzegorz Blinowski. tel (22) ; faks (22)

Aplikacje WWW - laboratorium

Wzorce prezentacji internetowych

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

POLITYKA PRYWATNOŚCI ORAZ POLITYKA PLIKÓW COOKIES W Sowa finanse

prepared by: Programowanie WWW Servlety

TIN Techniki Internetowe zima

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Wybrane działy Informatyki Stosowanej

Komunikacja między serwletami

Aplikacje WWW Wprowadzenie

Aplikacje internetowe i rozproszone - laboratorium

Serwlety i JSP na platformie Java EE. Damian Makarow

JavaServer Pages. Konrad Kurdej Karol Strzelecki

Enterprise JavaBeans (EJB)

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Polityka prywatności Spółdzielni Mieszkaniowej Słoneczny Stok

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09

Programowanie obiektowe zastosowanie języka Java SE


Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Programowanie Komponentowe WebAPI

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

TIN Techniki Internetowe Lato 2005

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5

Programowanie w Javie 2. Płock, 26 luty 2014 r.

POLITYKA PRYWATNOŚCI SERWIS:

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Czym jest jpalio? jpalio jpalio jpalio jpalio jpalio jpalio jpalio jpalio

Enterprise JavaBeans

Niezbędne serwery aplikacji. Wprowadzenie do technologii JBoss i Apache Tomcat.

SOP System Obsługi Parkingów

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Programowanie komponentowe 5

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Wprowadzenie do JSP. Marcin Apostoluk, Tadeusz Pawlus, Wojciech Walczak. Technologie Biznesu Elektronicznego, 7 marzec 2006

Testowanie aplikacji Java Servlets

Serwlety i JSP. Autor: Marek Zawadka deekay@gazeta.pl

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Serwery aplikacji. dr Radosław Matusik. radmat

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Programowanie współbieżne i rozproszone

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Podyplomowe Studium Informatyki w Bizniesie Wydział Matematyki i Informatyki, Uniwersytet Łódzki specjalność: Tworzenie aplikacji w środowisku Oracle

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Aplikacje internetowe - laboratorium

ZASADY KORZYSTANIA Z PLIKÓW COOKIES ORAZ POLITYKA PRYWATNOŚCI W SERWISIE INTERNETOWYM PawłowskiSPORT.pl

Rozwiązanie Compuware Data Center - Real User Monitoring

Aplikacje RMI

Wywoływanie metod zdalnych

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Komunikacja i wymiana danych

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Zaawansowany kurs języka Python

Wybrane działy Informatyki Stosowanej

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Cemarol Sp. z o.o. Polityka prywatności (pliki cookies) 1. Informacje ogólne.

Cookie Policy. 1. Informacje ogólne.

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

System generacji raportów

Polityka prywatności Rankosoft Sp. z o.o. Sp. komandytowa

Transkrypt:

Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego www.math.uni.lodz.pl/ radmat radmat@math.uni.lodz.pl

Serwer aplikacji Serwer aplikacji to: Serwer wchodzący w skład sieci komputerowej, przeznaczony do zdalnego uruchamiania i użytkowania aplikacji. Zestaw oprogramowania (platforma) wspierająca programistę / developera przy tworzeniu aplikacji. Umożliwia oddzielenie logiki biznesowej od usług dostarczanych przez producenta platformy (bezpieczeństwo, zarządzanie transakcjami, skalowalność, czy też dostęp do baz danych). Do serwerów aplikacji należą m.in.: JBoss, BEA WebLogic, IBM WebSphere oraz platforma.net Microsoftu. Program działający na zdalnej maszynie obsługujący żądania kierowane do aplikacji, do której dostęp zapewnia. Użytkownik łączy się za pośrednictwem przeglądarki internetowej, kieruje żądanie do wybranej aplikacji, a całość operacji odbywa się po stronie usługodawcy serwera.

Architektura WWW Rysunek: Architektura

Realizacja aplikacji WWW wymaga zastosowania rozszerzonej architektury WWW, w skład której wchodzą trzy programowe warstwy funkcjonalne: warstwa klienta warstwa aplikacji warstwa danych

Architektura serwerów aplikacji Kluczowym składnikiem rozszerzonej architektury WWW, umożliwiającym wykonywanie aplikacji WWW, jest serwer aplikacji. Serwer aplikacji jest oprogramowaniem o charakterze systemowym, które odpowiada m.in. za obsługę komunikacji z warstwą klienta i warstwą danych. Dzięki temu programista tworzący aplikacje WWW nie musi samodzielnie implementować kodu obsługi protokołu HTTP (z klientem HTTP) ani kodu obsługi komunikacji SQL (z serwerem bazy danych).

1 Warstwa kliencka aplikacje klienckie aplety 2 Warstwa webowa Java Servlet Java Server Pages Java Server Faces 3 Warstwa serwerowa Enterprise Java Beans 4 Wymiana danych pomiędzy warstwami

Architektura czterowarstwowa Architektura czterowarstwowa (4-tier architecture) zakłada, że komponenty aplikacji WWW dzielą się na dwie grupy: komponenty logiki prezentacji i komponenty logiki biznesowej.

Architektura Model-View-Controller Architektura Model-View-Controller zakłada, że komponenty aplikacji WWW dzielą się na trzy grupy: komponenty sterujące (controller), komponenty prezentacji (view) i komponenty modelu (model).

Rodzaje serwerów aplikacji Apache Tomcat GlassFish Bea Weblogic ZOPE (Z Object Publishing Environment) Windows 2003 Server.Net

Usługi serwerów aplikacji pule zasobów (na przykład pule bazy danych i pule obiektów) rozproszone zarządzanie transakcjami asynchroniczna komunikacja programowa, zazwyczaj poprzez kolejkowanie wiadomości dokładnie zsynchronizowany model aktywacji obiektu automatyczne interfejsy usług sieci Web XML umożliwiające dostęp do obiektów biznesowych usługi wykrywania awarii i stanu aplikacji zintegrowane zabezpieczenia

Klienci serwerów aplikacji 1 Klient HTML: statyczny brak lub minimalna logika porozumiewa się za pośrednictwem HTTP 2 Klient Java aplet java+html własna logika porozumiewa się za pośrednictwem IIOP lub JRMI

Zalety serwerów aplikacji niski koszt utrzymania klienta obsługa standardów otwartych szerokie możliwości generowania i publikowania informacji

Wymagania stawiane serwerom aplikacji integralność transakcji skalowalność, wydajność stabilność otwartość (w sensie obsługi standardów) bezpieczeństwo ochrona inwestycji

Cechy serwerów aplikacji umożliwia tworzenie i obsługę aplikacji napisanych m.in. w C, C++, Javie obsługuje wydajnie transakcyjne relacyjne bazy danych, jest niezależny od producenta bazy oferuje dużą skalowalność (obsługa klastrów) zapewnia zintegrowane, zcentralizowane zarządzanie obsługuje standardy: HTTP, HTML, CGI, NSAPI (Netscape), ISAPI (Microsoft), Java zawiera środowisko do tworzenia, testowania, wdrażania i zarządzania aplikacjami

Pliki konfiguracyjne w katalogu conf server.xml tomcat-users.xml web.xml

Pliki konfiguracyjne w katalogu logs catalina.2016-02-20.log localhost access log.2016-02-20

Java Enterprise Edition Java Enterprise Edition (w skrócie J EE) jest standardem tworzenia zorientowanych na usługi aplikacji biznesowych (Service Oriented Architecture), utworzonym na bazie języka Java i technologii Java 2 Standard Edition. W praktyce jest to pewien zbiór (pakiet) różnorodnych technologii i frameworków, który umożliwia tworzenie aplikacji.

Aplikacje webowe korzystają z grupy tych samych elementów, z których korzystają aplikacje biznesowe. Jednak formalnie aplikacje webowe powinny korzystać jedynie z: JavaServer Faces JavaServer Pages JavaServer Pages Standard Tag Library Java Servlet Jednym z najważniejszych elementów, które odróżniają aplikacje J EE od innych, jest konieczność ich uruchamiania na specjalnych serwerach aplikacji. Do aplikacji biznesowych często wykorzystywany jest serwer GlassFish, który oczywiście obsługuje także technologię EJB.

Układ katalogów projektu w Netbeansie Struktura stworzonego za pomocą Netbeansa projektu jest następująca: 1 Web Pages META-INF WEB-INF 2 Source Packages 3 Libraries

Serwlety Serwlet w Javie jest klasą, która rozszerza możliwości serwera aplikacji. Praktycznie jedynym wymaganiem jest, aby serwlet działał w trybie żądanie - odpowiedź. Serwlet wykonuje się w środowisku serwera WWW (aplikacji) i nie może funkcjonować autonomicznie. Serwer WWW musi zapewniać obsługę serwletów Java.

Hierarchia dziedziczenia Interfejs Servlet Abstrakcyjna klasa GenericServlet Klasa HttpServlet

Metody do* doget() dopost() dohead() dotrace() doput() dodelete() dooptions() doconnect()

Interfejs HttpServletRequest Najbardziej istotne metody interfejsu HttpServletRequest: Object getparameter(string nazwa) Enumeration<String> getparameternames() String getremoteuser() Cookie[] getcookies() String getheader(string nazwa)

int getintheader(string nazwa) long getdataheader(string nazwa) String getcontextpath() String getservletpath() String getpathinfo()

Interfejs HttpServletResponse Najbardziej istotne operacje, które będziemy wykonywać przesyłając odpowiedź klientowi (dzięki interfejsowi HttpServletRequest): przesyłanie odpowiedzi w postaci danych tekstowych lub binarnych tworzenie i przesyłanie ciasteczek dodawanie do odpowiedzi dowolnych nagłówków przekierowywanie żadań lub przesyłanie kodów błędu

Życie serwletu W chwili uruchomienia aplikacji serwer aplikacji podejmuje następujące działania: załadowanie klasy serwletu utworzenie instancji serwletu wywołanie metody init() wywołanie metody service()

Struktura serwletu protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); }

protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); } public String getservletinfo() { return "Short description"; }

Zalety i wady serwletu 1 Zalety: dostępne funkcje do obsługi typowych czynności mechanizm stosunkowo ustandaryzowany mechanizm uniwersalny i łatwo rozszerzalny stosunkowo bezpieczne 2 Wady: w bardziej złożonych środowiskach wydajność może pozostawiać wiele do życzenia (wymagania na RAM, garbage collection) występują istotne różnice pomiędzy różnymi środowiskami bazującymi na serwletach (np. por. - Tomcat, Oracle App. Server, IBM Websphere)

Żądanie - odpowiedź W przypadku żądania mamy do czynienia z odczytem nagłówków i ciasteczek, które przesyłane są przez klienta. Natomiast w przypadku odpowiedzi występuje proces odwrotny. Mamy do dyspozycji dwie metody: void addheader(string nazwa, String wartość) void setheader(string nazwa, String wartość)

Do obowiązków odpowiedzi HTTP należy także przekazywanie kodów odpowiedzi, jeśli chcemy zaznaczyć, że odpowiedź nie zostanie zakończona w zwykły sposób. Kod odpowiedzi przekazujemy wykorzystując metodę void setstatus(int kod). W przypadku błędów (np. brak zasobu - kod błędu 404) należy wykorzystywać metody void senderror(int kod) lub void senderror(int kod, String komunikat)

Korzystając z metod senderror() i sendredirect() należy pamiętać o kwestiach związanych z fizycznym przesyłaniem danych do klienta. Zauważmy, że przesyłanie komunikatów o błędach lub przekierowań stanowi ingerencję w sam proces przesyłania odpowiedzi. Proces odpowiedzi jest natychmiast przerywany, a klient otrzymuje komunikat z wybranym kodem odpowiedzi. Jeśli jednak zdążymy wysłać już do klienta jakieś dane, nastąpi błąd. Po wysłaniu danych nie można bowiem ingerować w treść nagłówków, czyli nie można także ustawić kodu odpowiedzi.

Nagłówki Accept. Ten nagłówek określa typy MIME, jakie przeglądarka lub inny program jest w stanie obsługiwać Accept-Encoding. Ten nagłówek podaje typy kodowania, które klient jest w stanie obsługiwać. Connection. Ten nagłówek zawiera informację czy klient jest w stanie obsługiwać trwałe połączenia HTTP. Cookie. Nagłówek ten jest stosowany do przekazania na serwer WWW cookies, które wcześniej serwer ten przesłał do przeglądarki.

Host. Przeglądarki muszą generować ten nagłówek, ponieważ zawiera on określenie komputera (host) oraz numer portu podany w adresie URL. Referer. Ten nagłówek zawiera adres URL strony z jakiej zostało przesłane żądanie. User-Agent. Ten nagłówek określa jaka przeglądarka lub program nadesłał żądanie.

Choć użycie metody getheader jest ogólnym sposobem odczytywania wartości nagłówków żądania, to jednak wartości niektórych nagłówków są pobierane tak często, że interfejs HttpServletRequest udostępnia specjalne metody pozwalające na dostęp do tych wartości. getcookies - metoda ta przetwarza zawartość nagłówka Cookie i zwraca ją w postaci tablicy obiektów Cookie. getauthtype oraz getremoteuser - metody te dzielą nagłówek Authorization na elementy składowe. getcontentlength - metoda ta zwraca wartość nagłówka Content-Length w formie liczby całkowitej (typu int). getcontenttype - metoda ta zwraca obiekt String zawierający wartość nagłówka Content-Type.

getdateheader oraz getintheader - metody te odczytują wartość nagłówka o podanej nazwie i zwracają ją odpowiednio jako wartość typu Date oraz typu int. getheadernames - metoda ta zwraca obiekt Enumeration. Zamiast pobierać wartość konkretnego nagłówka, można stworzyć listę nazw wszystkich nagłówków umieszczonych w danym żądaniu. getheaders - w większości przypadków nazwa konkretnego nagłówka pojawia się w danym żądaniu tylko raz. Jednak od czasu do czasu, ten sam nagłówek może się pojawić w żądaniu kilka razy, a za każdym razem jego wartość może być różna.

getmethod - zwraca metodę żądania (zazwyczaj jest to wartość GET lub POST, jednak mogą się także pojawić wartości HEAD, PUT bądź DELETE). getrequesturi - metoda ta zwraca fragment adresu URL znajdujący się za nazwą komputera i numerem portu oraz przed danymi pochodzącymi z formularza. getprotocol - metoda ta zwraca część wiersza żądania, określającą używany protokół.

Ciasteczka Ciasteczka (cookies) są to niewielkie pliki przechowywane na komputerach użytkowników aplikacji webowych, dzięki czemu mamy mozliwość zapamiętania ich preferencji, loginów, haseł, itp. Utworzenie ciasteczka wymaga podania jego nazwy i wartości, jaką ma posiadać: Cookie c=new Cookie( mojeciasteczko, wartość ). Wysłanie ciasteczka realizowane jest za pomocą metody response.addcookie(c). Stworzone ciasteczka są dostępne za pomocą Cookie[] c=request.getcookies().

Dostępne są następujące metody ciasteczek: setname() getname() setvalue() getvalue() setmaxage() getmaxage() setpath() getpath()

Korzyści związane ze stosowania ciasteczek: identyfikacja użytkowników podczas trwania sesji w witrynach komercyjnych unikanie konieczności podawania nazwy użytkownika i hasła dostosowywanie witryny dobór reklam

Kilka ciekawostek: Ciasteczka w żaden sposób nie są ani interpretowane, ani wykonywane, w związku z czym nie można ich użyć do przekazania wirusa lub zaatakowania komputera. Przeglądarki internetowe akceptują zazwyczaj 20 ciasteczek pochodzących z jednej witryny i nie więcej, niż 300 łącznie. Pojedyncze ciasteczko nie może mieć więcej, niż 4kB wielkości. Ciasteczka nie mogą przechowywać ważnych informacji - danych personalnych, numerów kart kredytowych, itp. Działanie strony nie może zależeć od tego, czy przeglądarka użytkownika obsługuje ciasteczka.

Sesje Obsługa sesji jest nieodłącznym elementem większości aplikacji webowych. Służy zapisywaniu informacji o poszczególnych klientach odwiedzających daną stronę. Informacje te zapisywane są na serwerze i identyfikowane przez odpowiednie ciasteczko wysyłane do klienta. W celu uzyskania obiektu sesji z serwletu należy posłużyć się odpowiednią metodą obiektu klasy request: HttpSession getsession() lub HttpSession getsession(boolean czytworzyc).

Wybrane metody klasy HttpSession: getattributenames() setattribute(string nazwa, Object wartość) getattribute(string nazwa) getid() getcreationtime() getlastaccessedtime() setmaxinactivetime() getmaxinactivetime() invalidate() isnew() removeattribute()

Warunki zakończenia sesji: ręczne zakończenie sesji przez programistę upłynięcie czasu życia sesji zamknięcie okna przeglądarki przez użytkownika

Metody obsługi sesji: w elemencie HIDDEN (dla metody GET ma ograniczoną wielkość, istnieje także ryzyko manipulacji przez klienta) w cookie (ograniczona wielkość, limitowana przez ciasteczko; również istnieje ryzyko manipulacji przez klienta) w obiekcie serwera (dla bezpiecznych aplikacji zaleca się stosowanie protokołu HTTPS)

Kontekst serwletów Kontekst serwletów to obiekt, który służy do komunikacji serwletów z kontenerem. Dzięki niemu można: dynamicznie dodawać serwlety do aplikacji uzyskiwać dostęp do zasobów znajdujących się w obrębie aplikacji zapisywać logi do dziennika znajdującego się na serwerze korzystać z parametrów aplikacji webowej (kontekstu)

Atrybuty Najważniejszym środkiem komunikacji pomiędzy poszczególnymi elementami aplikacji (serwletem, kontenerem, sesją, użytkownikiem i obiektem żądania) są atrybuty. Zestawienie parametrów i atrybutów: Parametry Atrybuty Zakres Zapis Odczyt Zapis Odczyt Żądanie NIE TAK TAK TAK Serwlet NIE TAK BRAK BRAK Sesja BRAK BRAK TAK TAK Kontekst TAK TAK TAK TAK

Atrybuty, a mnogość żądań Jedna aplikacja webowa może być obsługiwana przez nawet tysiące użytkowników jednocześnie. Każde żądanie HTTP request obsługiwane jest przez kontener w osobnym wątku. Niezwykle istotną kwestią jest zapewnienie integralności operacji wykonywanych przez każdego z użytkowników. Oczywiście nie może się zdarzyć, że operacje wykonywane przez jednego użytkownika mają wpływ na operacje wykonywane przez innego. Problem ten praktycznie nie występuje w przypadku parametrów.

Atrybuty sesji Jedna sesja jest powiązana z jednym użytkownikiem. Może się jednak zdarzyć, że użytkownik uruchomi ten sam serwlet w dwóch zakładkach w przeglądarce internetowej i będzie próbował przy pomocy tego serwletu zapisać jakieś informacje. W tym przypadku nastąpiłby jednoczesny dostęp do sesji. Aby rozwiązać ten problem należy skorzystać ze standardowego mechanizmu Javy, jakim jest synchronizacja.

HttpSession sesja=request.getsession(): synchronized(sesja) { if(sesja.isnew()) sesja.setattribute("licznik",1); else { int licznik=integer.parseinteger( sesja.getattribute("licznik").tostring()); sesja.setattribute("licznik",licznik+1); } }

Atrybuty kontekstu serwletów Największe niebezpieczeństwo niesie ze sobą korzystanie z atrybutów należących do kontekstu serwletów. Każdy taki atrybut może być odczytany i zmodyfikowany niemal w dowolnym miejscu aplikacji. Z tego względu każda próba korzystania z atrybutów (szczególnie zapisu) powinna być zsynchronizowana.

ServletContext s=this.getservletcontext(): synchronized(s); { Object licznik=sc.getattribute("licznik"); if(licznik==null) sc.setattribute("licznik",1); else { licznik=sc.getattribute("licznik"); sc.setattribute("licznik",integer.parseint (licznik.tostring())+1); } }

Filtry Filtry umożliwiają wykonywanie operacji w momencie nadejścia żądań do serwletów i wygenerowania przez nie odpowiedzi. Nie ingerują jednak w działanie samego serwletu. Można w związku z tym np. zapisać w dzienniku datę każdego żądania, czy też jakie są jego parametry. Dzięki filtrom można skompresować treść odpowiedzi, zanim zostanie ostatecznie przesłana do klienta, a także np. odrzucać żądania, które nie spełniają określonych warunków. Największą zaletą filtrów jest możliwość podłączenia ich do dowolnej grupy serwletów. Filtry są łączone z serwletami za pomocą znacznika url-pattern, który działa analogicznie, jak w przypadku serwletów.

Filtr jest klasą implementującą interfejs javax.servlet.filter. Interfejs ten składa się z następujących metod: void init(filterconfig c) void dofilter(servletrequest request, ServletResponse response, FilterChain chain) void destroy()