Java Server Pages.

Vergelijkbare documenten
Applicatie-Architecturen

Dynamische webapplicaties in Java

What is the advantage of using expression language instead of JSP scriptlets and JSP expressions?

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

INFITT01 Internettechnologie WEEK 2

Kleine cursus PHP5. Auteur: Raymond Moesker

INFITT01 - Internettechnologie WEEK 8

Les 3. Gebruik in volledige programma Default argumenten Vergelijken van objecten

Technisch Ontwerp W e b s i t e W O S I

4 ASP.NET MVC. 4.1 Controllers

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Modelleren en Programmeren

IMP Uitwerking week 13

Programmeren in Java les 3

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Javascript oefenblad 1

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Object Oriented Programming

ASRemote WebService. Via deze webservice kunt u:

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

JSF webapplicatie performance

Overerving & Polymorfisme

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Open SQL Server Management Studio en log in als Administator. Je ziet dan wat je in figuur 2.1 ziet.

Databanken en webtoepassingen in Java

Vakgroep CW KAHO Sint-Lieven

ASP.NET Test Jan Van Ryckeghem

Zelftest Programmeren in Java

Programmeren in C# Klassen schrijven

Een fragment wordt afgeleid van de basis klasse "Fragment".

Les 2 Eenvoudige queries

Inleiding C++ Coding Conventions

Datastructuren Werkcollege Intro

Voorbeeld: Simulatie van bewegende deeltjes

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Tentamen Imperatief Programmeren

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Unit testen van EJB's. Koert Zeilstra - iprofs

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

Ingebouwde klassen & methodes

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Zelftest Java EE Architectuur

Java. Basissyllabus. Egon Pas

NAAM: Programmeren 1 Examen 29/08/2012

OEFENINGEN PYTHON REEKS 1

Scala. Korte introductie. Sylvia Stuurman

Inhoud. VBA Excel 2010

Modelleren en Programmeren

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Java Programma structuur

Modelleren en Programmeren

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

NHibernate als ORM oplossing

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Modelleren en Programmeren

Aanleveren van te verzenden sms berichten aan SMS Via

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Dit kan gebruikt worden in zowel een ASP.NET web applicatie als een desktop applicatie.

Modelleren en Programmeren

Objectgericht programmeren 1.

Introductie in C++ Jan van Rijn. September 2013

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Zelftest Inleiding Programmeren


Javascript deel 3. Document Object Model Objecten

Dynamische Websites. Week 6. vrijdag 25 oktober 13

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Inhoud. Pagina 2 van 13

Abstracte klassen & Interfaces

NAAM: Programmeren 1 Examen 21/01/2011

VBA voor Doe het Zelvers deel 20

Lab Webdesign: Javascript 3 maart 2008

OEFENINGEN PYTHON REEKS 1

Programmeren in Java 3

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Abstraheren van modellen

Transcriptie:

Java Server Pages joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn/

Motivatie Maken van View! Dynamische pagina! HTML! (Beetje) code! Gebruiksvriendelijk formaat

Servlet Unified expression language JavaServer Pages Standard Tag Library JavaServer Pages JavaServer Faces Java Servlet

Levenscyclus Bij eerste request voor blad.jsp: Via XML ontwerper ontwerp <% %> blad.jsp vertaling compilatie laden en initialiseren servlet blad jsp.java blad jsp.class blad jsp servlet Servlet Netbeans: right-click + view servlet

JSP syntax import...;! public class index_jsp extends... {... public void _jspservice(...) {...! } } out.print(...);... Directieven <%@... %> Scriptlets <%... %> Expressies <%=... %> Declaraties <%!... %>

Directieven <%@page import= model. %> <%@page contenttype= text/html %> <%@page pageencoding= UTF 8 %>

Expressies <p> Dit is het! <%= Teller.getTeller() %>e bezoek.! </p> = <p> Dit is het! <% out.print(teller.getteller()); %>e bezoek.! </p>

Voorbeeldje teller1.jsp

Gedeelde geheugen setattribute( naam, object) & getattribute( naam ) Servlet JSP App getservletcontext() application Sessie getsession() session Req request request Pagina lokale variabele pagecontext

Voorbeeld BierExpertWeb

Java Beans en EL

Java Bean Java klasse volgens bepaalde conventies! Constructor zonder argumenten! Voor eigenschap Klasse att naar keuze:! Getter: public Klasse getatt() {... }! Setter: public void setatt(klasse a) {... }

