Java podstawy Servletów i JSP

advertisement
Serwlety i JSP
na platformie Java EE
Damian Makarow
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
Serwlety
Wprowadzenie
Serwlety i JSP na platformie Java EE
3
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
Serwlety i JSP na platformie Java EE
4
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)
Serwlety i JSP na platformie Java EE
5
Serwlety
Miejsce serwletów w
aplikacjach J2EE
Serwlety i JSP na platformie Java EE
6
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
Serwlety i JSP na platformie Java EE
7
Model J2EE
Serwlety i JSP na platformie Java EE
8
Kontenery w modelu J2EE
Serwlety i JSP na platformie Java EE
9
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
Serwlety i JSP na platformie Java EE
10
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)
Serwlety i JSP na platformie Java EE
11
Ważne metody obiektu response:


getWriter (dane tekstowe)
getOutputStream (dane binarne)
Serwlety i JSP na platformie Java EE
12
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
Serwlety
Cykl życia serwletu
Serwlety i JSP na platformie Java EE
14
Cykl życia serwletu
init()
doGet/doPost()
destroy()
Serwlety i JSP na platformie Java EE
15
Cykl życia serwletu
Cykl ż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ć.
Serwlety i JSP na platformie Java EE
17
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.
Serwlety i JSP na platformie Java EE
18
Serwlety
Sesje i ciasteczka
Serwlety i JSP na platformie Java EE
19
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
Serwlety i JSP na platformie Java EE
20
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ład
HttpSession 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)
Serwlety i JSP na platformie Java EE
22
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();
}

Serwlety i JSP na platformie Java EE
24
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
Java Server Pages
Wprowadzenie
Serwlety i JSP na platformie Java EE
26
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
Skryptlet- kod osadzony w dokumencie
html za pomocą znaczników jsp
Serwlety i JSP na platformie Java EE
27
JSP-Cykl życia
jspInit()
załadowanie zasobów
_jspService()
Przetwarzanie żądań
jspDestroy()
Zwolnienie zasobów
Serwlety i JSP na platformie Java EE
28
Java Server Pages
Znaczniki i ich
zastosowanie
Serwlety i JSP na platformie Java EE
29
Dyrektywy
Kontrolują 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
Java Server Pages
Scope-zasięg obiektów
Serwlety i JSP na platformie Java EE
36
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
Java Server Pages
JSTL kilka słów o
standardzie
Serwlety i JSP na platformie Java EE
39
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
Serwlet + JSP
Zastosowanie
Serwlety i JSP na platformie Java EE
42
MVC – Model View Controller
Serwlety i JSP na platformie Java EE
43
MVC przebieg cyklu request-response
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.
1.
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_li
brary.htm
Serwlety i JSP na platformie Java EE
46
Dziękuję za uwagę
Serwlety i JSP na platformie Java EE
47
Download