Java wybrane technologie spotkanie nr 3. Serwlety



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

Piotr Laskowski Krzysztof Stefański. Java Servlets

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

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

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

Java wybrane technologie spotkanie nr 5. Java Server Pages

prepared by: Programowanie WWW Servlety


Architektury Usług Internetowych. Laboratorium 1. Servlety

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

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

1 Wprowadzenie do J2EE

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

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

JavaServer Pages. Konrad Kurdej Karol Strzelecki

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.

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

TIN Techniki Internetowe Lato 2005

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

mgr inż. Michał Paluch

Architektury Usług Internetowych. Laboratorium 1 Servlety

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

In»ynieria systemów informacyjnych - Adam Krechowicz

Java EE: Serwlety i filtry serwletów

Programowanie w języku Java

prepared by: Programowanie WWW Model-View-Controller

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

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

Kurs WWW 1. Paweł Rajba

Wzorce prezentacji internetowych

Testowanie aplikacji Java Servlets

Komunikacja między serwletami

Wprowadzenie do J2EE. Maciej Zakrzewicz.

SOAP. Autor: Piotr Sobczak

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

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

Java Database Connectivity

Aplikacje internetowe i rozproszone - laboratorium

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

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

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

Serwlety i JSP na platformie Java EE. Damian Makarow

Technologie internetowe

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Java rozszerzenie. dr. A. Dawid

Java Server Faces - wprowadzenie

Języki programowania wysokiego poziomu WWW

Aplikacje WWW Wprowadzenie

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

Aplikacje WWW - laboratorium

Podstawowe wykorzystanie Hibernate

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

Tworzenie usług internetowych. Servlety cz. 1

Przegląd technologii JSP

Aplikacje WWW - laboratorium

PaaS technologie i standardy. Paulina Adamska tiia@pjwstk.edu.pl

J2EE wzorce projektowe. Alicja Truszkowska

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

Head First Servlets & JSP. Edycja polska

Tworzenie i wykorzystanie usług

Wybrane działy Informatyki Stosowanej

Gatesms.eu Mobilne Rozwiązania dla biznesu

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

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

Serwery aplikacji. dr Radosław Matusik. radmat

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

HTTP W 5-CIU PYTANIACH MICHAŁ KOPACZ

Architektura Model-View-Controller

JAVA I SIECI. MATERIAŁY:

Zaawansowane aplikacje internetowe laboratorium

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

1. Protokoły. Co programy wykorzystują do komunikacji przez sieć? wykorzystują protokoły komunikacyjne

Java w Internecie - czy to ma sens? ;)

Programowanie wielowarstwowe i komponentowe JSP, JSF

Aplikacje WWW - laboratorium

Protokół HTTP 1.1 *) Wprowadzenie. Jarek Durak. rfc2616 źródło

Facelets ViewHandler

Java wybrane technologie

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

XML-RPC: Zdalne wykonywanie procedur


Rozdział 8 Integracja Javy z innymi językami - JNI. Programowanie sieciowe

Strumienie i serializacja

Projektowanie aplikacji J2EE w architekturze Model-View-Controller

Wybrane działy Informatyki Stosowanej

JAVA : APLIKACJE WEBOWE I JAVA EE WPROWADZENIE

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

Java EE 6. Programowanie aplikacji WWW. Krzysztof Rychlicki-Kicior. Ju dzi si gn po jedyne kompendium wiedzy na temat Java EE!

Sieci komputerowe. Wykład 8: Warstwa zastosowań: FTP i HTTP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

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

HTTP, CGI, Perl. HTTP HyperText Transfer Protocol. CGI Common Gateway Interface. Perl Practical Extraction and Report Language

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

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

Projektowanie i wdrażanie systemów informatycznych. Dodanie aplikacji klienta uruchamianej przez przeglądarkę kontynuacja projektu:

Serwery WWW. Konfiguracja. Zadania serwera. NCSA httpd 1.5

Programowanie i projektowanie obiektowe

Nowe mechanizmy w wersji 3 Java Card. Mateusz LESZEK (138775)

I.Wojnicki, Tech.Inter.

Protokoły Internetowe

Transkrypt:

Java wybrane technologie spotkanie nr 3 Serwlety 1

Klient-Serwer Odpowiedzialność serwera przyjmowanie żądań od klienta przygotowywanie odpowiedzi statyczna dynamiczna Rodzaje odpowiedzi statyczna dynamiczna 2

Podział serwera Common Gateway Interface (CGI) serwer: komunikacja (protokół) skrypt: przetwarzanie danych i przygotowywanie odpowiedzi wady: nowy proces dla każdego żądania pełna inicjalizacja dla każdego żądania komunikacja za pomocą plików server extensions Netscape Server API (NSAPI) Internet Server API (ISAPI) Servlet API 3

Typy kontenerów serwletów Opracował standalone in-process out-of-process 4