package!boeken;! public class Boek {!!!!! } private String titel;! private String auteur ;! public Boek() { }! Bijvoorbeeld public String gettitel () { return titel ; }! public void settitel(string titel) { this.titel = titel; }! public String getauteur ()! {return auteur; }! public void setauteur(string auteur) { this.auteur = auteur; }!

Gebruik in JSP <jsp:usebean! id= eenboek! class= boeken.boek! scope= session /> boeken.boek eenboek = getsession().getattribute( eenboek );! if (eenboek == null) {! eenboek = new boeken.boek();! getsession().setattribute( eenboek, eenboek);! }

Gebruik in JSP <jsp:setproperty! name= eenboek! property= titel! value= De Avonden /> <jsp:getproperty! name= eenboek! property= titel />! eenboek.settitel( De Avonden ); eenboek.gettitel();

Initializatie van bean <jsp:usebean id= eenboek class= boeken.boek! scope= session >! <jsp:setproperty id= eenboek property= titel! value= De Avonden />! </jsp:usebean> boeken.boek eenboek = getsession().getattribute( eenboek );! if (eenboek == null) {! eenboek = new boeken.boek();! eenboek.settitel( De Avonden );! getsession().setattribute( eenboek, eenboek);! teller2.java }

Alternatief Unified expression language! ${...} (JSP)! #{...} (JSF)! Toegang tot gegevens in Java Beans! Oproepen van methodes! Uitvoeren van bewerkingen

Verwijzen naar objecten ${boon} Proberen getattribute( boon ) in! Page scope! Request scope! Session scope! Application scope

Impliciete objecten param! paramvalues! header! headervalues! cookie! initparam! pagecontext Map param.naam param[ naam ] paramvalues[ naam ][0] request.getparameter( naam );

. en [] Met foo.bar! Java Bean property! Waarde voor een sleutel in Map! Hetzelfde als foo[ bar ]! Met foo[int] ook Array! Naar wens nesten

Let op! Impliciete objecten van JSP <> impliciete objecten van EL! JSP: request, response, session, application, pagecontext! EL: param, paramvalues, header, headervalues, cookie, initparam, pagecontext! Toegang tot JSP impliciete objecten via pagecontext

Let op! ${pagecontext.request}! ${pagecontext.response}! ${pagecontext.session}! ${pagecontext.servletcontext} = application

Gedeelde geheugen pagescope! ${iets} Map requestscope! sessionscope! applicationscope Oplossen van name clashes! requestscope[ iets.persoon ].naam ipv iets.persoon.naam

Operatoren rekenkundig: +, -, *, / en div, % en mod, endeunaire-; logisch: and, &&, or,, not,!; relationeel: eq, ==, ne,!=, lt, <, gt, >, le, <=, ge, >=; conditioneel: A? B : C,hierbijwordtB of C geevalueerd afhankelijk van resultaat van de evaluatie van A; de empty prefix-operator bepaalt of een waarde null of leeg is.

Voorbeelden EL expr res ${1 > (4/2)} false ${4.0 >= 3} true ${100.0 == 100} true ${ a < b } true ${ hip gt hit } false ${(10 10) ne 100} false ${3 div4} 0.75 ${10 mod 4} 2 ${1.2E4 + 1.4} 12001.4

Functies oproepen Static functies uit java klasse package model ; public class Dobbelstener { public static int werpsteen () { return ( int) ( (6 Math. random ( ) ) + 1 ) ; } }

Functies oproepen <%@ t a g l i b p r e f i x = d o b u r i = D o b b e l s t e e n F u n c t i e s %> <html> <body> <p> Aantal ogen : ${dob : werpen ()} </p> </body> </html> <taglib... > <uri>dobbelsteenfuncties</uri> <function> <name> werpen </name> <function class> model. DobbelStener</function class> <function signature> int werpsteen () </function signature> </function> </taglib>

Voorbeeld index.jsp

Code herbruik fragment <jsp:include page= ander.jspf />! <jsp:include page= ander.jspf > <jsp:param name= extra value= nog /> </jsp:include>! <jsp:forward page= ander.jsp />

Fouten <%@ p a g e e r r o r P a g e= e r r o r P a g e. j s p %> <html><body> <p> Het volgende gaat verkeerd aflopen : <% int x = 10/0; %> </p> </body></html> Als code exception gooit, wordt er naar errorpage.jsp gegaan

