33
2I1073 Föreläsning 2 KTH-MI Peter Mozelius Server, servlets och databaskopplingar

2I1073 Föreläsning 2

  • Upload
    madge

  • View
    39

  • Download
    0

Embed Size (px)

DESCRIPTION

2I1073 Föreläsning 2. Server, servlets och databaskopplingar. KTH-MI Peter Mozelius. Klient - server. I förra föreläsningen tittade vi en hel del på olika tekniker för klientsidan på Internet Nu går vi över till serversidan Treskiktsarkitektur webbklient - webbserver - data - PowerPoint PPT Presentation

Citation preview

Page 1: 2I1073 Föreläsning 2

2I1073 Föreläsning 2

KTH-MI Peter Mozelius

Server, servlets ochdatabaskopplingar

Page 2: 2I1073 Föreläsning 2

Klient - server

I förra föreläsningen tittade vi en hel del på olika tekniker för klientsidan på Internet

Nu går vi över till serversidan

Treskiktsarkitektur– webbklient - webbserver - data– XHTML - Java servlets - databas

Page 3: 2I1073 Föreläsning 2

Klient-server med servlets

Page 4: 2I1073 Föreläsning 2

Java servlets

Applets på serversidan Ett effektivt alternativ till äldre CGI-lösningar

CGI startar en ny process för varje nytt anrop Servlets startar bara en ny tråd

CGI avslutar processen efter anropet Servlets ligger kvar i minnet mellan anrop

Page 5: 2I1073 Föreläsning 2

Apache Tomcat

Det finns flera sätt att köra servlets Ett mycket vanligt sätt är m h a Tomcat Som alltid när det gäller Apacheprodukter

– helt fri att använda– öppen källkod

Följer servlet- och JSP-specifikatioerna Det sätt som vi kommer att använda MEN visst finns det kommersiella alternativ

Page 6: 2I1073 Föreläsning 2

Apache Tomcat

Det kommer hela tiden nya versioner Ni väljer själva genom uppvärmningsövning2

– ver 4– ver 5– ver 6

Men det finns tyvärr en del smådetaljer som skiljer

Page 7: 2I1073 Föreläsning 2

Apache Tomcat

Starta Tomcat: – startup.bat– startup.sh

Stoppa Tomcat: – shutdown.bat– shutdown.sh

Page 8: 2I1073 Föreläsning 2

Apache Tomcat

Anropa Tomcat genom:– http://127.0.0.1:8080/– http://localhost:8080/index.jsp

Page 9: 2I1073 Föreläsning 2

Apache Tomcat

Om du använder SDK standard edition Se till så att servlet.jar finns med i CLASSPATH Exempelvis: SET CLASSPATH= .;E:\tomcat\lib\servlet.jar

OBS jar-filen heter fr o m version5 servlet-api.jarservlet-api.jar

I Windows under kontrollpanelen/miljövariabler

Page 10: 2I1073 Föreläsning 2

Apache Tomcat

Om man vill använda JSP så är det också viktigt att sätta miljövariabeln:

JAVA_HOME (Exempelvis: C:\jdk.16.x)

TOMCAT_HOME heter fr om version 4

CATALINA_HOME

Page 11: 2I1073 Föreläsning 2

Tomcats konfigurationsfiler

Tomcat har många konfigurationsfilerTvå av dem är: web.xml

– mappning av servletsservlets– CATALINA_HOME\webapps\miwebb\WEB-INF\

server.xml– Mappning av servlet contextservlet context– CATALINA_HOME\conf\

PAUS 15 min

Page 12: 2I1073 Föreläsning 2

Servletanrop

När servern får ett anrop från en servlet startas en ny tråd där service-metoden kollar vilken typ av HTTP-förfrågan det rör sig om:– GET– POST– HEAD– TRACE– PUT– DELETE

Page 13: 2I1073 Föreläsning 2

Servletanrop

service kallar sedan på en passande metod:– doGet()– doPost()– [ doHead() ]– doTrace()– doPut()– doDelete()

Page 14: 2I1073 Föreläsning 2

GET och POST

I 99% så handlar det om GET och POST GET

– tänkt för att hämta saker från servern– jobbar med URL + frågesträng– vissa servrar klipper av frågesträngen efter x tecken

POST– skickar data till servern utan att klienten ser– passar bättre för stora mängder data– säkrare än GET

Page 15: 2I1073 Föreläsning 2

doGet() och doPost()

När du behöver bägge metoderna i en servlet så kan de med fördel kombineras enligt:

public void doGet(HttpServletRequest request, HttpServletResponse response) { Här finns koden som gör jobbet; } public void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request, response); }

Page 16: 2I1073 Föreläsning 2

HttpServletRequest

Ett sätt att få tag i viktig information HTTP Request = klientens förfrågan

Läs innehållet i Request HeaderRequest Header genom:– request.getHeader()– request.getHeaderNames()– request.getContentType()– request.getContentLength()

Page 17: 2I1073 Föreläsning 2

HttpServletRequest

