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



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

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

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

Piotr Laskowski Krzysztof Stefański. Java Servlets

Java wybrane technologie spotkanie nr 3. Serwlety

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

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

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

mgr inż. Michał Paluch

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

prepared by: Programowanie WWW Servlety

1 Wprowadzenie do J2EE

Serwlety i JSP na platformie Java EE. Damian Makarow

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

In»ynieria systemów informacyjnych - Adam Krechowicz


Wzorce projektowe warstwy aplikacji

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Aplikacje internetowe oparte na kluczowych technologiach Java Enterprise(Servlet,JSP,JDBC, )

Architektury Usług Internetowych. Laboratorium 1. Servlety

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

Java Database Connectivity

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

Architektury Usług Internetowych. Laboratorium 1 Servlety

TIN Techniki Internetowe Lato 2005

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

Aplikacje internetowe i rozproszone - laboratorium

JavaServer Pages. Konrad Kurdej Karol Strzelecki

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Wzorce prezentacji internetowych

Ajax a bezpieczeństwo aplikacji webowych. Jakub Wierzgała

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

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

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

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

Krakowska Akademia im. Andrzeja Frycza Modrzewskiego. Karta przedmiotu. obowiązuje studentów, którzy rozpoczęli studia w roku akademickim 2013/2014

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Serwery aplikacji. dr Radosław Matusik. radmat

Tworzenie serwisów internetowych

Projektowanie aplikacji J2EE w architekturze Model-View-Controller

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

Java Servlet i JavaServer Pages. Tom 1. Wydanie II

Java EE: Serwlety i filtry serwletów

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

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

API transakcyjne BitMarket.pl

HTTP. literatura:

Testowanie aplikacji Java Servlets

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Aplikacje WWW Wprowadzenie

Wybrane działy Informatyki Stosowanej

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Programowanie komponentowe 5

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

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

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Analiza porównawcza technologii tworzenia aplikacji internetowych dla baz danych Oracle

Programowanie w języku Java

Aplikacje WWW - laboratorium

Zaawansowane Aplikacje Internetowe

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Java wybrane technologie

Programowanie w języku Java

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

Kompozycja i dziedziczenie klas

prepared by: Programowanie WWW Model-View-Controller

Specyfikacja techniczna. mprofi Interfejs API

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

SSK - Techniki Internetowe

Rozliczenia z NFZ. Ogólne założenia. Spis treści

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

Programowanie obiektowe

XML-RPC: Zdalne wykonywanie procedur

SOAP. Autor: Piotr Sobczak

J2EE wzorce projektowe. Alicja Truszkowska

Aplikacje WWW - laboratorium

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Aby ułatwić współdzielenie oferty noclegowej w różnych obiektach oraz agregatorach ofert i zestandaryzować ten proces

Wywoływanie metod zdalnych

Programowanie aplikacji w architekturze Klient-Serwer - TCP

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

I.Wojnicki, Tech.Inter.

Programowanie w internecie nazwa przedmiotu SYLABUS A. Informacje ogólne

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

Charakterystyka systemów plików

WYKŁAD 1 SYSTEMY CMS CZĘŚĆ 1

Warszawa, r.

Technologie internetowe

Zaawansowane aplikacje internetowe laboratorium

Aplikacje WWW - laboratorium

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Smarty PHP. Leksykon kieszonkowy

Programowanie w Internecie

Przekazywanie danych. Dane zewnętrzne mogą pochodzić z róŝnych źródeł:

2 Przykªad strony JSP. 3 Elementy dokumentu JSP

Kurs WWW 1. Paweł Rajba

Transkrypt:

Wykład prowadzi Mikołaj Morzy CGI i serwlety Plan wykładu Metody konstrukcji logiki prezentacji Programy CGI Serwlety Java implementacja korzystanie z nagłówków obsługa zmiennych Cookies obsługa sesji Session CGI i serwlety (2) Implementacja logiki prezentacji Przykład: serwlety vs. szablony Zadania logiki prezentacji Technologie serwletów programy CGI serwlety Java Technologie szablonów JavaServer Pages PHP ASP.NET import javax.servlet.http.*; import java.io.*; Serwlet public class MyServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException { String imie = request.getparameter("imie"); response.setcontenttype("text/html"); <% String imie = Szablon PrintWriter out = response.getwriter(); request.getparameter("imie"); %> out.println("<html><body>"); <HTML> out.println("<h2>witaj "+imie+"</h2>"); out.println("</body></html>"); }} <BODY> <H2>Witaj <%=imie%></h2> </BODY> </HML> CGI i serwlety (3) CGI i serwlety (4)

