Exempel. Lektion 4. Innehåll. Fördefinierade variabler. PageContext. Java Server Pages (JSP) DD2483 Enterprise Java 6 hp

Relevanta dokument
Exempel. Föreläsning 6. Innehåll. Fördefinierade variabler. PageContext. Java Server Pages (JSP) DD2390 Internetprogrammering 6 hp

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

Klientprogrammering mot databaser

F8 Webbteknologier 1. Dynamiska webbsidor

2I1070 Lektion 2 Servlets och databaskopplingar Internetprogrammering 2I1049 Treskiktsarkitektur Klient-server med servlets

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

F9 Webbteknologier 1. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

Högskolan Dalarna sid 1 av 5 DI-institutionen Hans-Edy Mårtensson Sten Sundin

INTRODUKTION TILL JDBC

Uniform Resource Locator (URL) JavaServer Pages - JSP. Webbklienter. Webbserver. Hypertext Transfer Protocol (HTTP) HTTP Request

Internationalisering/lokalisering på webben

FÖRSLAG TILL LÖSNINGAR, TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2, , kl

Servlets y JSP Fernando Berzal,

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

De ska vara möjligt att separera kod med olika utvecklingsbehov. Det ska vara enkelt att gå från en web-centrerad design till en komponentbaserad

Föreläsning 4. Innehåll. Java EE 7 subapi. Java EE. Java EE. DD2390 Internetprogrammering 6 hp

FÖ 07 - JDBC Åtkomst till databaser från applikationer med Java - exempelkod -

Namn: (Ifylles av student) Personnummer: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Allmänna anvisningar: Skriv dina svar på svarsblanketten (se nästa sida) Markera och ange alla svar tydligt och entydigt efter instruktionerna.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Tentamen Nätverksprogrammering Lösningsförslag

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

ASP.NET Thomas Mejtoft

ADO.NET Murach Kapitel 17-20

DB, DATA, LOGIC, EXPOSURE (WEB)

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Laboration 1 - Grunderna för OOP i Java

DAT043 - föreläsning 8

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

Sample exam questions. Database exam TIG058

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Björn Persson. Komponenter med J2EE. Del 1

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Webbtjänster med API er

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Vad ska ni göra? ProgramvaruUtveckling för Stora System. Kravförvirring. 9 frågor till prefekten. Christin Lindholm

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Webbservrar, severskript & webbproduktion

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Laboration 5 - Biblioteksapplikation

DAT043 Objektorienterad Programmering

Exemple på Tentauppgifter Webbprogrammering

Objektsamlingar i Java

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Enterprise Java Beans Assignment 1

F10 Webbteknologier. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

JAVASCRIPT. Beteende

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Webbsidor och webbservrar

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Tentamen OOP

PROV. 13 JSP Standard Tag Library

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Classpath. Class loading + resurser. Class loader. jar-filer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

ASP.NET MVC. Copyright Mahmud Al Hakim Innehåll

Language Integrated Query, LINQ, och databaser

Lektion 5 HTML, CSS, PHP och MySQL

DAT043 - Föreläsning 7

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Arrayer. results

Föreläsning 2. Länkad lista och iterator

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Föreläsning 2. Länkad lista och iterator

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Transkript:

Lektion 4 <head><title>hälsning</title></head> <h2>välkomstprogram</h2> <form action="exempel1.jsp"> <p>vad heter du? <input type=text name="namn"> <p><input type=submit value="skicka"> </form> <head><title>hälsning</title></head> <body> <center> <h2>hej =request.getparameter("namn")!!!</h2> </center> </body> DD2483 Enterprise Java 6 hp Innehåll Java Server Pages (JSP 2.1) Java DataBase Connectivity (JDBC 4.0) Java Naming and Directory Interface (JNDI 1.2) Fördefinierade variabler request (HTTPServletRequest) response (HTTPServletResponse) out (PrintWriter) session (HTTPSession) application (ServletContext) pagecontext (PageContext) Java Server Pages (JSP) Består av tre delar Inbäddad jsp-kod JavaBeans Taggbibliotek (JSTL) En jsp-sida är en html-sida med inbäddad javakod som har.jsp suffix. Den inbäddade koden separeras från html med speciella taggar jsp-kod Man har tillgång till hela javas klassbibliotek Vid runtime översätts hela jsp-sidan om till en servlet och kompileras, detta sker första gången sidan anropas, därefter anropas servlet:en. Nackdel: Många olika JSP-motorer innebär icke standardiserade felmeddelanden (inget radnummer vanligt) PageContext pagecontext.getout(); pagecontext.getrequest(); pagecontext.getresponse(); getservletcontext() (=application scope) getsession() (=session scope) från JspContext findattribute(); getattribute(); removeattribute(); setattribute();

