Java Avanc´
e - Cours 1
Plan
1 Recevoir et ´
emettre des donn´
ees simples 1
1.1 Comment r´ecup´erer une page Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Socket : l’objet qui permet de manipuler une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Que faire en cas d’erreur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Exemple d’exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5 Bien exploiter les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.6 Hi´erarchie des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 JDBC 3
2.1 Pr´esentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Se connecter `a la base de donn´ees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Envoyer une requˆete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Afficher les r´esultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.5 Lib´erer les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.6 Requˆetes r´ep´etitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 XML 5
3.1 But . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Rappel sur XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 Obtenir la racine du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.4 Informations sur un noeud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5 Informations sur la descendance d’un noeud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Exercices 8
La version ´electronique de ce cours est disponible `a l’URL http://www.derepas.com/java.
Un facteur cl´e de succ`es pour un langage actuel est de pouvoir r´eutiliser des librairies existantes, de pouvoir communiquer
avec des bases de donn´ees, ou d’autres programmes en train de s’ex´ecuter. Ce cours met en avant la communication sur internet
`a l’aide de Java.
1 Recevoir et ´
emettre des donn´
ees simples
Le but de cette partie est d’´ecrire un petit programme java qui va chercher une page donn´ee sur le Web.
1.1 Comment r´
ecup´
erer une page Web
Pour r´ecup´erer la page correspondant `a l’adresse http://www.yahoo.com, il faut suivant le protocole http:
se connecter sur le port 80 de la machine www.yahoo.com
envoyer la suite de caract`eres:
GET / HTTP/1.1
Host: www.yahoo.com:80
suivit d’une ligne vide.
Java avanc´
e - cours 1 1/8
1.2 Socket : l’objet qui permet de manipuler une connexion
L’objet Java qui permet de manipuler une connexion est java.net.Socket. Pour ouvrir une connexion sur le port 80 de la
machine www.yahoo.com, il faut initialiser la socket avec la s´equence :
Socket socket = new Socket ("www.yahoo.com", 80);
Pour envoyer des caract`eres on peut r´ecup´erer un objet de type java.io.PrintWriter:
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Chaine a envoyer");
1.3 Que faire en cas d’erreur ?
Quand on communique avec une autre machine beaucoup d’incidents peuvent se produire : la machine distante peut ˆetre ´eteinte
`a ce moment, le r´eseau peut ˆetre satur´e, la carte r´eseau peut tomber en panne.
Dans la documentation Java on remarque que le prototype du constructeur Socket est:
public Socket(InetAddress address, int port) throws java.io.IOException
la clause throws IOException signifie que la s´equence d’instruction:
Socket socket = new Socket ("www.yahoo.com", 80);
peut cr´eer une anomalie (exception en anglais) qui sera une instance de la class java.io.IOException.
1.4 Exemple d’exception
Les exception en Java ont le sens suivant:
Essaye la commande new Socket ... en cas d’erreur de type java.io.IOException alors fait telle ou
telle action.
La syntaxe utilis´ee est la suivante:
try {
Socket socket = new Socket ("www.yahoo.com", 80);
} catch (java.io.IOException e) {
// une erreur c’est produite, le signaler !
System.err.println("erreur de type I/O");
}
1.5 Bien exploiter les exceptions
Quand une exception de type java.io.IOExceptionest r´ecup´er´ee par une instruction catch on dispose de plusieurs infor-
mations qui peuvent ˆetre exploit´ees, principalement une description de l’erreur obtenue en invoquant la m´ethode getMessage
et l’endroit ou l’erreur s’est produite en invoquant printStackTrace.
Consid´erons le programme suivant:
class ServerError {
public static void essayeLaConnexion() {
try {
java.net.Socket socket =
new java.net.Socket ("www.serveurquinexistepas.com", 80);
} catch (java.io.IOException e) {
// une erreur c’est produite, le signaler !
System.err.println(e.getMessage());
e.printStackTrace();
}
}
public static void main(String[] args) {
essayeLaConnexion();
}
}
Java avanc´
e - cours 1 2/8
Son ex´ecution donne l’affichage suivant:
www.serveurquinexistepas.com
java.net.UnknownHostException: www.serveurquinexistepas.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:153)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:124)
at ServerError.essayeLaConnexion(ServerError.java:4)
at ServerError.main(ServerError.java:13)
Ceci nous permet tout de suite de savoir que l’erreur s’est produite `a la ligne 4 dans la m´ethode essayeLaConnexion qui
´etait appel´ee par main `a la ligne 13.
1.6 Hi´
erarchie des exceptions
Les exception ´etant des objets Java comme les autres, ils ont donc leur propre hi´erarchie d’h´eritage. En effet dans l’exemple
pr´ec´edent l’erreur lev´ee n’est pas java.io.IOException mais: java.net.UnknownHostException nous indiquant
que le serveur www.serveurquinexistepas.com n’existe pas.
La documentation Java nous donne la hi´erarchie suivante:
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.io.IOException
java.net.UnknownHostException
Ainsi le sens de la commande catch(IOException e) est : rattrape toute exception de type IOException ou d’un type
h´erit´e.
2 JDBC
2.1 Pr´
esentation
Au sein du syst`eme d’information d’une entreprise enorm´ement de donn´ees sont stok´ees. Elles le sont g´en´eralement sous forme
de base de donn´ees relationnelles.
Il existe ´egalement des bases de donn´ees objet, c’est `a dire o`u l’on peut directement charger des objets java de la base vers
l’application. Ce type base se d´eveloppe mais reste encore marginal au sein des syst`emes d’informations.
JDBC est l’interface java pour acc´eder aux bases de donn´ees relationnelles. Chaque base doit proposer son driver JDBC qui
permet d’y acc´eder. Quelque soit la base, le driver JDBC se manipule de la mˆeme mani`ere.
2.2 Se connecter `
a la base de donn´
ees
Nous prendrons l’exemple de mysql www.mysql.com une base de donn´ees open source r´epandue. Les drivers JDBC sont
t´el´echargeable `a l’url : http://dev.mysql.com/downloads/connector/j.
Pour se connecter `a la base il faut tout d’abord charger le driver fourni par Mysql.
Ceci s’effectue par le code suivant:
Class.forName("com.mysql.jdbc.Driver");
Pour obtenir une connexion sur la base il faut alors utiliser la class java.sql.DriverManager:
java.sql.Connection conn =
java.sql.DriverManager.getConnection
("jdbc:mysql://localhost/nomdemabase?user=monlogin&password=motdepasse");
La chıne de caract`eres apr`es jdbc:... est g´en´eralement assez d´ependante de la base de donn´ee, et n’est valable ici que pour
mysql. Ici on se connecte sur la machine locale (localhost), `a la base nomm´ee nomdemabase sous le nom monlogin
avec le mot de passe motdepasse ´ecrit en clair dans le fichier.
Java avanc´
e - cours 1 3/8
2.3 Envoyer une requˆ
ete
Une fois la connexion ´etablie on peut envoyer une requˆete `a la base comme indiqu´e ci-dessous :
java.sql.Statement stmt = conn.createStatement();
java.sql.ResultSet rs = stmt.executeQuery("SELECT host, user FROM user");
Ici la requˆete SQL effectu´ee est SELECT host, user FROM user. Bien entendu des exceptions SQL sont lev´ees si la
requˆete est incoh´erente.
Pour les mises `a jour dans une table on utilise la m´ethode executeUpdatene renvoyant rien `a la place de executeQuery.
Ce qui donne:
String updateString = "UPDATE matable " +
"SET monchamp = 32 " +
"WHERE id=’43’";
stmt.executeUpdate(updateString);
2.4 Afficher les r´
esultats
Pour afficher les r´esultats d’une requˆete il faut interroger l’objet ResultSet comme suit :
while (rs.next()) {
String h = rs.getString("host"); // recupere la valeur du champ host
String u = rs.getString("user"); // recupere la valeur du champ user
System.out.println(h+ " " + u); // affiche le resultat
}
2.5 Lib´
erer les ressources
Les actions pr´ec´edents ont conduit `a une communication avec la base et la r´eservation de ressources dans cette derni`ere. Il est
bon de lib´erer ces ressources en appelant les m´ethodes suivantes sur les objets cr´e´ees :
rs.close();
stmt.close();
Cependant si une exception survient, la proc´edure en cours est interrompue. Si l’on souhaite relacher quand mˆeme les ressources,
il faut utiliser la s´equence suivante:
try {
// code qui declenche une exception
...
} catch ( ... ) {
// actions en cas d’erreurs
...
} finally {
// actions a faire toujours en quittant le block try-catch
...
}
Ainsi dans le block finally on va trouver: rs.close() et stmt.close(). Cependant l’appel `a la m´ethode close pouvant
lever des exceptions, il faut elle mˆeme la mettre dans un block try-catch. La s´equence compl`ete est donc :
try {
...
} catch ( ... ) {
...
} finally {
// relacher les ressources dans l’ordre contraire d’allocation
if (rs != null) {
try {
rs.close();
Java avanc´
e - cours 1 4/8
} catch (SQLException sqlEx) {
// ignorer
}
rs = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) {
// ignorer
}
stmt = null;
}
}
2.6 Requˆ
etes r´
ep´
etitives
Dans le cas de requˆetesr´ep´etitives, il existe un objet sp´ecial qui permet de gagner en temps d’ex´ecution : java.sql.PreparedStatement.
Par exemple on souhaite effectuer de mani`ere r´ep´et´ee les insertions suivantes:
UPDATE matable SET monchamp = ? WHERE id=?
o`u les ?sont `a remplacer par plusieurs couples de valeurs.
PreparedStatement miseAjourTable = conn.prepareStatement(
"UPDATE matable SET monchamp = ? WHERE id=?");
Alors pour effectuer la requˆete SQL UPDATE matable SET monchamp = ’toto’ WHERE id=12, on peut ´ecrire:
miseAjourTable.setString(1, "toto");
miseAjourTable.setInt(2, 12);
miseAjourTable.executeUpdate():
Pour plus d’informations vous pouvez consulter l’url :
http://java.sun.com/docs/books/tutorial/jdbc/index.html
3 XML
3.1 But
Les fichiers XML sont tr`es souvent pr´esents. Ils peuvent permettre d’´echanger des donn´ees entre des applications, ou encore de
garder des donn´ees de configuration.
3.2 Rappel sur XML
Voici un rapide aperc¸u d’XML. Les fichiers Xml sont des fichiers ASCII commenc¸ant par (ici pour de un encodage UTF-8):
<?xml version="1.0" encoding="UTF-8"?>
On trouve ensuite une balise, nomm´ee racine, commenc¸ant le document (par exemple ici fichierdeconf est le nom de la
balise) :
<fichierdeconf id="1">
et la balise sym´etrique la la fin du document :
</fichierdeconf>
On remarque la pr´esence de l’attribut id="1".
Entre <fichierdeconf> et </fichierdeconf> on trouve toute une s´erie de balises. Toute balise <mabalise> doit
ˆetre ferm´ee par un balise </mabalise> correspondante. La balise d’entr´ee peut avoir des attributs:
Java avanc´
e - cours 1 5/8
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !