Piotr Laskowski Krzysztof Stefański. Java Servlets

Podobne dokumenty
Java wybrane technologie spotkanie nr 3. Serwlety

prepared by: Programowanie WWW Servlety

Serwlety. Co to jest serwlet? Przykładowy kod serwletu. Po co są serwlety?

Architektury Usług Internetowych. Laboratorium 1 Servlety

Architektury Usług Internetowych. Laboratorium 1. Servlety

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

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

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 09

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

Serwery aplikacji. dr Radosław Matusik. radmat


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

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

In»ynieria systemów informacyjnych - Adam Krechowicz

Programowanie w języku Java

Serwlety Java: zagadnienia zaawansowane. Data Sources. Data Sources. Przykład pliku data-sources.xml

Aplikacje internetowe i rozproszone - laboratorium

1 Wprowadzenie do J2EE

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Wzorce prezentacji internetowych

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Java EE: Serwlety i filtry serwletów

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

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

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

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

Java Database Connectivity

prepared by: Programowanie WWW Model-View-Controller

Wprowadzenie do JSP. Marcin Apostoluk, Tadeusz Pawlus, Wojciech Walczak. Technologie Biznesu Elektronicznego, 7 marzec 2006

Serwlety i JSP na platformie Java EE. Damian Makarow

JavaServer Pages. Konrad Kurdej Karol Strzelecki

Przegląd technologii JSP

Testowanie aplikacji Java Servlets

TIN Techniki Internetowe Lato 2005

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

Wprowadzenie do J2EE. Maciej Zakrzewicz.

b) Jako nazwę projektu wpisz SerwletyJSPJSTL. Nie zmieniaj wartości pozostałych opcji. Kliknij przycisk Next >.

JAX-RS czyli REST w Javie. Adam Kędziora

Tworzenie usług internetowych. Servlety cz. 1

Zaawansowane aplikacje internetowe laboratorium

Aplikacje WWW - laboratorium

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Komunikacja między serwletami

Wywoływanie metod zdalnych

Java wybrane technologie spotkanie nr 5. Java Server Pages

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Kurs WWW 1. Paweł Rajba

mgr inż. Michał Paluch

Gatesms.eu Mobilne Rozwiązania dla biznesu

Wywoływanie metod zdalnych

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Podejście obiektowe do budowy systemów rozproszonych

Podstawowe wykorzystanie Hibernate

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

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

SOAP. Autor: Piotr Sobczak

CGI, serwlety Java i szablony JSP. Przykład: serwlety vs. szablony. Implementacja logiki prezentacji

J2EE wzorce projektowe. Alicja Truszkowska

Aplikacje WWW - laboratorium

Tworzenie i wykorzystanie usług

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Metody dostępu do danych

Remote Method Invocation 17 listopada 2010

Aplikacje WWW - laboratorium

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

Java Server Faces - wprowadzenie

Java jako j zyk programowania serwerów WWW / aplikacji Webowych servlety

Projektowanie aplikacji J2EE w architekturze Model-View-Controller

Wybrane działy Informatyki Stosowanej

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

Podejście obiektowe do budowy systemów rozproszonych

Serwery aplikacji. dr Radosław Matusik. radmat

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

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

1) Przygotowanie środowiska pracy.

Aplikacje Internetowe, Servlety, JSP i JDBC

Podręcznik Integracji

Aplikacje WWW. Wykład 5. Logika prezentacji - część I. wykład prowadzi: Maciej Zakrzewicz. Logika prezentacji I

Java Enterprise Edition spotkanie nr 3. Serwlety c.d.

1. Uruchomić i skonfigurować środowisko tworzenia aplikacji i serwer aplikacji.

Aplikacje RMI

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

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

Programowanie komponentowe 5

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

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

Architektura Model-View-Controller

Aplikacje WWW - laboratorium

Java wybrane technologie

Aplikacje WWW - laboratorium

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

JAVA : APLIKACJE WEBOWE I JAVA EE WPROWADZENIE

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Transkrypt:

