1 / 35

Internetteknologi 2 (ITNET2)

Internetteknologi 2 (ITNET2). Java teknologi på Internettet J2EE Servlets. Indhold i denne præsentation. Java teknologier på Internettet Styrker og svagheder ved Java Servlet teknologi HttpServlet HttpServletRequest HttpServletResponse Eksempler på brug af Servlets

amity-ramos
Download Presentation

Internetteknologi 2 (ITNET2)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Internetteknologi 2 (ITNET2) Java teknologi på Internettet J2EE Servlets

  2. Indhold i denne præsentation • Java teknologier på Internettet • Styrker og svagheder ved Java • Servlet teknologi • HttpServlet • HttpServletRequest • HttpServletResponse • Eksempler på brug af Servlets • Deployment af Java Servlets på Tomcat AS

  3. Java teknologier på Internettet Java Webteknologier • J2EE/JEE: Enterprise Java, til store og datatunge systemer • Servlets: server-side dynamisk og OO til indlejret HTML • JSP: server-side dynamisk og OO til indlejret kode • JSF: modstykke til ASP.NET 2 • Applets: client-side dynamisk til avanceret dynamik på klienten (alle de ting som DHTML ikke kan) • RMI, SOAP, CORBA og EJB er en del af JEE application servere • IKKE JavaScript – har INTET med Java at gøre

  4. Servlet History

  5. Vi ser at HTML er indlejret. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } Server-side:Servlet eksempel Resultatet <html> <head> <title>Hello World!</title> </head> <body bgcolor="white"> <a href="/examples/servlets/helloworld.html"> <img src="/examples/images/code.gif" height=24 width=24 align=right border=0 alt="view code"></a> <a href="/examples/servlets/index.html"> <img src="/examples/images/return.gif" height=24 width=24 align=right border=0 alt="return"></a> <h1>Hello World!</h1> </body> </html>

  6. Styrker og svagheder ved Java • Styrker: • God performance. Servlets har ikke samme invokerings overhead som CGI har, og er ikke et scriptsprog som ASP eller PHP (meget lig ASP.NET med dets CLR) • Platforms uafhængigt: kan kører på LINUX, UNIX, PC, MVS, og mange, mange andre platforme • God skalerbarhed: Servlets kan håndtere mere end et request ad gangen (indbygget tråd understøttelse) • Høj udviklingshastighed: ekstremt let at lære for Java programmører – (næsten) alle øvrige Java teknologier kan anvendes (JDBC, JPA, EJB, RMI, CORBA) • Omfattende API – som nævnt herover – alle Java API’er kan anvendes ved internetprogrammering • Smukt sprog: ægte objektorienteret = nemt at lave ”pæn” arkitektur, bruge polymorfi m.v. (næsten det vigtigste)

  7. Styrker og svagheder ved Java • Svagheder: • Det er IKKE Microsoft • Internet Explorer havde tidligere 97% af markedet (2003) • ASP.NET med C# og Visual Basic er en alvorlig konkurrent • Stor base af ASP Visual Basic programmører klar til at konvertere –og KÆMPE FLOKKE af Visual Studio.NET folk • SUN har ikke kræfter nok alene til at kæmpe mod MS strømmen – (det gør de selvfølgeligt heller ikke ; ) • VM’s er ikke altid lige optimale på alle platforme • PHP og ASP.NET servere er lettilgængelige – det er Java servere ikke • Men ellers er det svært at være negativ …

  8. Java pakker og objekter • Alting i Java består af klasser og objekter • Servlets benyttes til Webapplikationer • kan bruges til andet end HTTP kommunikation. Dette vil vi ikke gennemgå nærmere i dette kursus • Vil vil i stedet fokusere på den specialiserede pakke i Java Servlet pakken der handler om kommunkation via HTTP (altså WWW): • javax.servlet.http

  9. Servlet Containers • Servlet Containers (Servlet Engines) • F.eks. Apache Tomcat • Leverer et servlet runtime environment - en Servlet Container • Varetager alt i en servlets livsforløb • Sørger for at omdirigere HTTP requests til den rette servlet • Denne styring foregår via Interface Servlet • I pakken javax.servlet • Denne SKAL implementeres af alle servlets • Servlet metoderne bliver automatisk kaldt af containeren (i vores tilfælde Tomcat)

  10. Livscyklus for en servlet • Servlet Container kontrollerer livscyklus • Starter med at kalde metoden “init” når den loades første gang • Dvs. ved første HTTP request • Kalder metoden “service” ved hvert HTTP request • Servlet behandler herefter HTTP request’et • Modtager request fra ServletRequest objektet • Servlet sender svar til klient • Skriver til ServletResponse objektet • “Service” kaldes kun een gang pr. request • Kalder metoden “destroy” når servlet afsluttets • Til at frigive diverse brugte ressourcer (f.eks. DB forbindelser)

  11. Servlet implementationer • Servlet implementationer: • GenericServlet • Package javax.servlet • Bruges til ikke web baserede servlets (jeg tror aldrig jeg har set een – er der nogen der har et godt eksempel, så sig til) • HttpServlet • Packagejavax.servlet.http • Bruges til Web-baserede servlets

  12. HttpServlet Class • Class HttpServlet • Overskriver service metoden • Differentierer mellem HTTP get and post requests • Definerer metoderne doGet and doPost til at behandle HTTP requests • Indpakker HTTP request (der jo egentligt er en strøm af bytes = et tekst dokument) i HttpServletRequest og HttpServletResponse objekterne • Der så stiller en række metoder til rådighed hvormed vi kan udtrække data, og manipulere med HTTP response dokumentet, der i sidste ende er det som brugeren præsenteres for • Der er fire andre metoder på HTTPServlet klassen der ikke gennemgås her

  13. HttpServletRequest Interface • Interface HttpServletRequest • Oprettes af servlet containeren og sendes til “service” metoden • Der af HttpServlet videresendes til doGet eller doPost • Indeholder klient request og request behandlings metoder • Udover doGet og doPost listes på næste side yderligere metoder, men de gennemgås først senere ved eksempel

  14. HttpServletRequest Interface

  15. HttpServletResponse Interface • Interface HttpServletResponse • Oprettes af Servlet Containeren og sendes til service metoden • Der af HttpServlet videresendes til doGet eller doPost • Leverer metoder til at producere et svar (response) der bliver til HTTP response dokumentet, der endeligt havner i f.eks. browseren til rendering • Yderligere metoder listes på næste side til senere opslag, men gennemgås først senere ved eksempel

  16. HttpServletResponse Interface

  17. FORM og server-side scripting Bruger indtaster data i form feltet i browser og taster submit: http://feedbackForm.htm Webserver findes via IP adresse & DNS Lytter på port f.eks. 80 1 HTTP Request (over TCP/IP) GET /feedback (Java servlet) 2 Webserveren modtager requestet: sender det videre til ServletContaineren, der opretter bl.a. HttpServletRequest og HttpServletResponse. Parametre hentes fra HttpServletRequest og der skrives til response En typisk Header kunne se ud som følger: HTTP/1.0 200 OK Server: Netscape-Communications/1.1 Date: Tuesday, 25-Nov-97 01:22:04 GMT Last-modified: Thursday, 20-Nov-97 10:44:53 GMT Content-length: 6372 Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> ... her følger resten af dokumentet 3 Browseren modtager response: Renderer HTML dokumentet til brugervenlig form

  18. HTTP GET request med data • Håndtering af HTTP Requests med Data • Http request følger formatet: • Servlet_url?query_string • Query string format: • Parameter_name=value (kaldet name/value par) • Name/value par separeres med ”&” tegnet • Eksempel: • \feedback?navn=Stefan&stilling=lektor

  19. Obtain the parameter from the request and assign the value to a string. 1 // Fig. 9.12: WelcomeServlet2.java 2 // Processing HTTP get requests containing data. 3 package com.deitel.advjhtp1.servlets; 4 5 import javax.servlet.*; 6 import javax.servlet.http.*; 7 import java.io.*; 8 9 public class WelcomeServlet2 extends HttpServlet { 10 11 // process "get" request from client 12 protected void doGet( HttpServletRequest request, 13 HttpServletResponse response ) 14 throws ServletException, IOException 15 { 16 String firstName = request.getParameter( "firstname" ); 17 18 response.setContentType( "text/html" ); 19 PrintWriter out = response.getWriter(); 20 21 // send XHTML document to client 22 23 // start XHTML document 24 out.println( "<?xml version = \"1.0\"?>" ); 25 26 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " + 27 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" + 28 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 29 30 out.println( 31 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" ); 32 33 // head section of document 34 out.println( "<head>" ); WelcomeServlet2.java1) Hent fornavnsparameter 2) Skriv et XHTML response til repsonse Writer objektet

  20. Include the value in the response. 35 out.println( 36 "<title>Processing get requests with data</title>" ); 37 out.println( "</head>" ); 38 39 // body section of document 40 out.println( "<body>" ); 41 out.println( "<h1>Hello " + firstName + ",<br />" ); 42 out.println( "Welcome to Servlets!</h1>" ); 43 out.println( "</body>" ); 44 45 // end XHTML document 46 out.println( "</html>" ); 47 out.close(); // close stream to complete the page 48 } 49 } WelcomeServlet2.java

  21. 1 <?xml version ="1.0"?> 2 <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 <!-- Fig. 9.13: WelcomeServlet2.html --> 6 7 <html xmlns ="http://www.w3.org/1999/xhtml"> 8 <head> 9 <title>Processing get requests with data</title> 10 </head> 11 12 <body> 13 <form action ="/advjhtp1/welcome2"method ="get"> 14 15 <p><label> 16 Type your first name and press the Submit button 17 <br /><input type ="text"name = "firstname"/> 18 <input type = "submit"value ="Submit" /> 19 </p></label> 20 21 </form> 22 </body> 23 </html> WelcomeServlet2.htmlDenne side indeholder et form element der tager “firstname” og sender etGET request til vores Servlet vi ser at firstname overføres i URL’en med værdien Paul

  22. Redirect af HTTP Requests • Redirection • Tillader en Servlet at redirecte et request via • Metoden sendRedirect på HttpServletResponse • Smart til: • Kontrolklasser (Dispatcher Servlets) • kontrol logik, der • leder og fordeler (dispatcher) • Pattern: Frontcontroller

  23. Obtain the page parameter for redirection location. Redirect user to another page or servlet. 1 // Fig. 9.18: RedirectServlet.java 2 // Redirecting a user to a different Web page. 3 package com.deitel.advjhtp1.servlets; 4 5 import javax.servlet.*; 6 import javax.servlet.http.*; 7 import java.io.*; 8 9 public class RedirectServlet extends HttpServlet { 10 11 // process "get" request from client 12 protected void doGet( HttpServletRequest request, 13 HttpServletResponse response ) 14 throws ServletException, IOException 15 { 16 String location = request.getParameter( "page" ); 17 18 if ( location != null ) 19 20 if ( location.equals( "deitel" ) ) 21 response.sendRedirect( "http://www.deitel.com" ); 22 else 23 if ( location.equals( "welcome1" ) ) 24 response.sendRedirect( "welcome1" ); 25 26 // code that executes only if this servlet 27 // does not redirect the user to another page 28 29 response.setContentType( "text/html" ); 30 PrintWriter out = response.getWriter(); 31 32 // start XHTML document 33 out.println( "<?xml version = \"1.0\"?>" ); RedirectServlet.javaDefine Servlet RedirectServletProcess get request

  24. 34 35 out.println( "<!DOCTYPE html PUBLIC \"-//W3C//DTD " + 36 "XHTML 1.0 Strict//EN\" \"http://www.w3.org" + 37 "/TR/xhtml1/DTD/xhtml1-strict.dtd\">" ); 38 39 out.println( 40 "<html xmlns = \"http://www.w3.org/1999/xhtml\">" ); 41 42 // head section of document 43 out.println( "<head>" ); 44 out.println( "<title>Invalid page</title>" ); 45 out.println( "</head>" ); 46 47 // body section of document 48 out.println( "<body>" ); 49 out.println( "<h1>Invalid page requested</h1>" ); 50 out.println( "<p><a href = " + 51 "\"servlets/RedirectServlet.html\">" ); 52 out.println( "Click here to choose again</a></p>" ); 53 out.println( "</body>" ); 54 55 // end XHTML document 56 out.println( "</html>" ); 57 out.close(); // close stream to complete the page 58 } 59 } RedirectServlet.javaCreate error page

  25. Send get request to RedirectServlet with the page parameter. 1 <?xml version ="1.0"?> 2 <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 <!-- Fig. 9.19: RedirectServlet.html --> 6 7 <html xmlns = "http://www.w3.org/1999/xhtml"> 8 <head> 9 <title>Redirecting a Request to Another Site</title> 10 </head> 11 12 <body> 13 <p>Click a link to be redirected to the appropriate page</p> 14 <p> 15 <a href = "/advjhtp1/redirect?page=deitel"> 16 www.deitel.com</a><br /> 17 <a href = "/advjhtp1/redirect?page=welcome1"> 18 Welcome servlet</a> 19 </p> 20 </body> 21 </html> RedirectServlet.html

  26. Program Output

  27. Session Tracking • Session Tracking • HTTP er en “stateless” protokol • Der er altså INGEN sammenhæng mellem to handlinger en bruger måtte udføre fra en browser • Ønskes der f.eks. et beskyttet lukket lag … • Så skal der bruges brugernavn og evt. password • Men da der ikke er nogen state indbygget i HTTP • Så er vi nødt til at skabe det eksplicit • Servlets har forskellige teknologier til dette • der er styret af Servlet Containeren

  28. Session Tracking • Tracking teknologier • Cookies • De fleste browsere understøtter Cookies, information der lagres på klientens harddisk og medsendes ved kommunikation • Session tracking • Understøttes automatisk i JSP sider • URL rewriting • Vi sender et unik ID med i URL parameterne (WAP applikationer) • Hidden form elements • Kan bruges til at fastholde information mellem request’s

  29. Cookies • Cookies • Små tekst data filer • Kan bruges til at gemme information på tværs af HTTP kald • f.eks. til identificere en tidligere bruger for server-side programmer, som f.eks. en Servlet • Sendes og hentes i HTTP headeren • Lever i en browser session eller en angivet maks. alder • hvorefter den slettes • Problem med at en bruger kan slå “cookies” fra • så er vi på spanden (alvorligt)

  30. Session Tracking med HttpSession • HttpSession interface • Bruges til at styre en session • En session svarer typisk til en brugers almindelige interaktion med en Web-applikation – dvs. en “normal” anvendelses situation • Derfor indbygget automatik • En session lever I serverens hukommelse • Der tildeles et unikt ID til en bruger • Der kan gemmes name/value par, kaldet attributes • Værdier er Java objekter • MEGET smart, da der kan laves objekter der er unikke for netop denne bruger, og netop den session han befinder sig i. • Udløber når: • Browser session slutter (brugeren lukker sin browser) • Session har timeout (i forhold til sidste HTTP request) • Servlet invalidated (via kald til invalidate) – f.eks. “log ud” • Servlet container nedlukkes (Tomcat)

  31. Hent det eksisterende session objekt. Hvis den ikke findes, opret en ny. 1 // Fig. 9.25: SessionServlet.java 2 // Using HttpSession to maintain client state information. 3 package com.deitel.advjhtp1.servlets; 4 5 import javax.servlet.*; 6 import javax.servlet.http.*; 7 import java.io.*; 8 import java.util.*; 9 10 public class SessionServlet extends HttpServlet { 11 private final Map books = new HashMap(); 12 13 // initialize Map books 14 public void init() 15 { 16 books.put( "C", "0130895725" ); 17 books.put( "C++", "0130895717" ); 18 books.put( "Java", "0130125075" ); 19 books.put( "VB6", "0134569555" ); 20 } 21 22 // receive language selection and create HttpSession object 23 // containing recommended book for the client 24 protected void doPost( HttpServletRequest request, 25 HttpServletResponse response ) 26 throws ServletException, IOException 27 { 28 String language = request.getParameter( "language" ); 29 30 // Get the user's session object. 31 // Create a session (true) if one does not exist. 32 HttpSession session = request.getSession( true ); 33 34 // add a value for user's choice to session SessionServlet.javaDefine Servlet SessionServlet

  32. Deployment af Web-applikationer • Web-applikationer (defineret sidste gang) • Kan i Java verdenen bestå af JSPer og servlets • Der er en given mappe struktur, der i øvrigt er standardiseret i J2EE og er derfor “næsten” ens på tværs af forskellige Servlet Containers • Der kan bruges Web Application Archive (WAR) • Hvilket næsten alle udviklingsværktøjer kan generere • Eller filerne kan lægges direkte i en mappe struktur • Hvilket vi vil gøre af hensyn til forståelsen • Der kan konfigureres vha. konfigurations filerne • Server.xml • Opretter Web Applikationer (context) • Web.xml • Mapper servlet navn og placering • Definerere URL mønstre

  33. 1 <!-- Advanced Java How to Program JSP/servlet context --> 2 <Context path ="/advjhtp1" 3 docBase ="webapps/advjhtp1" 4 reloadable ="true"> 5 </Context> server.xml I filen “server.xml” styres overordnet hvilke Web applikationer der er deployeret på serveren. Hver “Web-applikation” får sin egen “context”, herunder en “rod” eller “doucment base” (docBase) Hvorfra alle stier er relative internt i applikationen.

  34. Maps a servlet name to its fully qualified class name. 1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 3 "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> 4 5 <web-app> 6 7 <!-- General description of your Web application --> 8 <display-name> 9 Advanced Java How to Program JSP 10 and Servlet Chapter Examples 11 </display-name> 12 13 <description> 14 This is the Web application in which we 15 demonstrate our JSP and Servlet examples. 16 </description> 17 18 <!-- Servlet definitions --> 19 <servlet> 20 <servlet-name>welcome1</servlet-name> 21 22 <description> 23 A simple servlet that handles an HTTP get request. 24 </description> 25 26 <servlet-class> 27 com.deitel.advjhtp1.servlets.WelcomeServlet 28 </servlet-class> 29 </servlet> 30 31 <!-- Servlet mappings --> 32 <servlet-mapping> 33 <servlet-name>welcome1</servlet-name> Web.xmlHver Web Applikation har i sin “context” et konfigurationsscript som kun gælder for netop denne kontekst. Det er filen “Web.xml”. Her opsættes detaljer om alle servlets applikationen anvender

  35. 34 <url-pattern>/welcome1</url-pattern> 35 </servlet-mapping> 36 37 </web-app> Web.xmlfortsatUnder ”mappings” knytter man en given servlet med en relativ sti, eller et mønster, der svarer til URL relativt til document base.Der kan opsættes mange andre parametre i dette katalog, som f.eks. Timeout for sessionen m.v. Map servlet to URL pattern. The pattern is relative to the server address and application context root.

More Related