Architektura CGI Cechy programów CGI Przeglądarka klient serwer program CGI logika biznesowa Dowolny język programowania Proces uruchamiany przez serwer w odpowiedzi na żądanie klienta Parametry wejściowe zmienne środowiskowe wejście standardowe Dokument wynikowy wyjście standardowe Wydajność, bezpieczeństwo CGI i serwlety (5) CGI i serwlety (6) Wybrane zmienne środowiskowe CGI Zmienne środowiskowe CGI - przykład SERVER_SOFTWARE SERVER_NAME REQUEST_METHOD QUERY_STRING REMOTE_HOST REMOTE_ADDR _USER_AGENT CGI i serwlety (7) show-cgi.bat @echo off echo Content-Type: text/html echo. echo SERVER_SOFTWARE: %SERVER_SOFTWARE% ^<BR^> echo SERVER_NAME: %SERVER_NAME% ^<BR^> echo REQUEST_METHOD: %REQUEST_METHOD% ^<BR^> echo QUERY_STRING: %QUERY_STRING% ^<BR^> echo REMOTE_HOST: %REMOTE_HOST% ^<BR^> echo REMOTE_ADDR: %REMOTE_ADDR% ^<BR^> echo _USER_AGENT: %_USER_AGENT% ^<BR^> CGI i serwlety (8)

Typy programów CGI Przykładowy program CGI () Bez nagłówka nazwa pliku nie rozpoczyna się od "nph-" Content-type Location Status Z nagłówkiem nazwa pliku rozpoczyna się od "nph-" wszystkie pola nagłówka odpowiedzi test-cgi.bat @echo off echo Content-type: text/html echo. echo ^<HTML^>^<BODY^> echo ^<H2^> echo Witaj echo %QUERY_STRING%! echo Oto lista moich plików: echo ^<PRE^> dir /b c:\pliki... /. 200 OK Date: Sat, 24 Jun 2006... Server: Apache/.0.0 Content-Type: text/html Content-Length: 52 <HTML><BODY> <H2>Witaj Maciej! Oto lista moich plików: <PRE> demo.exe foto.jpg... CGI i serwlety (9) CGI i serwlety (0) Przykładowy program CGI (2) Parametry żądania nph-test-cgi.bat @echo off echo /.0 200 OK echo Content-type: text/html echo Expires: Thu, 25 Jun 2006 6:00:00 GMT echo. echo ^<HTML^>^<BODY^> echo ^<H2^> echo Witaj %QUERY_STRING%!... /.0 200 OK Content-type: text/html Expires: Thu, 25 Jun 2006 6:00:00 GMT Content-Length: 52 <HTML><BODY> <H2> Witaj Marek!... CGI i serwlety () Rozkaz GET zmienna QUERY_STRING Rozkaz POST standardowe wejście Konieczność programowego wyodrębniania parametrów z łańcucha znakowego wylot=pozna%f&przylot=new+york&godzina=%3a00 wylot="poznań", przylot="new York", godzina=":00" CGI i serwlety (2)

Architektura serwletów Java Struktura serwletu Java Przeglądarka serwer serwer aplikacji Java EE serwlet Java logika biznesowa Klasa dziedzicząca z HttpServlet Implementacja co najmniej jednej z metod: doget() dopost() init() destroy() klient CGI i serwlety (3) CGI i serwlety (4) Przykładowy serwlet Java Cykl życia serwletu Java import javax.servlet.http.*; import java.io.*; public class MyServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException { 2 String imie = request.getparameter("imie"); 3 response.setcontenttype("text/html"); 4 PrintWriter out = response.getwriter(); out.println("<html><body>"); 5 out.println("<h2>witaj "+imie+"</h2>"); out.println("</body></html>"); }} Przeglądarka klient serwer aplikacji Java EE 4 doget() init() 2 destroy() 3 MyServlet doget() init() destroy() n CGI i serwlety (5) CGI i serwlety (6)

Interfejs HttpServletRequest HttpServletRequest a zmienne CGI Cookie[] getcookies() String getheader(n) String getmethod() String getremoteuser() HttpSession getsession() String getparameter(n) String getremoteaddr() żądanie SERVER_NAME REQUEST_METHOD QUERY_STRING REMOTE_HOST REMOTE_ADDR REMOTE_USER String getservername() String getmethod() String getquerystring() String getremotehost() String getremoteaddr() String getremoteuser() request CGI i serwlety (7) CGI i serwlety (8) HttpServletRequest - przykład Odczyt parametrów żądania response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html><body>"); out.println("server_name="+request.getservername()+"<br>"); out.println("request_method="+request.getmethod()+"<br>"); out.println("query_string="+request.getquerystring()+"<br>"); out.println("remote_host="+request.getremotehost()+"<br>"); out.println("remote_addr="+request.getremoteaddr()); out.println("</body></html>"); CGI i serwlety (9) request.getparameter() request.getparameternames() request.getparametervalues() float x = Float.parseFloat(request.getParameter("x")); float y = Float.parseFloat(request.getParameter("y")); float result = x * y; response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html><body>"); out.println(x + " x " + y + " = " + result); out.println("</body></html>"); CGI i serwlety (20)