Fouten <%@ p a g e i s E r r o r P a g e = t r u e %> <html><body> <p> Er i s een fout opgetreden. Controleer uw invoerparameters. </p> </body> </html> Toegang tot exception object: <%@ p a g e i s E r r o r P a g e = t r u e %> <html> <body> <p> Fout ${ pagecontext. exception} is opgetreden op de server. Controleer uw invoer parameters. </p> </body> </html>

Alternatief <error page> <exception type>java. lang. ArithmeticException </exception type> <location>/rekenfout. jsp </location> </error page> <error page> <exception type>java. lang.throwable </exception type> <location>/errorpage. jsp </location> </error page> <error page> <error code>404</error code> <location>/nietgevonden. jsp </location> </error page>

JSTL

Motivatie JSP: hutsepotje van HTML en Java! Beter <jsp:getproperty name= eenboek property= titel /> dan <%= eenboek.gettitel() %>! Meer mogelijk maken zonder Java code

Taglib Verzameling tags! Die bepaalde functionaliteit aanbieden! Beschikbaar via taglib declaratie <%@ taglib uri= http://java.sun.com/jsp/jstl/core prefix= c %>

Overzicht area subfunctie prefix uri core variabele c http://java.sun.com/jsp/jstl/core flow control URL beheer xml basis x http://java.sun.com/jsp/jstl/xml flow control transformatie I18N locale fmt http://java.sun.com/jsp/jstl/fmt formattering databank SQL sql http://java.sun.com/jsp/jstl/sql functie collectie lengte fn http://java.sun.com/jsp/jstl/functions string bewerking

core library Variabelen manipuleren! Controlflow! URL management! Varia

Variabelen <c:set var= boeknr scope= session value= ${param.nummer} />! Default: page <c:remove var= boeknr scope= session />! <c:set!target= ${persoon} property= naam > ${iets.naam} </c : set>

Control flow <c:if test= ${!empty param.nummer} > <c:set var= boeknr scope= session value= $param.nummer /> <p>boek met nummer ${boeknr} is toegevoegd. </p> </c:if>! Maar geen else

Control flow <c:choose> <c:when test= ${param.cat == trial } > <h2>proberen </h2></c:when> <c:when test= ${param.cat == lid } > <h2>leden </h2>!</c:when> <c:otherwise> <h2>gasten</h2></c:otherwise> </c:choose>

Control flow Map, Collection, array,... <c:foreach var= movie items= ${filmlijst} > <tr> <td> ${movie} </td> </tr> </c:foreach>

URL management Doet zonodig herschrijving <c:url var= flip value= /verwerk.do > <c:param name= voornaam value= ${voor} /> <c:param name= nanaam value= ${na}!/> </c:url>! <a href= ${flip} Klik hier </a>

Varia <c:catch>! <c:out value= ${naam} default= niemand espacexml= true /> VB: viewtags.jsp

SQL Normaal: EJBs! Voor rapid prototyping: sql tags! <sql:query var= boeken > select from PUBLIC.boeken where id =? <sql :param value= ${bid} /> </sql : query>

Resultaat public interface Result { public String [] getcolumnnames(); public int!getrowcount(); public Map[] getrows(); public Object[][] getrowsbyindex() ; public boolean!islimitedbymaxrows () ; }

Bijvoorbeeld <sql:query var= boeken > select from PUBLIC.boeken where id =? <sql:param value= ${bid} /> </sql:query>! <ul> <c:foreach var= bk items= ${boeken.rows} > <li> ${bk.titel} </li> </c:foreach>! </ul>

Netbeans Services -> Databases! New -> Glassfish -> JDBC resource! Resultaat in glassfish-resources.xml en (na restart) in Services! Toevoegen aan web.xml (tab resources) VB: viewtagssql.jsp

SQL - andere <sql:update var= boeken sql= update PUBLIC.boeken set inv = inv? where id =? > <sql :param value= ${hoeveelheid} /> <sql :param value= ${bid} /> </sql : update>! <transaction> voor transacties

Lokalizering <jsp:usebean id= nu class= java.util.date />! <p>standaard : <fmt:formatdate value= ${nu} type= date datestyle= full />! <p>spaans : <fmt:setlocale value= es /> <fmt:formatdate value= ${nu} type= date datestyle= full />

Function <c:if test= ${fn:length(param.gebruiker) > 0} > Functies om bewerkingen met strings te doen: touppercase, tolowercase substring, substringafter, substringbefore trim, resplace indexof, startswith, endswith contains, containsignorecase split, join