Piotr Laskowski Krzysztof Stefański Java Servlets

Java Servlets Technologia dynamicznego generowania treści dla aplikacji WWW Wyspecyfikowana przez Sun, obecnie przez Java Community Process Pierwsza formalna specyfikacja 2.1: 1998 r. Aktualna wersja 2.5 (w planach 3.0)

Model Request-Response Serwer HTTP Przeglądarka WWW 1. Żądanie 2. Odpowiedź

Kontener servletów Serwer HTTP Przeglądarka WWW 1. Żądanie (GET, POST) Kontener Servletów Servlet 2. Odpowiedź Kontener odbiera żądanie i zleca jego obsługę wybranemu servletowi

Ontologia servletu Pakiet javax.servlet i javax.servlet.http Klasa GenericServlet, HTTPServlet public abstract class HTTPServlet extends GenericServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getwriter();... out.println( Witaj gościu na mojej stronie! ); } } public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException;... Interfejsy HttpServletRequest, HttpServletResponse

Cykl życia servletu Realizowany przez zestaw metod GenericServlet init() service(request, Response) destroy() Zwykle jedna instancja, wymagana synchronizacja Interfejs SingleThreadServlet (Deprecated)

Pobieranie danych z żądania Metody HTTPServletRequest: getparameter(string name) getparametermap, getparametervalues itp. Jednolity interfejs dla danych GET i POST Bezpośrednio odczytując treść żądania (metoda getinputstream) Przydatne przy wgrywaniu plików

Obsługa nagłówków żądania Wygodne API udostępnione przez obiekt żądania getheader(string name) Skróty dla najpopularniejszych: np. getmethod(), getrequesturi() Możliwa również drobiazgowa obsługa (getheadernames, getheaders) Przykładowo: obsługa Accept-Language Można też ręcznie

Nagłówki odpowiedzi Obsługiwane przez API obiektu HTTPServletResponse setstatus(int statuscode); stałe SC_* Skróty: senderror, sendredirect(string url) setheader(string name, String value) Skróty: setcontenttype(string value)

Wdrażanie aplikacji - web.xml <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>name_of_context_initialization_parameter</param-name> <param-value>value_of_context_initializtion_parameter</param-value> </context-param> <servlet> <servlet-name>welcomeservlet</servlet-name> <servlet-class>com.foo-bar.somepackage.theservlet</servlet-class> <init-param> <param-name>foo</param-name> <param-value>bar</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>welcomeservlet</servlet-name> <url-pattern>/welcome</url-pattern> <!-- relatywne wzgledem URI wdrż. --> </servlet-mapping> </web-app>

Utrzymywanie sesji Dane sesji przechowywane są po stronie serwera Identyfikatory sesji przechowywane są w ciasteczkach po stronie klienta Gdy klient ma wyłączoną obsługę ciasteczek, identyfikator sesji przekazujemy za pomocą mechanizmu GET. Czas, po jakim sesja wygasa definiuje się w pliku web.xml

Dostęp do sesji Sesja jest reprezentowana przez obiekt klasy HttpSession Obiekt otrzymujemy wywołując metodę getsession() na obiekcie request Atrybuty zapisujemy metodą setattribute(string, Object), i pobieramy metodą getattribute(string) invalidate jawne zniszczenie sesji

Sesja - przykład public class Shopping extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { response.setcontenttype( text/html ); PrintWriter out = response.getwriter(); HttpSession session = request.getsession(); } } Cart cart; synchronized(session) { cart = (Cart) session.getattribute( cart ); if (cart == null) { cart = new Cart(); session.setattribute( cart, cart); } } out.println( Masz + cart.getamount() + rzeczy w koszyku. ); out.println( <p><a href=\ + response.encodeurl(request.getcontextpath() + "/payment") + \ >Kup</a></p> );

Sesja funkcjonalności Z obiektu sesji można otrzymać różne informacje, które jej dotyczą np. getattributenames(), getlastaccessedtime(),... Więcej: http://java.sun.com/webservices/docs/1.6/api/ja vax/servlet/http/httpsession.html