Andra användbara metoder är:– request.getMethod()– request.getProtocol()– request.getRequestURI()– request.getParameter()– request.getCookies()

Mera om kakor om en liten stund

Page 18: 2I1073 Föreläsning 2

HttpServletResponse

HTTP Response = serverns svar Här finns metoder som t ex

– response.addCookie() //lägg till en kaka

MEN den metod som vi mest ska använda är:response.getWriter()

Öppnar en PrintWriterPrintWriter som kan skriva ut det vi vill ha som svar till klienten.

Page 19: 2I1073 Föreläsning 2

Cookies

Med kakor så kan besökarnas individuella önskemål registreras och kommas ihåg

En vanlig MEN omdiskuterad teknik I en del webbläsare är kakfunktionen avstängd

Cookies är inte en del av HTTP utan en bit data som kan bäddas in i en request | response

Från början en Netscape extensionNetscape extension

Page 20: 2I1073 Föreläsning 2

Cookies

Cookies finns i ett flertal språk I Java finns

– javax.servlet.http.Cookie

Cookie kaka = new Cookie(name, value);

allaSessionensKakor = request.getCookies()

PAUS 15 min

Page 21: 2I1073 Föreläsning 2

ODBC - JDBC

Open Data Base Connectivity Microsoftstandard för databaskopplingar

JDBC framtagen av Javasoft Motsvarigheten för koppplingar från Java

En huvudpoäng är interoperabilitetinteroperabilitet

Page 22: 2I1073 Föreläsning 2

JDBC

Gemensamt API Olika drivrutiner

Page 23: 2I1073 Föreläsning 2

java.sql

Genom import java.sql.*; så får ni tillgång till klasser för metadatametadata:

ResultSet resultSet = statement.executeQuery(”SELECT …”);

ResultSetMetaData metaData = resultSet.getMetaData();

Page 24: 2I1073 Föreläsning 2

MySQL

En på Internet mycket vanlig relationsdatabas Finns både i kommersiella och gratisversioner Liten, snabb och stabil Det finns andra mer avancerade databaser

Page 25: 2I1073 Föreläsning 2

Databaskoppling i Java

En databaskoppling kan ske enligt:

1. Registrera JDBC-drivrutinen2. Etablera kontakten med databasen3. Exekvera en SQL-fråga4. Bearbeta resultatet av SQL-frågan5. Koppla ner och stäng

Page 26: 2I1073 Föreläsning 2

Registrera drivrutinen

Innan JDBC-drivrutinen kan användas så ska den registreras i stil med:

try{ Class.forName("org.gjt.mm.mysql.Driver").newInstance(); } catch (ClassNotFoundException cnfe) {

out.println("Couldn’t load database driver: "

+ cnfe.getMessage());

}

(En JDBC-drivrutin är en javaklass nåbar via CLASSPATH)

Page 27: 2I1073 Föreläsning 2

Etablera kopplingen

När drivrutinen är laddad går det sedan bra att upprätta en koppling till MySQL genom:

jdbc:mysql://SERVER/DATABASE_NAME

Vilket i en koppling lokalt till den egna datorn kan se ut enligt: Connection connection =

DriverManager.getConnection(”jdbc:mysql://localhost/uppg2d?user=rudolf&password=4477x2w32");

Page 28: 2I1073 Föreläsning 2

Etablera kopplingen

En liten KI-databas ligger nåbar via: Andromeda.dsv.su.se

Koppla dig dit enligt: Connection connection =

DriverManager.getConnection(” jdbc:mysql://Andromeda.dsv.su.se/kilabuser=****

&password=********");

Page 29: 2I1073 Föreläsning 2

Exekvera en SQL-fråga

När det finns en koppling till databasen så går det sedan bra att köra SQL-frågan:

Statement stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery(

"SELECT * FROM studenter");

Page 30: 2I1073 Föreläsning 2

Bearbeta resultatet

Klassen ResultSet har två användbara metoder:– next()– previous()

while ( resultSet.next() ){

out.println("<tr>"); out.println("<td>"+resultSet.getString(…

Page 31: 2I1073 Föreläsning 2

Koppla ner och stäng

out.close();

statement.close();

connection.close();

Mer information finns inne i First Class i 2I1073/MySQL där Ken har lagt upp det ni behöver för Uppgift2d och projektet

Page 32: 2I1073 Föreläsning 2

Java Web Start

Ett sätt att starta javaapplikationer på serversidan via en webbläsare:

Applikationen packas i en jar-fil Tillsammans med en manifest-fil (som vi gjorde på 2I1049 förra året)

Startas genom en JNLP-fil– <jar href="u2e.jar"/>

JNLP-filen länkas in från ett XHTML-dokument

Page 33: 2I1073 Föreläsning 2

Java Web Start

En enkel JNLP-fil återfinns på: http://dsv.su.se/~miwebb

/examination/labbar/Del2/u2e/u2e.txt

Gör sedan den frivilliga Uppgift2ehttp://dsv.su.se/~miwebb/examination/labbar/Del2/u2e/uppgift2e.htm

Tack för idag!