Classe URL Java
URL (Uniform Resource Locator) est l'abréviation de Uniform Resource Locator, utilisé pour localiser des ressources sur Internet. En Java,java.net.URLla classe fournit des fonctionnalités pour gérer les URL, permettant aux développeurs de créer des objets URL, d'analyser les composants d'URL et d'établir des connexions réseau.
Structure de base de la classe URL
Une URL standard se compose généralement des parties suivantes :
protocol://host:port/path?query#fragment
Par exemple :
https://www.example.com:8080/products?id=123#details
Composants principaux
- Protocole:https
- Hôte:www.example.com
- Port:8080
- Chemin:/products
- Paramètres de requête:id=123
- Fragment:details
Création d'objets URL
Java fournit plusieurs constructeurs pour créer des objets URL :
1. Utilisation d'une chaîne URL complète
Exemple
try {
URL url = new URL("https://www.example.com");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URL url = new URL("https://www.example.com");
} catch (MalformedURLException e) {
e.printStackTrace();
}
2. Spécification du protocole, de l'hôte et du fichier séparément
Exemple
try {
URL url = new URL("https", "www.example.com", "/index.html");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URL url = new URL("https", "www.example.com", "/index.html");
} catch (MalformedURLException e) {
e.printStackTrace();
}
3. Spécification du protocole, de l'hôte, du port et du fichier
Exemple
try {
URL url = new URL("https", "www.example.com", 8080, "/api/data");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URL url = new URL("https", "www.example.com", 8080, "/api/data");
} catch (MalformedURLException e) {
e.printStackTrace();
}
Méthodes courantes de la classe URL
Obtention des informations sur les composants d'URL
Exemple
URL url = new URL("https://www.example.com:8080/products?id=123#details");
System.out.println("Protocole : " + url.getProtocol()); // https
System.out.println("Hôte : " + url.getHost()); // www.example.com
System.out.println("Port : " + url.getPort()); // 8080
System.out.println("Chemin : " + url.getPath()); // /products
System.out.println("Requête : " + url.getQuery()); // id=123
System.out.println("Fragment : " + url.getRef()); // details
System.out.println("Protocole : " + url.getProtocol()); // https
System.out.println("Hôte : " + url.getHost()); // www.example.com
System.out.println("Port : " + url.getPort()); // 8080
System.out.println("Chemin : " + url.getPath()); // /products
System.out.println("Requête : " + url.getQuery()); // id=123
System.out.println("Fragment : " + url.getRef()); // details
Ouverture des connexions réseau
La classe URL fournit plusieurs méthodes pour ouvrir des connexions réseau :
- openConnection(): renvoie un objet URLConnection
- openStream(): ouvre un flux d'entrée pour lire des données
Exemple
// Utiliser openStream() pour lire le contenu d'une page web
try (InputStream in = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
try (InputStream in = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
Encodage et décodage d'URL
Dans les URL, certains caractères doivent être encodés (comme les espaces, les caractères chinois, etc.). Java fournit les classes URLEncoder et URLDecoder pour gérer l'encodage et le décodage.
Exemple d'encodage d'URL
Exemple
String query = "name=Zhang San&age=25";
String encodedQuery = URLEncoder.encode(query, "UTF-8");
System.out.println(encodedQuery); // Sortie : name%3D%E5%BC%A0%E4%B8%89%26age%3D25
String encodedQuery = URLEncoder.encode(query, "UTF-8");
System.out.println(encodedQuery); // Sortie : name%3D%E5%BC%A0%E4%B8%89%26age%3D25
Exemple de décodage d'URL
Exemple
String decodedQuery = URLDecoder.decode(encoded, "UTF-8");
System.out.println(decodedQuery); // Sortie : name=Zhang San&age=25
System.out.println(decodedQuery); // Sortie : name=Zhang San&age=25
Exemples d'applications pratiques
Exemple 1 : Téléchargement d'un fichier
Exemple
URL fileUrl = new URL("https://example.com/files/sample.pdf");
try (InputStream in = fileUrl.openStream();
FileOutputStream out = new FileOutputStream("sample.pdf")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
System.out.println("Téléchargement du fichier terminé");
} catch (IOException e) {
e.printStackTrace();
}
try (InputStream in = fileUrl.openStream();
FileOutputStream out = new FileOutputStream("sample.pdf")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
System.out.println("Téléchargement du fichier terminé");
} catch (IOException e) {
e.printStackTrace();
}
Exemple 2 : Appel d'une API REST
Exemple
URL apiUrl = new URL("https://api.example.com/data?param1=value1");
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(apiUrl.openStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
System.out.println("API Response: " + response.toString());
} catch (IOException e) {
e.printStackTrace();
}
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(apiUrl.openStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
System.out.println("API Response: " + response.toString());
} catch (IOException e) {
e.printStackTrace();
}
Notes
- Gestion des exceptions: Les constructeurs d'URL peuvent lever MalformedURLException, et les opérations réseau peuvent lever IOException
- Sécurité: Évitez de construire des URL à partir de sources non fiables
- Performance: Pour les requêtes réseau fréquentes, envisagez d'utiliser un pool de connexions
- Encodage: Assurez une gestion correcte de l'encodage des URL, en particulier lorsque des caractères non ASCII sont inclus