prepared by: Java Server Pages Sesje, cookies, znaczniki

Podobne dokumenty
Aplikacje Internetowe

Java wybrane technologie

prepared by: Programowanie WWW Servlety

prepared by: Programowanie WWW Model-View-Controller

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

Aplikacje WWW - laboratorium

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

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

Aplikacje WWW - laboratorium

Programowanie w Internecie. Podstawy użycia JSP. Paweł Kasprowski. vl06z

Serwery aplikacji. dr Radosław Matusik. radmat

Serwlety i JSP na platformie Java EE. Damian Makarow


Podstawowe wykorzystanie Hibernate

Aplikacje Internetowe. przygotował:

Aplikacje Internetowe. Zakres przedmiotu. Plan ramowy. Tworzenie aplikacji internetowych w języku Java w środowisku Eclipse

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Tworzenie aplikacji internetowych w języku Java

Przegląd technologii JSP

Kurs WWW 1. Paweł Rajba

Aplikacje WWW. Logika biznesowa. wykład prowadzi Mikołaj Morzy. Logika biznesowa

Aplikacje Internetowe, Servlety, JSP i JDBC

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

2 Przykªad strony JSP. 3 Elementy dokumentu JSP

Aplikacje WWW - laboratorium

Programowanie wielowarstwowe i komponentowe JSP, JSF

1 Wprowadzenie do J2EE

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

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

Facelets ViewHandler

JavaServer Pages. Konrad Kurdej Karol Strzelecki

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

Wybrane działy Informatyki Stosowanej

Wzorce logiki dziedziny

mgr inż. Michał Paluch

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Aplikacje internetowe - laboratorium

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Zaawansowane aplikacje internetowe laboratorium REST

Zasady programowania Dokumentacja

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

Wstęp. Ale po co? Implementacja

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

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

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Języki skryptowe - PHP. Podstawy PHP. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Java Enterprise Edition spotkanie nr 4. Java Server Pages c.d.

Java wybrane technologie spotkanie nr 5. Java Server Pages

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Ilość cyfr liczby naturalnej

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

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

Wzorce prezentacji internetowych

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

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Programowanie internetowe

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

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

XML extensible Markup Language. część 5

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Kurs JavaScript TI 312[01]

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

Enterprise JavaBeans

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Stripes & Stripernate. Zbigniew Skowron 13 kwietnia 2007

Oracle Reports budowa raportów internetowych!"##$%%& '( ) *

Programowanie w Javie

Poznań Java User Group Java Server Faces. Wprowadzenie (Fakty i Mity)

MVC w praktyce tworzymy system artykułów. cz. 2

Laboratorium 1 Wprowadzenie do PHP

Serwery aplikacji. dr Radosław Matusik. radmat

Java Server Faces - wprowadzenie

Infrastruktura aplikacji WWW

Obiektowe bazy danych

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Dworakowski. Wojciech. Zagrożenia i metody ataku. Aplikacje internetowe -

Internetowe bazy danych

Zaawansowane aplikacje internetowe

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Java Server Faces narzędzie do implementacji w wy prezentacji

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Funkcje i instrukcje języka JavaScript

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

Aktywne i dynamiczne strony WWW. Elementy projektowania stron WWW. Część 3. Formularze HTML przykład. Formularze HTML. dr inŝ.

Kurs rozszerzony języka Python

Dokumentacja Skryptu Mapy ver.1.1

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

Wprowadzenie do Internetu Zajęcia 5

JavaServer Faces (JSF)

Transkrypt:

Java Server Pages Sesje, cookies, znaczniki

Sesje Problem: http jest bezstanowe Za każdym razem klient nawiązuje połączenie na nowo Zwykle konieczne jest zapamiętywanie co klient robił wcześniej Rozwiązanie: Klient dostaje id sesji Z każdym połączeniem wysyła swoje id Serwer zachowuje dane klienta z numerem sesji

Session Zapamiętuje informacje o użytkowniku <% session.setattribute("login", "Paweł"); %> <% String login = (String)session.getAttribute("login"); %>

Obiekt Session Metody: getid() getcreationtime() getmaxinactiveinterval() setmaxinactiveinterval(interval) isnew() invalidate()

Cookies Podobne do sesji ale cała informacja zapisana jest na komputerze klienta Zwykle trwałość większa niż sesji Mechanizm sesji może używać cookie do Mechanizm sesji może używać cookie do zapamiętania id

Obiekt Cookie Cookie[] cookies = request.getcookies() Cookie cookie = cookies[0]; Metody: getname() getvalue() getmaxage() getcomment()

Problemy ze skrypletami Mieszanie kodu HTML, Java i JavaScript powoduje nieczytelność Logika jest rozdzielona na różne strony Debugowanie jest trudne W rozbudowanych aplikacjach: HTML developers interfejs użytkownika Java developers logika aplikacji

Przykład strony JSP <body> <h1>edycja odczynnika <%=request.getparameter("cas")%></h1> <input type=button value='< powrót do karty' onclick='document.location="view.jsp?cas=<%=request.getparameter("cas")%>"'> <font size=11> <% cas.casedit casedit=new cas.casedit(request.getparameter("cas")); if(request.getparameter("delete")!=null) { casedit.delete(request.getparameter("oid")); %><SCRIPT language='javascript'> document.location='edit.jsp?cas=<%=request.getparameter("cas")%>&x=x';</script><% } if(request.getparameter("update")!=null && request.getparameter("sbm")!=null) { casedit.update(request.getparameter("oid"),request.getparameter("type"), request.getparameter("newdata"),request.getparameter("newdata2"),session); out.println(casedit.gettable("",request.getparameter("newtype"),session)); } else { if(request.getparameter("anuluj")!=null) out.println(casedit.gettable("",request.getparameter("newtype"),session)); else out.println(casedit.gettable(request.getparameter("oid"),request.getparameter("newtype"), session)); } %> </body>

Użycie tagów Cel: uniknięcie kodu w Javie na stronie HTML Otwieranie i zamykanie tagu <some.tag> </some.tag> Tag pojedynczy <some.tag/> Tagi mogą być: predefinowane w specyfikacji JSP: <jsp:...> ładowane z bibliotek

Tagi predefinowane <jsp:include page="page.jsp"/> <jsp:forward page="page.jsp"/> <jsp:param name="..." value="..."/> <jsp:usebean> <jsp:setproperty> <jsp:getproperty>

Biblioteki tagów Przykładowe biblioteki http://java.sun.com/products/jsp/jstl/ http://jakarta.apache.org/taglibs/ http://jsptags.com/tags/ Włączanie biblioteki do aplikacji WEB-INF/lib/xyz.jar WEB-INF/*.tld Załadowanie definicji (*.tld) na stronie JSP: <% @taglib uri="<address>" prefix="xyz" %> Użycie tagu: <xyz:newtag>...</xyz:newtag>

JSTL Java Standard Tag Library Biblioteka Sun'a Różne implementacje najpopularniejsza: jakarta-taglibs Usprawnienia na stronach JSP bez użycia skrypletów (kodu w Javie) Ładowanie JSTL (jakarta): wgrać pliki standard.jar i jstl.jar do katalogu WEB-INF/lib

Elementy JSTL core <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> variables, loops fmt <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> formatting dates, numbers and money sql <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> handling databases: connections, queries XML <%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%> operations on XML documents functions <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> different converting functions

Expression Language ${expression} Uproszczony dostęp do: standardowych obiektów i właściwości beanów obiektów typu Map, List czy Array Włączone do JSP 2.0

Core JSTL c:set c:out c:if c:foreach c:choose, c:when

c:set i c:out ustawianie i czytanie <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <body> <c:set var="name" value="pawel"/>... My name is <c:out value="${name}"/> </body> </html>

