330 likes | 469 Views
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
E N D
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 • XHTML - Java servlets - databas
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
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
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
Apache Tomcat • Starta Tomcat: • startup.bat • startup.sh • Stoppa Tomcat: • shutdown.bat • shutdown.sh
Apache Tomcat • Anropa Tomcat genom: • http://127.0.0.1:8080/ • http://localhost:8080/index.jsp
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.jar I Windows under kontrollpanelen/miljövariabler
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 omversion 4 • CATALINA_HOME
Tomcats konfigurationsfiler Tomcat har många konfigurationsfiler Två av dem är: • web.xml • mappning av servlets • CATALINA_HOME\webapps\miwebb\WEB-INF\ • server.xml • Mappning av servlet context • CATALINA_HOME\conf\ PAUS 15 min
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
Servletanrop • service kallar sedan på en passande metod: • doGet() • doPost() • [ doHead() ] • doTrace() • doPut() • doDelete()
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
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); • }
HttpServletRequest • Ett sätt att få tag i viktig information • HTTP Request = klientens förfrågan • Läs innehållet i Request Header genom: • request.getHeader() • request.getHeaderNames() • request.getContentType() • request.getContentLength()
HttpServletRequest • Andra användbara metoder är: • request.getMethod() • request.getProtocol() • request.getRequestURI() • request.getParameter() • request.getCookies() • Mera om kakor om en liten stund
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 enPrintWriter som kan skriva ut det vi vill ha som svar till klienten.
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 extension
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
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 interoperabilitet
JDBC Gemensamt API Olika drivrutiner
java.sql • Genomimport java.sql.*; så får ni tillgång till klasser för metadata: ResultSet resultSet = statement.executeQuery(”SELECT …”); ResultSetMetaData metaData = resultSet.getMetaData();
MySQL En på Internet mycket vanlig relationsdatabas Finns både i kommersiella och gratisversioner Liten, snabb och stabil Det finns andra mer avancerade databaser
Databaskoppling i Java • En databaskoppling kan ske enligt: • Registrera JDBC-drivrutinen • Etablera kontakten med databasen • Exekvera en SQL-fråga • Bearbeta resultatet av SQL-frågan • Koppla ner och stäng
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)
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");
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=********");
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: Statementstmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery( "SELECT * FROM studenter");
Bearbeta resultatet • Klassen ResultSet har två användbara metoder: • next() • previous() while ( resultSet.next() ){ out.println("<tr>"); out.println("<td>"+resultSet.getString(…
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
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
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 Uppgift2e http://dsv.su.se/~miwebb/examination/labbar/Del2/u2e/uppgift2e.htm Tack för idag!