JavaServer Pages

Transkrypt

JavaServer Pages
Kurs WWW
1
Paweł Rajba
[email protected]
http://pawel.ii.uni.wroc.pl/
1
Na podstawie: Hougland, D. i Tavistock A., JSP. Tworzenie stron WWW, RM, Warszawa 2002
Wprowadzenie
 Technologia po stronie serwera
 Strony JSP są kompilowane
 JSP to specyfikacja, a nie produkt – jest kilka
implementacji (Tomcat, ...)
 Jest to jeden z elementów J2EE, czyli jest
dostępne wiele elementów z Javy
 Bezpieczeństwo gwarantowane przez silny
system typów
 Obsługa wyjątków
Tomcat
 Jedna z implementacji JSP, projekt apache.org
 Struktura katalogów
 /bin


/conf


pliki konfiguracyjne (najważniejszy: server.xml)
/logs


programy i skrypty (.sh lub .bat)
pliki dziennika
/webapps, /webapps/ROOT

aplikacje, domyślna lokalizacja
Składnia
 typu JSP (rekomendowana)
<% skrypt %>
 typu XML
 <jsp:element >skrypt</jsp:element>

Elementy w JSP
 Wyróżniamy trzy typy elementów
 Elementy skryptowe


Elementy akcji


fragmenty kodu w Javie, które generuja kod HTML,
XHTML, itd.
predefiniowane funkcje; specyfikacja JSP zawiera
kilka takich funkcji, a dzięki specyfikacji JSP 1.1
można tworzyć własne znaczniki
Dyrektywy

określają informacje dodatkową, ogólną, dotyczacą
całej strony
Elementy skryptowe
 Elementy skryptletu
 Składnia



<% kod %>
<jsp:scriptlet>kod</jsp:scriptlet>
Przykład

data.jsp
 Elementy wyrażenia
 Składnia



<%= kod %>
<jsp:expression>kod</jsp:expression>
Przykład

data2.jsp
Elementy skryptowe
 Elementy deklaracji
 Uwagi:



Składnia



Elementy deklaracji nie generują żadnych napisów
Zmienne i metody utworzone w elemencie
deklaracji są globalne
<%! kod %>
<jsp:declaration>kod</jsp:declaration>
Przykład

data3.jsp
Elementy skryptowe
 Sterowanie przepływem
 Instrukcje jak w Javie:


if..then..else, while..do, for, try..catch
Można ,,wyskakiwać'' z kodu JSP

Przykład: dnitygodnia.jsp
 Komentarze
 wewnątrz kodu:



// ...
/* ... */
zewnętrzne:


<%-- ... --%>
<!-- ... -->
Elementy akcji
 Składnia
 <jsp:nazwa_akcji atrybut="wartosc" />
 Atrybuty:
 Dla wszystkich elementów akcji dostępne są
dwa atrybuty:


id – jednoznacznie identyfikuje elementy akcji, a w
przypadku, gdy taki element tworzy obiekt, to
poprzez id można sie do niego później odwoływać
scope – określa czas życia elementu akcji. Moze
on przyjmowac nastepujace wartosci:
Elementy akcji
 Atrybuty c.d.

scope
 page – obiekty o tym zasiegu sa dostępne jako część
strony i są usuwane po wysłaniu odpowiedzi do klienta
lub po przekierowaniu,
 request – obiekty o tym zasięgu są dostępne ze stron
przetwarzających to samo żądanie; podobne do page,
ale obiekt bedzie dalej dostepny po przekazaniu
żądania do innej strony JSP
 session – obiekty o tym zasięgu będą dostępne ze
stron przetwarzających żądania w takiej samej sesji
jak ta, w której zostały utworzone
 application – obiekty będą dostępne ze stron
przetwarzających żądania z tej samej aplikacji jak ta,
w której zostały utworzone
Elementy akcji
 Standardowe akcje
 Zasobów




include – dołącza plik
forward – przekierowuje do nowej lokalizacji
plugin – wstawia na stronę komponent Javy
JavaBeans
Elementy akcji
 Akcja include
 Składnia


<jsp:include page="adres" flush="true" />
<jsp:include page="adres" flush="true">
<jsp:param name="param"
value="wartosc" /> ...
</jsp:include>
 page="adres" – względny adres zasobu, który ma
zostać dołączony
 flush="true" – określa buforowanie; należy koniecznie