JSP-syntax Direktiv Deklarationer Scriptlets Fördefinierade variabler JSP syntax -Scriptlets Scriptlets används till att exekvera javakodblock på syntax java kod Vilken syntaxriktig javakod som helst! JSP-syntax - Direktiv Placeras i början av JSP-filen. @ include file= filnamn" Inkluderar den angivna sidan utan att den exekveras @ page errorpage= html/jsp filnamn" Returnerar den definierade sidan om ett fel inträffar i JSP-koden : @ page errorpage= error.html @ page import= package name(s) Definierar paketen som ska importeras för koden : @ page import= java.io.*,java.util.* Skillnaden mellan! och Sidglobala varibler kan och bör deklareras inom!... taggar dvs:! String s1 = hej ; <HR> = s1 Då JSP-sidor kompileras om till servlets blir kod inom deklarationer till instansvariabler/instansmetoder Scriptlets till lokal kod i doget, dopost etc. JSP syntax - Deklarationer Deklarationer är till för att definiera instansvariabler och instansmetoder, hela jspsidan kan betraktas som ett objekt. Placeras innanför! taggar <head><title> 2</title></head> <body> <center>! public int utfall; public void kasta(){ utfall = 1 + (int)(math.random()*6); <h2>tärningskast</h2> kasta(); Tärningens utfall: =utfall <form><input type=submit value="kasta"></form> </center> </body>

<head><title> 2</title></head> <body> <center>! class Dice { public int utfall; public void kasta(){ utfall = 1 + (int)(math.random()*6); <h2>tärningskast</h2> Dice d = new Dice(); d.kasta(); Tärningens utfall: =d.utfall <form><input type=submit value="kasta"></form> </center> </body> package bean; public class DiceBean{ private int utfall; public DiceBean(){ public void kasta(){ utfall = 1 + (int)(math.random()*6); public int getutfall(){ return utfall; JavaBeans Hitills har vi adderat jsp-kod till html-sidorna vilket har några nackdelar: det blir snabbt oöverskådligt och svårt att felsöka webbdesignern måste kunna Java Man önskar separera presentation (html) från logik(t e x jsp) vilket kan åstadkommas med s k javabeans. En JavaBean är identiskt med en vanlig javaklass men följer JavaBean designmönster: public konstruktor utan argument publika set och get metoder för att sätta/läsa egenskaper <head><title> 4</title></head> <body> <center> <jsp:usebean class="bean.dicebean" id="db" scope="session"/> db.kasta(); <h2>tärningskast</h2> Tärningens utfall: <p><img src="<jsp:getproperty name="db" property="utfall">.gif"> <form><input type=submit value="kasta"></form> </center> </body> Fördefinierade JavaBean taggar jsp:usebean tag används för att referera till en javabean på en JSPsida, syntax: <jsp:usebean id = valbart namn att referera till bönan scope = page request session application class = namnet på.classfilen /> scope (räckvidd): page/request: bönan är sidglobal session: Om bönan är skapad återanvänds den, om inte skapas den och sparas i HTTP-sessionsobjektet application: webbserverns livscykel För att sätta en egenskap används setproperty <jsp:setproperty name= tidigare valt namn att referera till bönan" property= instansvariabel *"> För att läsa en egenskap används getpropery <jsp:getproperty name="tidigare valt namn att referera till bönan" property= instansvariabel(oftast)"> : JSP/JavaBean @ page import="java.util.arraylist" <jsp:usebean class="bean.forum" id="forum" scope="application"/> <jsp:usebean class="bean.user" id="user" scope="session"/> <jsp:usebean class="bean.post" id="post" scope="request"/> <jsp:setproperty name="forum" property="*"/> <jsp:setproperty name="user" property="*"/> <jsp:setproperty name="post" property="*"/> if(session.isnew()){ <h1>ny session!</h1> <form> Nickname<input type="text" name="nickname"><br> Email<input type="text" name="email"> <input type="submit"></form> if(request.getparameter("email")!=null){ <h1>ny användare</h1> <form> Text: <input type="text" name="text"> <input type="submit"></form>

: JSP/JavaBean Typer if(request.getparameter("text")!=null){ <h1>nytt inlägg</h1> post.setnickname(user.getnickname()); forum.addpost(post); ArrayList posts = forum.getposts(); for(int i = 0; i < posts.size(); i++){ post = (bean.post)posts.get(i); <b>=post.gettext()</b><br> <i>=post.getnickname()</i><br> <form> Text: <input type="text" name="text"> <input type="submit"></form> javax.sql.datasource Vanlig simpel Identisk med DriverManager javax.sql.connectionpooldatasource Stödjer Connection pooling javax.sql.xadatasource Distribuerad och stödjer Connection pooling JDBC Ett API för att kommunicera med databaser från javaapplikationer JDBC API:t är en del av JDK som arbetar mot den databasdrivrutin som finns konfigurerad sedan tidigare Typer av drivrutiner SimpleDataSource ConnectionPoolDataSource XADataSource Använd inte DriverManager.getConnection() utan slå upp datakällan via JNDI. Relevanta paket: java.sql javax.sql JDBC Arkitekturen Java applikation Skapad av Java utvecklaren Alla anrop till databasen enligt JDBC API:t JDBC API Tillhandahållen av JavaSoft Fungerar som länk mellan applikationen och drivrutinen JDBC drivrutinen Tillhandahållen av DB företaget eller tredje part Konverterar JDBC kod till DB specifika databaskommandon javax.sql.datasource JDBC-drivrutiner, typer En abstraktion av DB-drivrutinen, liknande DriverManager men erhåller en referens till DBdrivrutinen via JNDI, p s s slipper man DBspecifik kod. Datasource är ett Interface och implementeras av Driverförsäljaren, finns tre kategorier av dessa Man får normalt tag på ett Datasource objekt genom en JNDI-uppslagning. Är en abstraktion av drivrutinen som placeras under tomcat/lib och konfigureras i tomcat/conf/context.xml

JDBC - klasserna Dessa tre klasser är viktigast att känna till i JDBC: Connection Statement (PreparedStatement) ResultSet Java Naming and Directory Interface(JNDI) För att distribuerade applikationers komponenter skall kunna hitta varandra behövs någon tjänst som hjälper till med detta, en s k namngivningstjänst (Naming Service) JNDI mappar namn mot objekt (jämför med DNS). JNDI är ett interface som är beroende av en underliggande implementation t.ex. LDAP för att fungera JNDI använder ett fåtal objekt, främst Context & InitialContext Ett Context objekt har metoder för att binda namn till objekt, lista existerande namn, ta bort och döpa om DatabasURL:er URL:en bidrar med nödvändig information Signalerar att det är en DB-URL Identifierar databasens sub-protokoll Lokaliserar databasen javax.naming.initalcontext root-context som kan innehålla objekt och andra Context Startpunkten för en JNDI-uppslagning Generell syntax jdbc : <driverns sub-protokoll> : <db sökvägen> på DatabasURL:er ODBC Datakälla jdbc:odbc:test PostgreSQL Databas jdbc:postgresql://pgsql0.nada.kth.se:5432/stene mysql datakälla (egen db) jdbc:mysql://localhost:3306/test mysql datakälla (nada) jdbc:mysql://mysql-vt2010.csc.kth.se:3306/stene Titta i tomcat/conf/context.xml javax.naming.context Viktigaste metoder: void bind(string stringname, Object object) void unbind(string name) void rebind(string name, Object obj) void rename(string oldname, String newname) Object lookup(string stringname) NamingEnumeration list(string name) NamingEnumeration listbindings(string name)

package bean; import java.util.arraylist; import java.sql.*; import javax.naming.*; import javax.sql.*; public class ForumDB{ private Connection conn; : JDBC public ForumDB(){ Context initctx = new InitialContext(); Context envctx = (Context) initctx.lookup("java:comp/env"); DataSource ds = (DataSource)envCtx.lookup("jdbc/db"); Connection conn = ds.getconnection(); catch(namingexception e){ : JDBC public ArrayList getposts(){ ArrayList list = new ArrayList(); Statement stmt = conn.createstatement(); ResultSet rs = null; String query = "select * from posts"; rs = stmt.executequery(query); while(rs.next()){ Post p = new Post(); p.settext(rs.getstring("text")); p.setnickname(rs.getstring("nickname")); list.add(p); return list; : JDBC public void close(){ conn.close(); public void addpost(post p){ Statement stmt = null; ResultSet rs = null; String query = null; int id = 0; stmt = conn.createstatement(); rs = null; query = "select max(id)+1 as id from posts"; rs = stmt.executequery(query); if(rs.next()) id = rs.getint("id"); rs.close(); : JDBC query = "insert into posts values(?,?,?)"; PreparedStatement pstmt = conn.preparestatement(query); pstmt.setint(1,id); pstmt.setstring(2,p.gettext()); pstmt.setstring(3,p.getnickname()); int tupler = pstmt.executeupdate();