2I1070 Lektion 2
Servlets och
databaskopplingar
KTH-MI Peter Mozelius
Internetprogrammering
Tidigare på kursen 2I1049 har vi enbart sysslat
med fristående program där allt körs på en och
samma dator. I internetsammanhang kan det
istället se ut enligt:
 Treskiktsarkitektur
–
–
webbklient - webbserver - data
XHTML - Java servlets - databas
Klient-server med servlets
Java servlets
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

En liten enkel servlet
Vi ska nu titta på koden för en riktigt enkel
servlet som inte gör mer än att skriva ut
det vanliga Hello World !
Först behövs följande importsatser:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
En liten enkel servlet
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
En liten enkel servlet
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
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
Det finns en del smådetaljer som skiljer
Mer information finns på:
http://jakarta.apache.org/tomcat/
15 min paus!
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.html
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 i version5 servlet-api.jar OBS
I autoexec.bat för Win9X
I kontrollpanelen/miljövariabler för WinXP
Apache Tomcat

Två andra miljövariabler är:
JAVA_HOME
(Exempelvis:
C:\jdk1.5.x\)
och
CATALINA_HOME (Sökvägen
till Tomcat)
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\
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

Genom import 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
MySQL


MySQL har blivit enklare att installera och mer
lättanvänd i de senaste versionerna
MEN, allt är inte intuitivt och lättillgängligt
Information och stödprogram finns att hämta på:
http://dev.mysql.com/doc/
15 min paus!
Databaskoppling i Java

En databaskoppling kan ske enligt:
1.
2.
3.
4.
5.
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”);
} catch (ClassNotFoundException cnfe) {
out.println(”Det gick inte att ladda drivrutinen: "
+ 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://localho
st/uppg2d?user=rudolf&password=4477x2w32");
Etablera kopplingen

En liten databas finns någonstans på den
världsvida väven
Koppla dig dit enligt:
Connection connection =
DriverManager.getConnection(”
jdbc:mysql://server.adress.se/user=peter
&password=hemligt");
Exekvera en SQL-fråga

När det finns en koppling till databasen
går det sedan bra att köra SQL-frågan:
Statement stmt = connection.createStatement();
ResultSet resultSet =
stmt.executeQuery("SELECT * FROM studenter");
Bearbeta resultatet

Klassen ResultSet har två andvändbara
metoder:
–
–
next()
previous()
while ( resultSet.next() ){
out.println("<tr>");
out.println("<td>" + resultSet.getString(…
Koppla ner och stäng
Stäng ner det som öppnats:
out.close();
statement.close();
connection.close();
Vi tittar nu på ett litet kompendium som
sammanfattar det vi har gått igenom
Nästa års 2I1073

Vi kommer nästa år på kursen 2I1073 att
arbeta med bland annat:
–
–
–
–
Tomcat
MySQL
Java Servlets
HTML – XML – XHTML
Tack för i år!