ustawić na true

Przykłady

akcja_include.jsp, tytul.jsp
Elementy akcji
 Akcja forward
 Składnia


<jsp:forward page="adres" />
<jsp:forward page="adres">
<jsp:param name="param"
value="wartosc" /> ...
</jsp:forward>
 page="adres" – względny adres zasobu, na który
zostaniemy przekierowani

Uwaga:


w pasku adresu URL pozostanie bez zmian
Przykłady:

akcja_forward.jsp
Elementy akcji
 Akcja plugin
 Składnia

<jsp:plugin type="bean|applet"
code="objectCode"
codebase="objectCodebase"
align="alignment" height="height" width="width"
hspace="hspace" vspace="vspace" title=”title”
name="componentName">
<jsp:params>
<jsp:param name="name" value=”value" /> ...
</jsp:params>
<jsp:fallback>Na wypadek awarii</jsp:fallback>
</jsp:plugin>
Elementy akcji
 Akcja plugin
 Przykład

<jsp:plugin type="applet"
code="gierka.class"
codebase="/aplety"
width="200" height="200">
<jsp:param name="parametr"
value="wartosc jego" />
<jsp:fallback>Nie mozna uruchomic Java
Plugin</jsp:fallback>
</jsp:plugin>
Elementy akcji
 Model komponentowy, krótkie wprowadzenie
do Enterprise JavaBeans (EJB)



Komponenty, czyli JavaBeans
JavaBean ma zdefiniowane tzw. właściwosci i
metody dostępowe, poprzez które komunikuje
sie z otoczeniem.
JavaBean to zwykła klasa utworzona przy
stosowaniu kilku zasad.
Elementy akcji
 Zasady tworzenia bean-a
 Konstruktor nie moze przyjmowac zadnych
argumentów.
 Własciwosci i metody dostępowe. Dla każdej
właściwosci istnieją metody dostępowe i dostęp
do nich jest tylko przez te metody. Dla każdej
właściwosci powinny być zdefiniowane
nastepujące 3 (ewentualnie 2) metody



public {Typ obiektu} get{Własciwosc} ()
public void set{Własciwosc} ({Typ obiektu})
public boolean is{Własciwosc} ()
Elementy akcji
 Zasady tworzenia bean-a c.d.
 Właściwości indeksowane






public {Typ obiektu}[] get{Własciwosc} ()
public void set{Własciwosc} ({Typ obiektu}[])
public {Typ obiektu} get{Własciwosc} (int)
public void set{Własciwosc} (int, {Typ obiektu})
Widoczność: poza konstruktorem i metodami
dostępowymi nic nie powinno być widoczne.
Przykład:
 ProstyBean.java
Elementy akcji
 Akcja JavaBeans
 Warte zainteresowania, gdyż całość
implementacji może być zawarta JavaBeans, a
JSP tylko jej wykorzystanie
 Wyszukuje obiektu (za pomoca id i scope) lub
tworzy jego egzemplarz oraz związuje ten
obiekt z niejawnym obiektem utworzonym
poprzez atrybut scope. Znacznik useBean
może, ale nie musi miec ciała.
Elementy akcji
 Akcja JavaBeans
 Atrybuty





id – identyfikuje obiekt; atrybut wymagany,
scope – okresla zasięg,
class – definiuje implementację obiektu; jeśli nie
podamy class lub beanName, to obiekt musi
dostępny w podanym zasięgu,
type – typ tworzonej zmiennej skryptowej;
domyślnie jest to typ określony w class,
beanName – nazwa obiektu bean.
Elementy akcji
 Akcja JavaBeans
 Składnia, przykład


<jsp:useBean id="DataBean" class="org.java.DataBean" />
<jsp:useBean id="newBean" class="org.java.DataBean">
<jsp:setProperty name="newBean" property="border" value="0">
</jsp:useBean>
Elementy akcji
 Akcja JavaBeans, akcja <jsp:setProperty>
 Ustawia właściwości Bean-a
 Atrybuty




name – nazwa beana, którego wartość ustawiamy,
property – nazwa właściwosci, którą chcemy
ustawić; jeżeli pominiemy atrybuty value i param,
to zostanie przypisana wartość z parametru
zadania o tej samej nazwie,
param – nazwa parametru zadania, której wartość
chcemy przypisac własciwości,
value – wartość, która zostanie przypisana danej
właściwości; wyklucza sie z param.
Elementy akcji
 Akcja JavaBeans, akcja <jsp:setProperty>
 Przykłady użycia




