Java podstawy Servletów i JSP -...

47
Serwlety i JSP na platformie Java EE Damian Makarow

Transcript of Java podstawy Servletów i JSP -...

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

Wprowadzenie

Serwlety

3Serwlety i JSP na platformie Java EE

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

6Serwlety 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

Model J2EE

8Serwlety i JSP na platformie Java EE

Kontenery w modelu J2EE

9Serwlety 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 serwletu

Serwlety

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 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

Sesje i ciasteczka

Serwlety

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

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

Wprowadzenie

Java Server Pages

26Serwlety i JSP na platformie Java EE

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

Znaczniki i ich zastosowanie

Java Server Pages

Serwlety i JSP na platformie Java EE 29

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-zasięg obiektów

Java Server Pages

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

JSTL kilka słów o standardzie

Java Server Pages

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

Zastosowanie

Serwlet + JSP

Serwlety i JSP na platformie Java EE 42

MVC – Model View Controller

Serwlety i JSP na platformie Java EE 43

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

Dziękuję za uwagę

Serwlety i JSP na platformie Java EE 47