Serwlety Java - metoda dopost() Interfejs HttpServletResponse Metoda doget() odpowiada na żądania typu GET Metoda dopost() odpowiada na żądania typu POST Jednakowy dostęp do parametrów żądania Identyczne lub różne implementacja public class MyServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException {...} public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException {...}} void addcookie(c) void addheader(n,v) void senderror(v) void sendredirect(url) void setheader(n,v) PrintWriter getwriter() ServletOutputStream getoutputstream() void flushbuffer() response odpowiedź CGI i serwlety (2) CGI i serwlety (22) Metoda senderror() - kody zwrotne Metoda senderror() - przykład SC_BAD_REQUEST SC_UNAUTHORIZED SC_FORBIDDEN SC_NOT_FOUND SC_GONE (400) Niewłaściwy format żądania (40) Wymagana autoryzacja klienta (403) Odmowa dostępu (404) Dokument nie znaleziony (40) Dokument zmienił adres, a nowa lokalizacja nie jest znana SC_SERVICE_UNAVAILABLE (503) System jest chwilowo przeciążony lub niedostępny SC_NOT_MODIFIED (304) Dokument nie uległ modyfikacji od poprzedniego dostępu if (!request.getremoteaddr().equals("92.68.0.3")) response.senderror(httpservletresponse.sc_forbidden); else out.println("<h>welcome!</h>"); CGI i serwlety (23) CGI i serwlety (24)

Obsługa zmiennych Cookies Klasa Cookie Zmienne Cookies reprezentowane w postaci obiektów klasy Cookie Wysyłanie zmiennych Cookies: response.addcookie() Odczyt zmiennych Cookies: request.getcookies() CGI i serwlety (25) Cookie(n,s) String getdomain() void setdomain(s) String getmaxage() void setmaxage(v) String getname() void setname(s) String getpath() void setpath(s) String getvalue() void setvalue(s) Tworzy zmienną o nazwie n i wartości s Odczytuje/ustawia adres domenowy, dla którego przeznaczona jest zmienna Odczytuje/ustawia czas życia zmiennej, liczony w sekundach (- -> ulotne) Odczytuje/ustawia nazwę zmiennej Odczytuje/ustawia prefiks ścieżki URL na serwerze, dla której przeznaczona jest zmienna Odczytuje/ustawia wartość zmiennej CGI i serwlety (26) Wysyłanie zmiennych Cookies Odczytywanie zmiennych Cookies 2 3 4 5 Cookie mycookie = new Cookie("Imie","Maciej"); Cookie mycookie2 = new Cookie("Miasto","Poznań"); mycookie.setmaxage(24*60*60); response.addcookie(mycookie); response.addcookie(mycookie2); 2 out.println("<h>odebrane Cookies</h>"); Cookie[] allcookies = request.getcookies(); for (int i=0; i<allcookies.length; i++) out.println(allcookies[i].getname()+": "+ 3 allcookies[i].getvalue()+"<br>"); /.0 200 OK Set-Cookie: Imie=Maciej; Expires=Mon, 03-Jul-2006 7:48:36 GMT Set-Cookie: Miasto=Poznań... nagłówek odpowiedzi GET /MyServlets/MyServlet2 /.0 Cookie: Imie=Maciej; Miasto=Poznań... nagłówek żądania CGI i serwlety (27) CGI i serwlety (28)

Sesje Session Architektura Session Problem: protokół 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 ID=324 klient żądanie serwer aplikacji serwlet Java ID=567 klient Session tablica sesjii ID CZAS_DOSTĘPU STAN... 324 20:45 x: y: 567 20:20 x: CGI i serwlety (29) CGI i serwlety (30) Interfejs Session Wykorzystywanie Session Object getattribute(n) void setattribute(n,o) long getcreationtime() String getid() long getlastaccessedtime() void invalidate() Zapamiętuje na czas sesji obiekt pod podaną nazwą / odczytuje obiekt o podanej etykiecie Odczytuje czas rozpoczęcia sesji, liczony w ms od.0.970 Odczytuje jednoznaczny identyfikator sesji Odczytuje czas ostatniej operacji wykonanej w ramach sesji (.0.970) Zamyka sesję i usuwa wszystkie jej obiekty 2 3 4 5 Pracownik p = new Pracownik(); p.imie = "Maciej"; p.miasto = "Poznań"; HttpSession mysess = request.getsession(true); mysess.setattribute("prac", p); HttpSession mysess = request.getsession(false); Pracownik e = (Pracownik) mysess.getattribute("prac"); out.println(e.imie + " " + e.miasto); CGI i serwlety (3) CGI i serwlety (32)

Session czy Cookies? Podsumowanie Oba mechanizmy pozwalają przechowywać stan sesji Cookies wymaga przesyłania obiektów stanu w nagłówkach Session obsługuje dowolne typy obiektów stanu Bezpieczeństwo Dwa podejścia do konstrukcji logiki prezentacji Przykładowe technologie serwletów Zagadnienia implementacji serwletów Java Serwlety Java wymagają specjalizowanego serwera aplikacji CGI i serwlety (33) CGI i serwlety (34) Materiały dodatkowe "The Common Gateway Interface", http://hoohoo.ncsa.uiuc.edu/cgi/ "FastCGI Home", http://www.fastcgi.com "Java EE At a Glance", http://java.sun.com/javaee "Java EE 5 SDK", http://java.sun.com/javaee/5/docs/api/ CGI i serwlety (35)