<jsp:setProperty id="DataBean" property="border" value="30" />
<jsp:setProperty id="DataBean" property="border" param="borderWidth" />
<jsp:setProperty id="DataBean" property="border" />
<jsp:setProperty id="DataBean" property="*" />
Elementy akcji
 Akcja JavaBeans, akcja <jsp:getProperty>
 Pobiera wartosc własciwosci bean’a.
 Atrybuty:


name – nazwa ziarnka, którego wartość
pobieramy; atrybut wymagany,
property – nazwa właściwosci, którą pobieramy;
atrybut wymagany.
Dyrektywy
 Składnia
 Dostępne są dwa rodzaje składni



<%@ nazwa_dyrektywy %>
<jsp:directive.nazwa_dyrektywy />
Zależy od rodzaju dyrektywy
 Omówimy dyrektywy
 page
 include
 taglib
Dyrektywy
 Dyrektywa page
 Określa parametry strony
 Para atrybut/wartosc może wystąpić tylko raz
 Atrybuty



contentType – określa typ zawartości; domyślnie
jest to text/html z kodowaniem ISO-8859-1
errorPage – określamy stronę, która bedzie
wyświetlana przy pojawieniu sie wyjątku
isErrorPage – strona, która ma być wyświetlana
przy pojawianiu się wyjatków musi ten atrybut mieć
ustawiony na true; domyślnie jest on oczywiście
ustawiany na false
Dyrektywy
 Dyrektywa page
 Atrybuty c.d.



import – umożliwia import pakietów, można podać
kilka po przecinku; domyślnie importowane są:
 javax.Servlet.jsp.*, javax.Servlet.http.*,
java.lang.*, javax.Servlet.*
 atrybut import dostępny jest tylko wtedy, gdy
atrybut language jest ustawiony na java
language – określa język używany wewnątrz strony
JSP; obecnie wartoscią domyślną i jedyną jest java
session – określa, czy dana strona powinna
uczestniczyc w sesji HTTP; domyslna wartoscia
jest true
Dyrektywy
 Dyrektywa page
 Przykład

<%@ page language="java"
contentType="text/html;charset=iso-8859-2" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.StringTokenizer" %>
Dyrektywy
 Dyrektywa include
 Dołącza zawartość zewnętrznego pliku
 Wstawienie jest w momencie kompilacji



dołączenie jest statyczne
Atrybut file określa zasób do dołączenia
Przykład

<% include file="naglowek.html" %>
Dyrektywy
 Dyrektywa taglib
 Określa bibliotekę, o które można rozszerzyć
standardowy zestaw znaczników JSP
 Atrybuty:
uri – określa ścieżkę do biblioteki,
 prefix – prefix, poprzez który będzie się można
odwoływać wewnątrz strony.
Przykład



<%@ taglib uri="http://www.java.com/taglib/sample.jar"
prefix="sample" %>
<sample:tagaction>Przykładzik</sample>
Żądanie HTTP
 Wraz żądaniem tworzony jest obiekt klasy
HttpServletRequest o nazwie request
 Metody do obsługi parametrów żądania:
String request.getQueryString()
 BufferedReader request.getReader()
 ServletInputStream request.getInputStream()
 String request.getMethod()
 String request.getParameter(String)
 Enumeration request.getParameterNames()
 String[] request.getParameterValues(String)
 Przykład
 userinfo.html, userinfo.jsp

Żądanie HTTP
 Metody do pobrania nagłóków HTTP:
 String request.getHeader(String)
 zwraca czysty nagłówek
 int request.getIntHeader(String)
 j.w., przy czym zwraca int
 Date request.getDateHeader(String)
 j.w., przy czym zwraca Date
 Enumeration request.getHeaderNames()
 zwraca nazwy pól nagłówków żądania
Żądanie HTTP
 Metody do pobrania nagłóków HTTP c.d.:
 Enumeration request.getHeaders(String)
 zwraca wartości dostępne w danym nagłówku
 String request.getLocale()
 pobiera kod preferowanego języka
zdefiniowanego w Accept-Language
 Enumeration request.getLocales()
 pobiera kody wszystkich języków określonych
