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
1
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>");
2
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!
3
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 servletservlet-api.jar OBS
I autoexec.bat för Win9X
I kontrollpanelen/miljövariabler för WinXP
4
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
5
JDBC
Gemensamt API
Olika drivrutiner
java.sql
Genom import java.sql.*; så får ni
tillgång till klasser för metadata:
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
6
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)
7
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");
8
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!
9