c:if tag <c:if test="${some test}"> jakiś kod </c:if> <c:if test="${x>5}"> x is greater than 5! </c:if>

Zakresy widoczności obiektów page tylko na stronie request dla następnej strony przetwarzającej parametry z aktualnej session dla wszystkich stron w ramach sesji application dla całej aplikacji

Zakres (scope) zmiennych Domyślnie: request (inne: session, application, page) <c:if test="${empty sessionscope.x}"> <c:set var="x" value="1" scope="session"/> </c:if> <p>current value: <c:out value="${x}" /></p> <c:set var="x" value="${x + 1}" scope="session"/>

c:choose tag <p> <c:choose> <c:when test="${x> 0 and x<= 5}"> "x" value in range (0, 5> </c:when> <c:when test="${x> 5 and x <= 10}"> "x" value in range (5, 10> </c:when> <c:otherwise> "x" value over 10 or below 0! </c:otherwise> </c:choose> </p>

c:foreach tag Kod z użyciem JSTL: <ul> <c:foreach var="i" begin="1" end="10"> <li><c:out value="${i}"/> </c:foreach> </ul> To samo jako scriplet: <ul> <% for(int i=1; i<=10; i++) { out.println("<li>"+i); } %> </ul>

Inne przykłady c:foreach <c:foreach var="i" begin="0" end="1000" step="100"> <c:foreach var="word" items="${words}"> <c:foreach var="country" items="australia,canada,japan,philippines,usa"> <c:fortokens var="color" items="(red (orange) yellow)(green)((blue) violet)" delims="()">

Moduł Functions <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <c:set var="str" value="here we have a simple text"/> <p>text: ${str} <p>to upper case: ${fn:touppercase(str)} <p>text length: ${fn:length(str)}</p> <p>does it contain "have" word?: ${fn:contains(str,"have")}</p> <p>number of words (space separated): ${fn:length(fn:split(str," "))}</p> <p>letter "s" in at position: ${fn:indexof(str, "s")}</p> <p>replace "s" with "%": ${fn:replace(str, "s", "#")}</p>

Funkcje formatujące <fmt:formatnumber> <fmt:parsenumber> <fmt:formatdate> <fmt:parsedate> <fmt:setlocale> <fmt:bundle>, <fmt:setbundle> <fmt:message> <fmt:param>

Funkcje modułu sql <sql:setdatasource driver="com.mysql.jdbc.driver" url="jdbc:mysql://localhost:3306/mydb" user="" password=""/> <sql:query var="results" sql="select * FROM car"/> <c:foreach var="row" items="${results.rows}"> <c:out value="${row.make}"/> <c:out value="${row.model}"/> <br/> </c:foreach>

Uniwersalny showrs <table border="1"> <tr> <%-- Get the column names for the header of the table --%> <c:foreach var="columnname" items="${results.columnnames}"> <th><c:out value="${columnname}"/></th> </c:foreach> <%-- Get the value of each column while iterating over rows --%> <c:foreach var="row" items="${results.rows}"> <tr> <c:foreach var="column" items="${row}"> <td><c:out value="${column}"/></td> </c:foreach> </c:foreach> </table>

JavaBeans Tag na stronie <jsp:usebean id="credit" class="bank.kredyt"/> Jeśli obiekt dostępny używa go Jeśli obiektu nie ma tworzy go Uzycie pól beana <jsp:getproperty name="credit" property="rata"/> Ustawianie nowych wartości <jsp:setproperty name="credit" property="kwota" value="1000"/>

Kredyt jako bean Pola z właściwościami Metody do pobierania i zapisywania (gettery i settery) Pusty konstruktor

Klasa Kredyt public class Kredyt { double procent; double kwota; double lat; public double getprocent() { return procent; }... public void setprocent(double procent) { this.procent = procent; }

Klasa Kredyt cd public double getkwota() { return kwota;} public void setkwota(double kwota) { this.kwota = kwota; } public double getlat() { return lat; } public void setlat(double lat) { this.lat = lat; } public double getrata() { double rata = kwota * (procent/12)/ (1-(1/Math.pow(1.0+procent/12,lat*12))); return rata; } //nie ma setrata()!!! }

Formatka <form action="result.jsp"> kwota: <input type="text" name="kwota"><br/> ile lat: <input type="text" name="lat"><br/> procent: <input type="text" name="procent"><br/> <input type="submit"/> </form>

Skryplet z konstruktorem <% pl.edu.swsim.kredyt kredyt = new pl.edu.swsim.kredyt( Double.parseDouble(request.getParameter("kwota")), Double.parseDouble(request.getParameter("lat")) Double.parseDouble(request.getParameter("procent")) ); out.write("<p>rata wynosi: "+kredyt.getrata()+"</p>"); %>

Skryplet z setterami <% pl.edu.swsim.kredyt kredyt = new pl.edu.swsim.kredyt(); kredyt.setkwota(double.parsedouble( request.getparameter("kwota"))); kredyt.setlat(double.parsedouble( request.getparameter("lat"))); kredyt.setprocent(double.parsedouble( request.getparameter("procent"))); out.write("<p>rata wynosi: "+kredyt.getrata()+"</p>"); %>

Użycie beana <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"> <jsp:setproperty name="credit" property="kwota" value=' <%=Double.parseDouble( request.getparameter("kwota"))%>' /> <jsp:setproperty name="credit" property="procent" value=' <%=Double.parseDouble( request.getparameter("procent"))%>' /> <jsp:setproperty name="credit" property="lat" value='<%=double.parsedouble( request.getparameter("lat"))%>'/> </jsp:usebean>

Trochę prościej <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"> <jsp:setproperty name="credit" property="kwota" param="kwota"/> <jsp:setproperty name="credit" property="procent" param="procent"/> <jsp:setproperty name="credit" property="lat" param="lat"/> </jsp:usebean> Rata: <jsp:getproperty name="credit" property="rata"/>

Jeszcze prościej <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"> <jsp:setproperty name="credit" property="*"/> </jsp:usebean> Rata: <jsp:getproperty name="credit" property="rata"/> Może być niebezpieczne! Co jeśli ktoś poda parametr rata a rata będzie miała settera setrata()?

Najprościej <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"/> <jsp:setproperty name="credit" property="*"/> Rata: ${credit.rata}

Tablica kredytów <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"> <jsp:setproperty name="credit" property="*"/> </jsp:usebean> <ul> <c:foreach var="i" begin="1" end="10"> <li> <jsp:setproperty name="credit" property="lat" value="${i}"/> <c:out value="${i}"/> - <jsp:getproperty name="credit" property="rata"/> </c:foreach> </ul>

Tablica kredytów <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"> <jsp:setproperty name="credit" property="*"/> </jsp:usebean> <ul> <c:foreach var="i" begin="1" end="10"> <li> <jsp:setproperty name="credit" property="lat" value="${i}"/> <c:out value="${i}"/> - <jsp:getproperty name="credit" property="rata"/> </c:foreach> </ul>

Tablica kredytów <jsp:usebean id="credit" class="pl.edu.swsim.kredyt"> <jsp:setproperty name="credit" property="*"/> </jsp:usebean> <ul> <c:foreach var="i" begin="1" end="10"> <li> <jsp:setproperty name="credit" property="lat" value="${i}"/> ${i} - ${credit.rata} </c:foreach> </ul>

Podsumowanie W JSP można używać tagów Jest kilka użytecznych bibliotek tagów Główna idea: bez kodu w Javie na stronie JSP! Problem: obsługa wyjątków, kontrola parametrów Krok dalej: sprawdzenie parametrów i przygotowanie danych w klasach Javy wyświetlanie przygotowanych danych za pomocą JSP