Witaj świecie import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class WitajSwiecie extends javax.servlet.http.httpservlet { protected void service(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { //kodowanie znaków zostanie przekazane w nagłówku HTTP //Content-Type: text/html; charset=utf-8 response.setcontenttype("text/html;charset=utf8"); //posługuje się właściwym kodowaniem PrintWriter pw = response.getwriter(); pw.println("<html>"); pw.println("<head>"); pw.println("</head>"); pw.println("<body>"); pw.println("witaj świecie"); pw.println("</body>"); pw.println("</html>"); pw.close(); 5

Deskryptor <?xml version="1.0" encoding="utf-8"?> <web-app id="webapp_id" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>serwlety1</display-name> <servlet> <description>jakiś opis</description> <display-name>witajswiecie</display-name> <servlet-name>witajswiecie</servlet-name> <servlet-class>witajswiecie</servlet-class> </servlet> <servlet-mapping> <servlet-name>witajswiecie</servlet-name> <url-pattern>/witajswiecie</url-pattern> </servlet-mapping> </web-app> 6

Interfejs javax.servlet.servlet init(servletconfig), service(servletrequest, ServletResponse), destroy(), getservletconfig(), getservletinfo() klasa javax.servlet.genericservlet (wszystko poza service()) interfejs javax.servlet.servletrequest interfejs javax.servlet.servletresponse pakiet javax.servlet.http 7

Java Server Pages (JSP) Java w HTML vs HTML w Javie server-side includes (np. ASP, PHP początkowo jako CGI) kiedy serwlet, a kiedy JSP JSP dla twórców stron Serwlety jako kontrolery uwierzytelnianie autoryzacja walidacja nadzorowanie transakcji Struts 8

Nie tylko serwlety import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class Pozdrawiak extends javax.servlet.http.httpservlet { protected void service(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html;charset=utf8"); PrintWriter pw = response.getwriter(); String imie = request.getparameter("imie"); pw.println("<html>"); pw.println("<head>"); pw.println("</head>"); pw.println("<body>"); pw.println("witaj " + imie); pw.println("</body>"); pw.println("</html>"); pw.close(); 9

JSP <?xml version="1.0" encoding="iso-8859-1"?> <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>pozdrawiak</title> </head> <body> Witaj ${param.imie </body> </html> 10

Architektury Opracował Model 1 Model 2 11

Wprowadzenie do HTTP Uniform Resource Identifier (URI) napis identyfikujący dowolny zasób; nie musi przenosić informacji jak ten zasób odnaleźć; nadklasa URL i URN pliki/zajecia/wyklad3.pdf Uniform Resource Locator (URL) nieformalny termin określający URI wskazujące protokół internetu http://mimuw.edu.pl/~sroka/jwt/wyklad3.pdf Uniform Resource Name (URN) napis jednoznacznie identyfikujący zasób, ale nie zawierający informacji jak się do niego dostać; w celu zachowania jednoznaczności URN są nadzorowane przez odpowiednie instytucje ISBN:0-306-40615-2 12

Budowa komunikatu HTTP (jest podobna dla żądania i odpowiedzi) pierwsza linia określa cel komunikatu dla żądań: nazwa metody, URI, wersja protokołu GET /~sroka/jwt/wyklad3.pdf HTTP/1.1 GET HEAD POST nagłówki z metainformacjami (rozmiar, kodowanie, opis zawartości) pusta linia opcjonalne ciało wiadomości 13

Przykład żądanie: POST /serwlety/pozdrawiak HTTP/1.1 User-Agent: Mizilla/4.0 Content-Type: application/x-www-form-urlencoded ContentLength: 8 user=ala odpowiedź: HTTP/1.1 200 OK Date: Sun, 15 Oct 2006 20:21:57 GMT Content-Type: text/html Content-Length: 39 <html> <body> Witaj Ala </body> </html> 14

Serwlety c.d. HttpServlet protected void doxxx(httpservletrequest, HttpServletResponse) throws ServletException, IOException (XXX = Get, Head, Post, Put, Delete, Options, Trace) 1. kontener wywołuje service(servletrequest, ServletResponse) 2. jej implementacja z HttpServlet wywołuje service(httpservletrequest, HttpServletResponse) 3. która (dlatego nie należy jej przedefiniowywać) wybiera odpowiednią metodę doxxx() 15

Żądanie ServletRequest String getparameter(string paramname) String[] getparametervalues(string paramname) Enumeration getparameternames() HttpServletRequest String getheader(string headername) String[] getheaders(string headername) Enumeration getheadernames() Cookie[] getcookies() 16

Odpowiedź ServletResponse PrintWriter getwriter() ServletOutuputStream getoutputstream() void setcontenttype(string type) albo Writer albo OutputStream setcontenttype() nie nic nie robi jak wyjście zostało już zatwierdzone HttpServletResponse void setheader(string name, String value) void setintheader(string name, int value) void setdateheader(string name, long millisecs) void addheader/addintheader/addfateheader boolean containsheader(string name) niektóre nagłówki: Date, Expires, Las-Modified, Refresh addcookie(cookie c) 17

Wysyłanie plików public class WysylanieArchiwum extends javax.servlet.http.httpservlet implements javax.servlet.servlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { dopost(request, response); protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("application/jar"); byte[] bufor = new byte[1024]; FileInputStream in = new FileInputStream("test.jar"); OutputStream out = response.getoutputstream(); int x; while ( (x = in.read(bufor))!= -1 ) out.write(bufor, 0, x); in.close(); out.close(); 18

Przekierowywanie i informowanie o błędach Opracował protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.sendredirect("http://www.mimuw.edu.pl/~sroka"); protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { //przekierowanie HTTP można wykonać jedynie przed zatwierdzeniem wyjścia PrintWriter pw = response.getwriter(); pw.print("<html><head></head><body>witaj świecie!</body></html>"); pw.flush(); //to wywołanie zgłosi java.lang.illegalstateexception response.sendredirect("http://www.mimuw.edu.pl/~sroka"); protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.senderror(httpservletresponse.sc_unauthorized, "Wstydź się"); 19

Cykl życia Opracował loaded = jest egzemplarz init(servletconfig) vs init() <load-on-startup> destroy() 20

Parametryzacja serwletów ServletConfig String getinitparameter(string name) Enumeration getinitparameternames() String getservletname() ServletContext getservletcontext() GenericServlet implementuje ServletConfig 21

Przykład public CyklZycia() { super(); System.out.println("CyklZycia konstruktor"); public void init() throws ServletException { System.out.println(getServletName()+" : init()"); String par1 = getinitparameter("mojparametr1"); String par2 = getinitparameter("mojparametr2"); String par3 = getinitparameter("mojparametr3"); System.out.println(getServletName()+" ("+par1+","+par2+","+par3+")"); public void destroy() { System.out.println(getServletName()+" : destroy()"); protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html;charset=utf8"); PrintWriter pw = response.getwriter();... 22

Deskryptor <servlet> <description> Serwlet sparametryzowany, łądowany gorliwie (w trakcie osadzania aplikacji) </description> <display-name>sparametryzowanygorliwy</display-name> <servlet-name>sparametryzowanygorliwy</servlet-name> <servlet-class>wyklad.cyklzycia</servlet-class> <init-param> <param-name>mojparametr1</param-name> <param-value>x</param-value> </init-param> <init-param> <param-name>mojparametr2</param-name> <param-value>y</param-value> </init-param> <init-param> <param-name>mojparametr3</param-name> <param-value>z</param-value> </init-param> <load-on-startup>1</load-on-startup> <!--dla wartości nieujemnych serwlet będzie ładowany przy starcie kontenera z właśnie takim priorytetem, dla ujemnych lub jeżeli nic nie podano kontener ma wolna rękę i zazwyczaj ładuje leniwie--> </servlet> 23

ServletContext String getmimetype(string file) typy MIME mogą być zdefiniowane w deskryptorze String getrealpath(string path) np. "/index.html" -> "http://host/contextpath/index.html" nie zawsze się da (zasoby mogą być w archiwum) URL getresource(string path) ścieżka musi się zaczynać od "/" i jest interpretowana względem context root aplikacji zasoby mogą pochodzić z archiwów z aktywnymi zasobami lepiej używać obiektu RequestDispatcher wersja skrócona InputStream getresourceasstream(string path) void log(string msg) Z kontekstu można odczytać parametry dla całej aplikacji. 24

Współdzielenie atrybutów Object getattribute(string name) Enumeration getattributenames() void setattribute(string name, Object value) Kontenery: ServletRequest ServletContext HttpSession 25

Przekierowywanie i włączanie void forward(servletrequest req, ServletResponse res) void include(servletrequest req, ServletResponse res) RequestDispatcher.forward() vs HttpServletResponse.sendRedirect() w przypadku forward() odpowiedź nie może być jeszcze zatwierdzona w przypadku include() zdalny zasób nie powinien ustawiać nagłówków, wszelkie próby są ignorowane Zarówno ServletContext jak i ServletRequest mają metodę: RequestDispatcher getrequestdispatcher(string path) przyjmuje jedynie ścieżki z tej samej aplikacji, np. "/Serwlety1/WitajSwiecie" getrequestdispatcher() z ServletRequest akceptuje ścieżki względne, np. "../html/copyright.html" dodatkowo ServletContext ma getnameddispatcher(), która przyjmuje nazwę używaną w desktyptorze żeby przekierowywać lub włączać zasoby z inne aplikacji należy dostać jej ServletContext (przy pomocy getservletcontext().getcontext(uri)) i dopiero z niego pobrać ReqiestDispatcher 26

Informacje o oryginalnym żądaniu Atrybuty dodawane do żądania javax.servlet.include.request_url javax.servlet.include.context_path javax.servlet.include.servlet_path javax.servlet.include.path_info javax.servlet.include.query_string (oraz analogiczny zestaw dla "forward" zamiast "include") Wartości atrybutów odpowiadają wynikom getrequesturi(), getcontextpath(), getservletpath(), getpathinfo() i getquerystring() z oryginalnego żądania 27