JavaServer Pages (JSP)

Like dokumenter
JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Resymé: Leksjonen omhandler grunnlaget for JSP, nemlig Java Servlets. I tillegg gjennomgås de mest grunnleggende elementene i JSP..

1 JSP. 1.1 Innledning. 1.2 JSP og web-tjener. Innhold

JSP. Tilstander og synkronisering

1 Introduksjon til web-programmering med JSP

En bedre verden med AJAX

1. Installasjon av web-tjener og teori

Web-programmering med JSP Løsningsforslag leksjon 3

1 Installasjon av web-tjener

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

INF 1010, vår 2005 Løsningsforslag uke 11

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Web-programmering med JSP Løsningsforslag leksjon 4

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Bruk av NetBeans i JSP-delen av Web-applikasjoner med JSP og JSF

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

INF1010 våren 2018 tirsdag 23. januar

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

2 Om statiske variable/konstanter og statiske metoder.

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Kapittel 8: Programutvikling

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Introduksjon til programmering og programmeringsspråk

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Kapittel 7: Mer om arv

1. Installering av webtjener. Litt teori

J2EE. CMP Entity Beans, Transaksjoner, JSP

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Programmeringsspråket C

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Forelesning inf Java 5

Forelesning inf Java 5

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Forelesning inf Java 4

Antall oppgaver: 6. Alle trykte og skrevne hjelpemidler

HØGSKOLEN I SØR-TRØNDELAG

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

IN Notat om I/O i Java

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Introduksjon til objektorientert programmering

Dagens tema Kapittel 8: Objekter og klasser

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Del 3: Evaluere uttrykk

INF Notat om I/O i Java

Løse reelle problemer

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

import java.io.*; import java.util.*; import javagently.text;

Socket og ServerSocket

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Løsningsforslag Test 2

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Kapittel 1: Datamaskiner og programmeringsspråk

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

GUI («Graphical User Interface») del 2

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Litt om Javas class-filer og byte-kode

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Et forsøk på definisjon

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Løse reelle problemer

Dagens tema: 12 gode råd for en kompilatorskriver

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

TDT4100 Objektorientert programmering

INF1010 våren Arv og subklasser - del 2

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

IN1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Seminaroppgaver IN1010, uke 2

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Et forsøk på definisjon. Eksempel 1

Eksamen i Internetteknologi Fagkode: ITE1526

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1010 våren januar. Objektorientering i Java

2. Lage ASP.NET sider

Eksamensoppgaver 2014

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

INF1000 Eksamen 2014 (modifisert)

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

INF1000 : Forelesning 4

TOD063 Datastrukturer og algoritmer

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Oblig 4Hybelhus litt mer tips enn i oppgaven

Et forsøk på definisjon. Eksempel 1

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Innføring i bruk av CGI4VB

Transkript:

JavaServer Pages (JSP) Forelesning 1 Klient/tjener-systemer, installasjon av tjener, og intro til JSP. Statisk Web = HTML <!-- htmleks.html -- Eksempel på bruk av HTML-kode --> <html> <body> <h2> Overskrift </h2> <table border = 1> <tr> <td> rad 1 kolonne 1 <td> rad 1 kolonne 2 <!-- RAD 1 --> <tr> <td> rad 2 kolonne 1 <td> rad 2 kolonne 2 <!-- RAD 2 --> </table> <ul> <!-- lager en unummerert liste --> <li> dette blir første punkt i lista <li> mens dette blir andre </ul> </body> </html>

Hvordan fungerer web? Klient-side Tjener-side http://aitel.hist.no/index.html <html>... </html> Klient sender forepørsel til riktig tjener og får svar Nettleser tolker svaret og viser det til bruker Et viktig spørsmål. Er klienten og tjener HW eller SW? Problemet med HTML HTML-kode er statisk. Når en HTML-side er laget så forblir den slik helt til vi manuelt forandrer den Tenk bare om vi vil vise klokka på en web-side, det er ikke mulig med HTML-kode <html> <body> <h1> Klokka er nå: 12.56.11 </h1> </body> </html> Det vi trenger er muligheten for å lage HTML-kode dynamisk => mao. at koden "forandrer seg selv". F.eks. slik at klokka hele tiden er riktig. <html> <body> <h1> Klokka er nå: <% kode for å sette inn klokkeslettet %> </body> </html>

Forskjell på scripting og programmering Programmering: Kode kompileres til maskinkode (evt. bytekode) Script: Koden tolkes en linje av gangen. Gjøres automatisk når scriptet kjøres. Tolking gir typisk dårligere ytelse og sikkerhet Programmering gir også stort sett bedre kontroll til programmereren. Programmering for web Fra statisk til dynamisk web HTML-skjema og CGI I dag er CGI mye godt erstattet Java Servlets (programmering) JSP (Script/programmering?) ASP (VBScript) PHP (??) I tillegg har vi klientside-script JavaScript -> støttes (stort sett av) alle nettlesere VBScript -> IE og klient-side programmering Java Applets/ActiveX