w Accept-Language wg preferencji
Żądanie HTTP
 Do pobrania ciasteczek mamy
 Cookie[] request.getCookies()
 Do pobrania informacji o serwerze mamy
 String application.getServerInfo()
 Przykład
 headers.jsp
Wysyłanie odpowiedzi
 Aby zmodyfikować odpowiedź należy użyć
metod obiektu HttpServletResponse
dostępnego pod nazwę response
 Do ustawienia kod odpowiedzi mamy metody:




void response.sendError(int sc)
void response.sendError(int sc, String msg)
void response.sendStatus(int sc)
void response.sendStatus(int sc, String msg)
Wysyłanie odpowiedzi
 Przykładowe kody odpowiedzi
Kod stanu
200 OK
204 No Content
301 Moved Permanently
302 Moved Temporarily
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
503 Service Unavailable
Stała w JSP
SC_OK
SC_NO_CONTENT
SC_MOVED_PERMANENTLY
SC_MOVED_TEMPORARILY
SC_UNAUTHORIZED
SC_FORBIDDEN
SC_NOT FOUND
SC_INTERNAL_SERVER_ERROR
SC_SERVICE UNAVAILABLE
Wysyłanie odpowiedzi
 Wstawianie nagłówków do odpowiedzi






void response.addHeader(String name, String value)
void response.setHeader(String name, String value)
void response.addIntHeader(String name, int value)
void response.setIntHeader(String name, int value)
void response.addDateHeader(String name, long date)
void response.setDateHeader(String name, long date)
 Przykładowe nagłówki




Content-Type
Connection
Location
Expires
text/html
keep-alive | close
index2.html
<data>
Wysyłanie odpowiedzi
 Kilka uwag

Do ustawienia nagłówka Content-type jest osobna
funkcja void response.setContenttype(String type)



response.setContentType("text/xml");
Do sprawdzenia, czy dany nagłówek został wysłany jest
metoda boolean response.containsHeader(String name)
Dwa przykłady na przekierowanie strony


response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
response.setHeader("Location","http://localhost:8080/");
void response.sendRedirect("http://localhost:8080/");
Wysyłanie odpowiedzi
 Obsługa ciasteczek
 Ciasteczka sa reprezentowane przez obiekty
typu Cookie.
 Do utworzenia mamy kontruktor


public Cookie(String name, String value)
Do obsługi obiektu klasy Cookie mamy metody:






void Cookie.setMaxAge(int expire)
void Cookie.setDomain(String pattern)
void Cookie.setPath(String uri)
void Cookie.setSecure(boolean flag)
String Cookie.getName()
String Cookie.getValue()
Wysyłanie odpowiedzi
 Obsługa ciasteczek
 Do wysłania ciastka mamy metodę


void response.addCookie(Cookie cookie)
Przykład

licznik.jsp
Sesje
 Kilka uwag wstępnych
 Przekazywanie identyfikatora. Wiele motorów
jest „inteligentna”, tzn. przekazują ID przez
ciacho, a jak się nie powiedzie, to przez URL.
 Śledzenie sesji jest właczane domyślnie i
automatycznie jest tworzony egzemplarz
obiektu HttpSession dostępny pod nazwa
session.
 Jeśli chcemy wyłaczyc śledzenie sesji, musimy
to zrobić jawnie poprzez dyrektywę

<%@ page session="false" %>
Sesje
 Ważniejsze metody obiektu HttpSession
 void session.putValue(String key, Object value)
 wkłada obiekt ewentualnie go nadpisując
 Object session.getValue(String name)
 pobiera obiekt lub zwraca null
 void session.removeValue(String name)
 usuwa obiekt z sesji
 String[] session.getValueName()
 zwraca tablicę kluczy do obiektów sesji
Sesje
 Metody związane z cyklem życia sesji
 int session.getMaxInactiveInterval()
 pobiera czas, po jakim sesja wygaśnie
 void session.setMaxInactiveInterval(int interval)
 ustawienie czasu, po jakim sesja wygaśnie
 long session.getCreationTime()
 moment utworzenia sesji (liczba sekund od
1970-01-01)
 long session.getLastAccessedTime()
 moment ostatniego użycia sesji
 void session.invalidate() - usuwa sesję
Sesje
 Przykład
 odwiedziny.jsp
 confirmLogin.jsp
login.jsp
logout.jsp

Podobne dokumenty