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

Internetteknologi 2 (ITNET2)

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Internetteknologi 2 (ITNET2)

Java teknologi på Internettet

J2EE Servlets

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 4

Servlet History

Ingeniørhøjskolen i ÅrhusSlide 5

Server-side:Servlet eksempel

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>"); }}

Vi ser at HTML er indlejret.

<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>

Resultatet

Ingeniørhøjskolen i ÅrhusSlide 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)

Ingeniørhøjskolen i ÅrhusSlide 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 …

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 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)

Ingeniørhøjskolen i ÅrhusSlide 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)

Ingeniørhøjskolen i ÅrhusSlide 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• Package javax.servlet.http• Bruges til Web-baserede servlets

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 14

HttpServletRequest InterfaceMethod Description String getParameter( String name )

Obtains the value of a parameter sent to the servlet as part of a get or post request. The name argument represents the parameter name.

Enumeration getParameterNames()

Returns the names of all the parameters sent to the servlet as part of a post request.

String[] getParameterValues( String name )

For a parameter with multiple values, this method returns an array of Strings containing the values for a specified servlet parameter.

Cookie[] getCookies()

Returns an array of Cookie objects stored on the client by the server. Cookies can be used to uniquely identify clients to the servlet.

HttpSession getSession( boolean create )

Returns an HttpSession object associated with the client’s current browsing session. An HttpSession object can be created by this method (true argument) if an HttpSession object does not already exist for the client. HttpSession objects can be used in similar ways to Cookies for uniquely identifying clients.

Fig. 30.3 Some methods of interface HttpServletRequest.

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 16

HttpServletResponse InterfaceMethod Description void addCookie( Cookie cookie )

Used to add a Cookie to the header of the response to the client. The Cookie’s maximum age and whether Cookies are enabled on the client determine if Cookies are stored on the client.

ServletOutputStream getOutputStream()

Obtains a byte-based output stream that enables binary data to be sent to the client.

PrintWriter getWriter()

Obtains a character-based output stream that enables text data to be sent to the client.

void setContentType( String type )

Specifies the MIME type of the response to the browser. The MIME type helps the browser determine how to display the data (or possibly what other application to execute to process the data). For example, MIME type "text/html" indicates that the response is an XHTML document, so the browser displays the XHTML page. For more information on

Fig. 30.4 Some methods of interface HttpServletResponse.

Ingeniørhøjskolen i ÅrhusSlide 17

FORM og server-side scripting

1 HTTP Request (over TCP/IP)GET /feedback (Java servlet)

Bruger indtaster data i form feltet i browser og taster submit:http://feedbackForm.htm

2Webserveren modtager requestet:sender det videre til ServletContaineren, der opretter bl.a. HttpServletRequest og HttpServletResponse. Parametre hentes fra HttpServletRequest og der skrives til response

3

En typisk Header kunne se ud som følger:

HTTP/1.0 200 OKServer: 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

Browseren modtager response:Renderer HTML dokumentet tilbrugervenlig form

Webserver findes via IP adresse & DNSLytter på port f.eks. 80

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 19

WelcomeServlet2.java

1) Hent fornavnsparameter

2) Skriv et XHTML response til repsonse Writer objektet

1 // Fig. 9.12: WelcomeServlet2.java2 // 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 client12 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 client22 23 // start XHTML document24 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 document34 out.println( "<head>" );

Obtain the parameter from the request and assign the value to a string.

Ingeniørhøjskolen i ÅrhusSlide 20

WelcomeServlet2.java

35 out.println( 36 "<title>Processing get requests with data</title>" );37 out.println( "</head>" );38 39 // body section of document40 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 document46 out.println( "</html>" );47 out.close(); // close stream to complete the page48 } 49 }

Include the value in the response.

Ingeniørhøjskolen i ÅrhusSlide 21

WelcomeServlet2.html

Denne side indeholder et form element der tager “firstname” og sender etGET request til vores Servlet

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 button17 <br /><input type = "text" name = "firstname" />18 <input type = "submit" value = "Submit" />19 </p></label>20 21 </form>22 </body>23 </html>

vi ser at firstnameoverføres i URL’enmed værdienPaul

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 23

RedirectServlet.java

Define Servlet RedirectServlet

Process get request

1 // Fig. 9.18: RedirectServlet.java2 // 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 client12 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 servlet27 // does not redirect the user to another page28 29 response.setContentType( "text/html" );30 PrintWriter out = response.getWriter(); 31 32 // start XHTML document33 out.println( "<?xml version = \"1.0\"?>" );

Obtain the page parameter for redirection location.

Redirect user to another page or servlet.

Ingeniørhøjskolen i ÅrhusSlide 24

RedirectServlet.java

Create error page

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 document43 out.println( "<head>" );44 out.println( "<title>Invalid page</title>" );45 out.println( "</head>" );46 47 // body section of document48 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 document56 out.println( "</html>" );57 out.close(); // close stream to complete the page 58 } 59 }

Ingeniørhøjskolen i ÅrhusSlide 25

RedirectServlet.html

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>

Send get request to RedirectServlet with the page parameter.

Ingeniørhøjskolen i ÅrhusSlide 26

Program Output

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 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)

Ingeniørhøjskolen i ÅrhusSlide 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)

Ingeniørhøjskolen i ÅrhusSlide 31

SessionServlet.java

Define Servlet SessionServlet

1 // Fig. 9.25: SessionServlet.java2 // 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 books14 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 object23 // containing recommended book for the client24 protected void doPost( HttpServletRequest request,25 HttpServletResponse response )26 throws ServletException, IOException27 {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

Hent det eksisterende session objekt. Hvis den ikke findes, opret en ny.

Ingeniørhøjskolen i ÅrhusSlide 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

Ingeniørhøjskolen i ÅrhusSlide 33

server.xml

1 <!-- Advanced Java How to Program JSP/servlet context -->2 <Context path = "/advjhtp1" 3 docBase = "webapps/advjhtp1" 4 reloadable = "true">5 </Context>

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.

Directory Description context root This is the root directory for the Web application. The name of this directory is chosen by the Web

application developer. All the JSPs, HTML documents, servlets and supporting files such as images and class files reside in this directory or its subdirectories. The name of this directory is specified by the Web application creator. To provide structure in a Web application, subdirectories can be placed in the context root. For example, if your application uses many images, you might place an images subdirectory in this directory.

WEB-INF This directory contains the Web application deployment descriptor (web.xml). WEB-INF/classes This directory contains the servlet class files and other supporting class files used in a Web application.

If the classes are part of a package, the complete package directory structure would begin here.

WEB-INF/lib This directory contains Java archive (JAR) files. The JAR files can contain servlet class files and other supporting class files used in a Web application.

Fig. 30.8 Web application standard directories.

Ingeniørhøjskolen i ÅrhusSlide 34

Web.xml

Hver 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

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 Examples11 </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.WelcomeServlet28 </servlet-class>29 </servlet>30 31 <!-- Servlet mappings -->32 <servlet-mapping>33 <servlet-name>welcome1</servlet-name>

Maps a servlet name to its fully qualified class name.

Ingeniørhøjskolen i ÅrhusSlide 35

WelcomeServlet Web application directory and file structure

advjhtp1 servlets WelcomeServlet.html WEB-INF web.xml classes com deitel advjhtp1 servlets WelcomeServlet.class

Fig. 30.11 Web application directory and file structure for WelcomeServlet.

Web.xmlfortsat

Under ”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.

34 <url-pattern>/welcome1</url-pattern>35 </servlet-mapping>36 37 </web-app>

Map servlet to URL pattern. The pattern is relative to the server address and application context root.