Klient-side script Scriptet blir utført av klienten HTML-koden som returneres fra tjeneren inneholder både HTML og script-elementer Det er altså ressurser på klienten som brukes under utføring => skalering? Kjør script, klokke.html! Vis/kilde. Klientside-script brukes mye i forbindelse med validering av input fra HTML-skjema vis sjekkinput.html rask respons trege forbindelse slipper unødig last på tjener sikkerhet? Klientside script må støttes av nettleser => problem med gamle nettlesere. Tjenerside script Scriptet utføres på tjeneren, med ressurser på denne => skalerbarhet? Det er HTML-kode som returneres til klienten. Neste foil. Vis script klokke.jsp. Vis kilde. Tjenerside script passer godt mot databaser se figur sikkerhet trege nettverksforbindelser Tjenerside-script og tunge beregninger => bedre enn klientside-script

Tjener JSP-fil Klient forespørsel svar utfør <%= new java.util.date() %> </BODY> Resulterende HTML-kode Wed Sep 12 10:45:22 GMT+02:00 2001 </BODY> Tjenerside-script og databaser

Elementer i JSP JSP er HTML-kode blandet med script-kode Scriptlets. <% java-kode %> styrer det som skjer i en JSP eksempeler <% for (int i=0; i < 2; i++) { %> <H1> If I were a </H1> <% %> RICH MAN </BODY> <% for (int i=0; i < 2; i++) { out.println( <H1> If I were a </H1> ); %> RICH MAN </BODY> Eksempel RICH MAN Klient forespørsel svar HTML Tjener utfør JSP HTML <% for (int i = 0; i < 2;i++){ %> <H1> If I were </H1> <% %> RICH MAN </BODY> <H1> If I were </H1> <H1> If I were </H1> RICH MAN Resulterende HTML-kode

Klient- og tjenerscript sammen En kan godt ha en kombinasjon av klientside og tjenerside script f.eks. kan en JSP returnere en HTML-side som inneholder JavaScript. Hva er vitsen? dette er spesielt aktuelt når vi tar inn opplysninger fra brukeren. Vi bruker klientside-script for å sjekke først. Vi MÅ imidlertid også gjøre sjekken på tjenersiden fordi vi ikke kan være sikker på at klientside-scriptet har gjort jobben sin (brukeren har endret scriptet). Eksempel Vi vil vise hva klokke er både på klient-maskinen og tjener-maskinen. beggeklokker.jsp (kode neste foil). Koden slik den er på tjener <!-- beggeklokker.jsp --> <H1> Denne siden viser klokken </H1> <SCRIPT LANGUAGE="JavaScript"> <!-- klientside-script --> var now = new Date(); document.write(now.gethours()); document.write(now.getminutes()); </SCRIPT> <% out.println(new java.util.date()); %> <!-- tjenerside-script --> </BODY>

Oppgave Skriv en JSP som skriver ut: god morgen hvis klokka er før 12 god dag hvis klokka er mellom 12 og 17 ellers god kveld Tisp: java.util.date har en metode gethours() som angir hva klokka er, med en int for hel time. Ikke bruk out.println(); Uttrykk (expression) <%= new java.util.date() %> Sørger for å kalle tostring-metoden på det aktuelle objektet. Gjør samme nytt (stort sett) som <% out.println(new java.util.date()); %>

Outkontra uttrykk Eksempel med out Eksempel med uttrykk <% boolean sann = true; String streng = sann... ; if(sann) out.println(streng); else out.println( usann.. ); %> </BODY> <% boolean sann = true; String streng = sann... ; if(sann) { %> <%= streng %> <% else { %> <%= usann.. %> <% %> </BODY> Out-objektet Dette er et ferdiglaget objekt. Fungerer omtrent som System.out.println() men responsen havner til nettleseren. Vi kan bruke dette direkte i en scriptlet. Vi lager det ikke selv! <% out.println( <H1> til nettleseren </H1> ); %> Dette objektet er av klassen javax.servlet.jsp.jspwriter For å se mulige metoder for denne klassen se API-dok for servleter.

Direktivet import Kan importere java-klasser i en JSP Merk at dette gir oss muligheten til veldig god deling mellom presentasjon og logikk! <%-- klokkeimport.jsp. --%> <%@page import="java.util.date, java.io.*" %> <html> <body> <%= new Date() %> <%-- slipper å bruke hele pakkenavnet new java.util.date() --%> </body> </html> Java Servlets JSP er blir omformet til en Java Servlet. import javax.servlet.*; public class MinServlet implements Servlet eller public class MinServlet extends HttpServlet API-dok ikke med i standard API-dok. http://java.sun.com/products/servlet/2.2/javadoc/index.html

javax.servlet.servlet Livssyklus Legg merke til at interface et Servlet brukes ved oppretting av en ny Servlet. Dette gjør at web-tjeneren kan behandle alle Servlets likt!!! Service metoden i en servlet kan kalles fra mange tråder samtidig! Lager et objekt av klassen Web-klient.. forespørsel Web-tjener Servlet min = newminservlet(); min.init(); min.service(); min.destroy(); MinServlet.. public void init(){.. public void service(){.. public void destroy(){.... Frigjør plassen som objektet har brukt

Sammenligne JSP og Servlets <html> <head> <title> Min første JSP side </title> </head> <body> <h1> Klokka er: <%= new java.util.date() %> </h1> <% int tall = 100; %> </body> </html> import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.util.date; public class KlokkeServlet extends HttpServlet{ public void service(httpservletrequest req, HttpServletResponse res) throws IOException, ServletException{ res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); out.println(""); out.println("<head>"); out.println("<title> Min første Servlet </TITLE>"); out.println("</head>"); out.println(""); out.println("<h1> Denne servlet'en viser klokka nå: </H1>"); Date klokke = new java.util.date(); out.println(klokke); int tall = 100; out.println("</body>"); out.println("");

Overgangen fra JSP til servlet Ved forespørsel vil JSP en bli kompilert til en servlet. Legges i work katalogen til web-tjeneren. Ved feil i en JSP får vi ofte kryptiske feilmeldinger. Vi får mye bedre feilmeldinger ved kompilering av Java filer. Kan derfor ved problemer gå inn og forandre den resulterende servleten, og kompilere denne. Kompilering av servlets For å kompilere en servlet må du: ha SDK installert i tillegg må du ha servlet.jar i classpath en. Dette er API en for servleter og ligger sammen med web-tjeneren. Når du skal kjøre servleten så må webtjeneren kunne finne servleten (class-filen). Konfigurering av dette vil variere fra tjener til tjener.

Deklareringer i en scriptlet i JSP <% %> String rikmann= If I were a rich man ; import javax.servlet.http.*; import javax.servlet.*; import java.io.*; JSP Servlet Deklarering i en scriptlet havner inne i service-metoden på servleten.. public class KlokkeServlet extends HttpServlet{ public void service(httpservletrequest req, HttpServle throws IOException, ServletException{ String rikmann = If I were a rich man ; Deklarering av metoder og objektvariabler <%! %> String enstreng = En streng ; private int enmetode(){ return 15; import javax.servlet.http.*; import javax.servlet.*; import java.io.*; JSP Servlet Deklarering i en JSP-deklarasjon havner utenfor service-metoden på servleten.. public class KlokkeServlet extends HttpServlet{ String enstreng = En streng ; private int enmetode(){ return 15; public void service (...){ // kan her bruker enstreng og enmetode()

Metode inne i metode <% %> private int enmetode(){ return 15; JSP Servlet Metodedeklarasjon laget i en scriptlet havner også inne i service-metoden.!! Feilmelding. Det er ikke lov å deklarere en metode inne i en annen i Java!!! import javax.servlet.http.*; import javax.servlet.*; import java.io.*; public class KlokkeServlet extends HttpServlet{ public void service (...){ private int enmetode(){ return 15; //FEIL!!! Anbefalt metode for deklarasjon i JSP For å definere metoder må dette gjøres gjennom en JSP-deklarering. <%! int MinMetode() {return 7; %> Også variable kan deklareres på denne måte => objektvariabler Variabler bør i de aller fleste sammenhenger deklareres i en scriptlet. Husk livssyklusen til en servlet flere forespørsler til samme JSP kjører samme service()- metode på servlet en!

Oppsummering Vanlig JSP-kode legges i scriptlet <% out.println( hei du ); %> Uttrykk kan brukes til å skrive ut <%=.. %> For å lage metoder brukes deklarering <%! %> Brukes skjeldent. Ikke bruk denne uten at du er sikker på at du skal bruke den. Importering av klasser gjøres med direktivet import: < %@page import= java.io.* %> Ikke bland sammen de ulike typene. Avslutt en type før du begynner på neste. Altså ikke gjør slik <%.. <%=. %> %> Tomcat Vi skal bruke en web-tjener som heter Tomcat i dette faget. java-basert=> fungerer på alle plattformer Vi har på skolen en Tomcat-tjener som dere primært kan bruke. Se http://www.stud.aitel.hist.no:8080/index.html Du bør også prøve å installere Tomcat selv Gir mye bedre kontroll, da du selv kan styre web-tjeneren. Last ned fra faget hjemmeside eller jakarta.apache.org Installer på ditt eget hjemmeområde Se leksjon 1 for forklaring på hvordan dette gjøres. Merk at Tomcat krever at det settes en miljøvariabel som heter JAVA_HOME som peker på katalogen hvor java sdk er installert. ca. 9 MB