Upload
dinhdung
View
246
Download
1
Embed Size (px)
Citation preview
Przebieg prezentacji Serwlety
Serwlety a aplikacje Java EE
Sesje
Ciasteczka
JSP
Cykl życia
Znaczniki
Scope
JSTL
Serwlety+JSP
Serwlety i JSP na platformie Java EE 2
Co to jest serwlet? kawałek kodu w Javie po stronie serwera HTTP
rozszerza możliwośći serwera
CGI, w Javie, wzbogacone o biblioteki ułatwiające życie programiście (np. utrzymywanie sesji, wpólne zasoby serwletów, ciasteczka, obsługa GET/POST/PUT)
serwlety mogą korzystać ze standardowych klas Javy (z VM), klas wchodzących w skład Servlet API: javax.servlet.* i javax.servlet.http.* oraz ewentualnie z dodatkowych bibliotek zainstalowanych na serwerze.
serwlety nie mają interfejsu użytkownika, komunikują się z przeglądarką (za pośrednictwem serwera WWW wspierającego serwlety) za pomocą protokołu HTTP
4Serwlety i JSP na platformie Java EE
Do czego służy serwlet? Do wyświetlania dynamicznych stron WWW
(alternatywa do popularnego PHP)
przetwarzanie formularzy
forwarding
wyświetlania wyników zapytań do b. d. (tu zaleca się strony JSP)
5Serwlety i JSP na platformie Java EE
Miejsce serwletów w aplikacjach J2EE serwlety to rozszerzenie serwera WWW
blisko interfejsu użytkownika: zorientowane na żądanie/odpowiedź (request/response)
serwlety działają w odpowiedzi na żadania klienta
są interfejsem do serwera aplikacyjnego/bazy danych/EJB
pełnią rolę kontrolera w schemacie Model-View-Controller, za widok odpowiedzialne są strony JSP, model to EJB
w serwletach zaleca się umieszczanie tylko lekkich funkji biznesowych, ale w małych aplikacjach cała logika może być w serwletach i JSP
7Serwlety i JSP na platformie Java EE
Komunikacja z serwerem przedefiniowanie metod doGet, doPost, doPut, doDelete.
Te metody są wywoływane przez metodę service zdefiniowaną w Servlet przy każdym żądaniu do serwera dotyczącym serwletu.
dane od klienta (przeglądarki) są w obiekcie HttpServletRequest.
dane do klienta symbolizuje obiekt HttpServletResponse
10Serwlety i JSP na platformie Java EE
Ważne metody obiektu request: getParameter - zwraca parametr, np. z formularza
getCookies - daje ciasteczka
getSession - podaje obiekt sesji
getReader (dla danych tekstowych)
getInputStream (dla danych binarnych)
11Serwlety i JSP na platformie Java EE
Ważne metody obiektu response: getWriter (dane tekstowe)
getOutputStream (dane binarne)
12Serwlety i JSP na platformie Java EE
Serwlet Java Serwlet musi:
dziedziczyć po klasie HttpServlet
obsługiwać jedną z metod: doGet(HttpServletRequest request, HttpServletResponse response)
doPost(HttpServletRequest request, HttpServletResponse response)
opcjonalnie (wywoływane tylko raz!):
public void init(ServletConfig config)
public void destroy()
Serwlety i JSP na platformie Java EE 13
Cykl życia serwletuCykl życia serwletu Java przebiega według następujących
kroków:
1. Klient HTTP przekazuje żądanie HTTP do serwera HTTP. Żądanie jest kierowane do serwera aplikacji Java EE.
2. Serwer aplikacji analizuje adres URL żądania HTTP, pobiera z dysku klasę wskazanego serwletu i tworzy jej obiekt (tzw. obiekt serwletu).
3. Serwer aplikacji wywołuje metodę init() obiektu serwletu.
4. Serwer aplikacji wywołuje metodę doGet() obiektu serwletu. Dokument będący wynikiem działania metody doGet() jest przekazywany klientowi HTTP. Obsługa żądania została zakończona.
Serwlety i JSP na platformie Java EE 16
Cykl życia serwletu na początku system woła metodę init(), w niej można np.
połączyć się z bazą danych
jeżeli coś pójdzie nie tak to należy rzucić wyjątek UnavailableException
można wołać metodę getInitParameter, interpretowaną przez serwer (kontener), np. jako init-param z pliku web.xml w Tomcat'cie. W takim parametrze może być zapisany np. URL do bazy danych.
gdy serwer zdecyduje wyrzucić serwlet z pamięci to wywołuje metodę destroy. Uwaga! Jeżeli metoda do[Get|Post] wykonuje się długo, to trzeba zadbać o jej zakończenie. Jeżeli serwlet uruchamiał wątki, to też trzeba je przerwać.
17Serwlety i JSP na platformie Java EE
Wzmianka o wielowątkowości Serwlety wykonują się w środowisku wielowątkowym, więc
może się zdarzyć, że wiele kopii serwletu będzie działać naraz. A może być tak, że będzie jedna instancja serwletu, ale wiele wątków wykonujących metodę service. Jeżeli w serwlecie jest odwołanie do zasobu, który wymaga wyłączności to:
trzeba zapewnić wykluczanie ręcznie, np. używając zmiennych/metod synchronized
zadeklarować, że serwlet implementuje interfejs SingleThreadModel, wtedy serwer uruchomi jednocześnie tylko jedną instancję metody service, np. public class ReceiptServlet extends HttpServlet implements SingleThreadModel. Ten interfejs nie zawiera żadnych metod, jest tylko znacznikiem dla kontenera.
18Serwlety i JSP na platformie Java EE
Utrzymywanie stanu (session tracking)
To jedna z najważniejszych zalet serwletów. Nie ma tego w CGI.
Cechy:
Obiekty nie są nigdzie składowane, tylko istnieją w pamięci kontenera. Metody operują na referencjach. Po odczytaniu referencji metodą getAttribute operujemy już na oryginalnym (jedynym!) obiekcie.
Po odczytaniu atrybutu trzeba sprawdzić czy jest równy null, jeżeli tak to trzeba utworzyć nowy obiekt (uwaga na wielowątkowość).
Sesje działają standardowo na ciasteczkach. W ciasteczku jest tylko id sesji, reszta siedzi w pamięci kontenera. Jeżeli przeglądarka nie obsługuje ciasteczek to trzeba używać metody encodeURL().
Sesje nie są związane z jednym serwletem, różne serwlety korzystają z tej samej sesji
20Serwlety i JSP na platformie Java EE
Sesje Problem: protokół HTTP jest bezstanowy
Emulacja sesji
Każda sesja otrzymuje identyfikator
Stan sesji przechowywany przez serwer aplikacji
Stan sesji usuwany po wygaśnięciu czasu ważności
Serwlety i JSP na platformie Java EE 21
Sesje przykładHttpSession session = request.getSession(true); (czytanie/pisanie)
Klasa ref_obiektu1 = new Klasa(); (pisanie)
session.putAttribute("dluga.nazwa_atr", ref_obiektu1); (pisanie)
Klasa ref_obiektu2 = (Klasa) session.getAttribute("dluga.nazwa_atr"); (czytanie)
22Serwlety i JSP na platformie Java EE
Ciasteczka Zmienne Cookies reprezentowane w postaci obiektów
klasy Cookie
Wysyłanie zmiennych Cookies: response.addCookie()
Odczyt zmiennych Cookies: request.getCookies()
Serwlety i JSP na platformie Java EE 23
Ciasteczka Wysyłanie
String wartosc = „wartosc";
Cookie ciacho = new Cookie("Nazwa", wartosc);
response.addCookie(ciacho);
Odbieranie
Cookie[] cookies = request.getCookies();
String wartosc;
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("Nazwa"))
wartosc = thisCookie.getValue();
}
24Serwlety i JSP na platformie Java EE
HTTPSession czy Cookies? Oba mechanizmy pozwalają przechowywać stan sesji
Cookies wymaga przesyłania obiektów stanu w nagłówkach HTTP
HTTPSession obsługuje dowolne typy obiektów stanu
Bezpieczeństwo
Serwlety i JSP na platformie Java EE 25
Co to jest JSP?Technologia Java Server Pages (JSP) to technologia szablonów umożliwiających łatwe łączenie statycznego kodu HTML lub XML z dynamiczną zawartościągenerowaną przez kod Java.
Rozszerzenie technologii serwletów
umożliwia osadzanie kodu Javy w dokumencie html
Podstawowe narzędzie tworzenia warstwy prezentacji w architekturze Java EE
27Serwlety i JSP na platformie Java EE
Skryptlet- kod osadzony w dokumencie html za pomocą znaczników jsp
JSP-Cykl życiajspInit()
załadowanie zasobów
_jspService()
Przetwarzanie żądań
jspDestroy()
Zwolnienie zasobów
Serwlety i JSP na platformie Java EE 28
DyrektywyKontrolują sposób translacji JSP do serwletu
Dyrektywy umieszczone są w znacznikach <%@%>
Dostępne są trzy dyrektywy:
<%@ include %>: włączenie zewnętrznego pliku
<%@ page %>: ustawienia strony
<%@ taglib %>: wskazanie na bibliotekę znaczników
<%@page contentType="text/html" pageEncoding="UTF-8"%>
Serwlety i JSP na platformie Java EE 30
Deklaracje Pozwalają na deklarowanie metod i składowych
serwletu wynikowego
Mogą zawierać inicjalizację
Wprowadzane przez znaczniki <%! %>
<%! int licznik = 0; %>
<%! int a, b, c; %>
<%! Array mojaTablica = new Array(); %>
Serwlety i JSP na platformie Java EE 31
Wyrażenia Znaczniki XML umożliwiające wartościowanie wyrażenia
Wartość konwertowana do łańcucha znaków i włączana
do wynikowego kodu HTML lub XML
Wprowadzane przez znaczniki <%= %>
<%! Calendar today = new GregorianCalendar(); %>
<P>Dzisiejsza data to
<%= today.get(Calendar.DAY_OF_MONTH) %>,
<%= today.get(Calendar.MONTH) %>, roku
<%= today.get(Calendar.YEAR) %>
</p>Serwlety i JSP na platformie Java EE 32
Skryptlety Znaczniki XML umożliwiające osadzanie kodu Java
Mogą generować kod HTML lub XML za pomocą
predefiniowanego obiektu out
Wprowadzane przez znaczniki <% %>
<% Calendar dzis = new GregorianCalendar();
int godzina = dzis.get(Calendar.HOUR_OF_DAY);
out.println("<B>jest godzina " + godzina + "</B>");
%>
Serwlety i JSP na platformie Java EE 33
Znaczniki jsp - akcje Znaczniki XML wywołujące akcje serwera aplikacji
Dostępne akcje
<jsp:include>: włączenie zewnętrznego kodu
<jsp:forward>: przekazanie sterowania
<jsp:param>: zdefiniowanie parametru
<jsp:plugin>: obsługa apletów Java
<jsp:fallback>: gdy klient nie obsługuje apletów
i znaczniki do obsługi komponentów JavaBean
Serwlety i JSP na platformie Java EE 34
Strona JSP a dokument JSP Strony JSP nie są poprawnymi dokumentami XML
Standard JSP 1.2 wprowadza tzw. dokumenty JSP
znacznik <jsp:root xmlns:jsp=adres>
skryptlety, deklaracje i wyrażenia posiadająodpowiadające im znaczniki XML:
<jsp:directive>
<jsp:declaration>
<jsp:expression>
<jsp:scriptlet>
<jsp:text>
Serwlety i JSP na platformie Java EE 35
Scope scope - zasięg zmiennych przekazywanych między
kolejnymi cyklami request-response
page, request, session, application
Serwlety i JSP na platformie Java EE 37
Scope-omówienie Page
Podstawowy, domyślny scope. Oznacza, że obiekt z nim powiązany będzie istniał tylko w obrębie danej instancji strony
Request Obiekt istnieje w obrębie jednego zapytania. Jedno zapytanie
może być obsługiwane przez wiele stron
Session Obiekt istnieje w obrębie całej sesji i jest dostępny z poziomu
różnych stron
Application Scope globalny dla całej aplikacji
Serwlety i JSP na platformie Java EE 38
JSTL-co to jest? JSTL (Java Standard Tag Library) to standardowa
biblioteka znacznikow Javy ulatwajaca pisanie stron JSP, tj. sprawiajaca ze strona JSP staje się „bardziej czysta”
Korzystajac z JSTL-a bardzo czesto korzystamy rownież z Jezyka Wyrazeń (EL - Expression Language), który to wraz z szablonami był swego czasu alternatywą dla technologii JSP.
Serwlety i JSP na platformie Java EE 40
JSTL - znaczniki Podstawowe
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Formatujące <%@ taglib prefix="fmt“ uri="http://java.sun.com/jsp/jstl/fmt" %>
XML <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
SQL <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
Funkcje <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
Serwlety i JSP na platformie Java EE 41
MVC przebieg cyklu request-response1. Przeglądarka wysyła żądanie. Aplikacja jest tak
skonfigurowana, że każde żądanie jest kierowane do serwletu –kontrolera.
2. Serwlet – kontroler analizuje żądanie i tworzy wymagane przez żądany widok obiekty klas zewnętrznych. Interakcja kontrolera z modelem może pociągać za sobą interakcję z bazą danych.
3. Serwlet przekazuje sterowanie do odpowiedniego widoku -strony JSP.
4. JSP pobiera dane z obiektów modelu przygotowanych przez kontroler. Obiekty te mogą udostępniać dane pobrane z bazy danych.
5. JSP generuje wynikowy dokument HTML przesyłany do przeglądarki.
Serwlety i JSP na platformie Java EE 44
Zalety Ogromną zaletą tego podejścia jest wykorzystanie
mocnych stron każdej z technologii i uniknięcie ich słabości. W JSP niewygodne jest pisanie bardziej skomplikowanych programów, ale za to łatwo jest generować kod strony. Z kolei w serwletach jest na odwrót.
Serwlety i JSP na platformie Java EE 45
Przydatne linki http://docs.oracle.com/javaee/
http://tomcat.apache.org/tomcat-4.0-doc/servletapi/
http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm
Serwlety i JSP na platformie Java EE 46