Avoir une URL, comment récupérer sa partie chemin?
http://www.costo.com/test1/test2
Comment obtenir "test1/test2"
Vous voulez quelque chose comme ça:
String path = new URL("http://www.costo.com/test1/test2").getPath();
En fait, ça va vous donner /test1/test2
. Il vous suffira de supprimer le premier /
pour obtenir ce que vous voulez:
path = path.replaceFirst("/", "");
Maintenant, vous aurez test1/test2
dans path
.
J'avais des doutes sur les performances en utilisant la classe d'URL Java pour extraire simplement le chemin d'accès d'une URL et je pensais que c'était une surcharge.
Par conséquent, j’ai écrit trois méthodes, qui utilisent toutes une méthode différente pour extraire le chemin à partir d’une URL donnée.
Les trois méthodes sont appelées 1 000 fois pour une URL donnée.
Le résultat est:
#1 (getPathviaURL) took: 860ms
#2 (getPathViaRegex) took: 3763ms
#3 (getPathViaSplit) took: 1365ms
Code - n'hésitez pas à l'optimiser:
public static void main(String[] args) {
String Host = "http://stackoverflow.com/questions/5564998/how-to-get-the-path-of-a-url";
long start1 = System.currentTimeMillis();
int i = 0;
while (i < 1000000) {
getPathviaURL(Host);
i++;
}
long end1 = System.currentTimeMillis();
System.out.println("#1 (getPathviaURL) took: " + (end1 - start1) + "ms");
Pattern p = Pattern.compile("(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?");
long start2 = System.currentTimeMillis();
int i2 = 0;
while (i2 < 1000000) {
getPathViaRegex(Host, p);
i2++;
}
long end2 = System.currentTimeMillis();
System.out.println("#2 (getPathViaRegex) Took: " + (end2 - start2) + "ms");
long start3 = System.currentTimeMillis();
int i3 = 0;
while (i3 < 1000000) {
getPathViaSplit(Host);
i3++;
}
long end3 = System.currentTimeMillis();
System.out.println("#3 (getPathViaSplit) took: " + (end3 - start3) + "ms");
}
public static String getPathviaURL(String url) {
String path = null;
try {
path = new URL(url).getPath();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return path;
}
public static String getPathViaRegex(String url, Pattern p) {
Matcher m = p.matcher(url);
if (m.find()) {
return m.group(3);
}
return null;
}
public static String getPathViaSplit(String url) {
String[] parts = url.split("/");
parts = Arrays.copyOfRange(parts, 3, parts.length);
String joined = "/" + StringUtils.join(parts, "/");
return joined;
}
URL url = new URL("http://www.google.com/in/on");
System.out.println(url.getPath());
Voir aussi
utilisez la méthode URL.getPath()
de URL
class.
Tu peux le faire:
URL url = new URL("http://www.costo.com/test1/test2");
System.out.println(url.getPath());
Si vous voulez l'obtenir à partir de l'URL de votre application, par exemple, entrez http: // localhost: 8080/test1/test2/main.jsp . Utiliser peut utiliser
request.getRequestURI() //result will be like test1/test2