Cookies Oprócz identyfikatora sesji, możemy po stronie klienta trzymać inne informacje (tekstowe) Do ciasteczek dostęp mamy poprzez klasę Cookie HttpServletRequest.getCookies() zwraca tablicę obiektów klasy cookie HttpServletResponse.addCookie(Cookie) dodaje ciasteczko

Cookies - przykład public class Shopping extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); Cookie[] cookies = request.getcookies(); Integer amount = null; for (Cookie c : cookies) { if (c.getname().equals( amount )) amount = Integer.parseInt(c.getValue()); } if (amount == null) { amount = 0; Cookie c = new Cookie( amount, amount.tostring()); response.addcookie(c); } } } out.println( Masz + amount.tostring() + rzeczy w koszyku. );

ServletContext Czasem chcemy przechowywać dane nie związane z konkretną sesją, lecz wspólne Można w tym celu wykorzystać obiekt klasy ServletContext, który jest związany z daną aplikacją Dostęp do niego jest zapewniony poprzez metodę getservletcontext() klasy GenericServlet Trzeba pamiętać o synchronizacji!

ServletContext - przykład public class Counter extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); } } ServletContext context = this.getservletcontext(); Counter counter = (Counter)context.getAttribute("hitCounter"); out.println( Jesteś + counter.getandinc() + osobą na tej stronie );

Przekierowanie Jeśli chcemy przekierować zapytanie na zupełnie inną stronę, można użyć metody ServletResponse.sendRedirect(String URL), która wyśle do przeglądarki prośbę o przekierowanie Jeśli robimy przekierowanie wewnątrz własnego serwisu, zwykle lepiej jest użyć klasy RequestDispatcher, która przekazuje prośbę wygenerowania strony dalej

RequestDispatcher - przykład String page = request.getparameter( page ); RequestDispatcher dispatcher; if (page.equals( home )) dispatcher = this.getservletcontext().getrequestdispatcher("/home"); else dispatcher = this.getservletcontext().getrequestdispatcher("/underconstruction"); if (dispatcher!= null) { dispatcher.forward(request, response); }...

Przekazywanie informacji Czasem robiąc przekierowanie do innej strony za pomocą forward() chcielibyśmy przekazać jej jakieś dodatkowe parametry W obiekcie ServletRequest możemy przechowywać obiekty-atrybuty w taki sam sposób, jak w sesji bądź w kontekście aplikacji.

Filtry Jeśli chcemy doczepić coś do strony generowanej przez servlet (lub w jakiś inny sposób ją zmodyfikować), możemy użyć do tego mechanizmu filtrów Możemy również chcieć oszukać servlet, podmieniając mu dane żądania

Filtry Dla danego servletu możemy w pliku web.xml zdefiniować łańcuch filtrów, które będą po kolei uruchamiane. Ostatni w łańcuchu jest servlet. Czynności wykonywane przez filtr: Otrzymuje obiekt response i request i wstępnie je przetwarza (lub podmienia) Wywołuje metodę dofilter(request, response), uruchamiając swojego następnika w łańcuchu Robi końcowe przetwarzanie (np. dodaje baner reklamowy)

Część praktyczna http://students.mimuw.edu.pl/~ks250429/servlety.tar.gz http://students.mimuw.edu.pl/~ks250429/tomcat.tar.gz Uruchomienie kontenera Apache Tomcat. Uruchomienie servletu wypisującego datę i godzinę. Dodanie informacji o adresie IP klienta (HttpServletRequest.getRemoteAddr()). Uruchomienie servletu przygotowującego listę produktów. Dodanie obsługi sytuacji, kiedy klient ma wyłączoną obsługę ciasteczek.

Pytania Czy są jakieś pytania?

Bibliografia http://java.sun.com/javaee/5/docs/tutorial/doc/ http://java.sun.com/javaee/5/docs/api/

Koniec Dziękujemy za uwagę