parse net example ejemplo java url relative-url

net - url java 8



Construyendo una URL absoluta a partir de una URL relativa en Java (4)

Este código funcionará en Linux , solo puede combinar la ruta . Si desea más, el constructor de URI podría ser útil.

URL baseUrl = new URL("http://example.com/first"); URL targetUrl = new URL(baseUrl, Paths.get(baseUrl.getPath(), "second", "/third", "//fourth//", "fifth").toString());

Si la ruta contiene algo que necesita escapar, use URLEncoder.encode para escapar de él al principio.

URL baseUrl = new URL("http://example.com/first"); URL targetUrl = new URL(baseUrl, Paths.get(baseUrl.getPath(), URLEncoder.encode(relativePath, StandardCharsets.UTF_8), URLEncoder.encode(filename, StandardCharsets.UTF_8)).toString());

ejemplo:

import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { try { URL baseUrl = new URL("http://example.com/first"); Path relativePath = Paths.get(baseUrl.getPath(), "second", "/third", "//fourth//", "fifth"); URL targetUrl = new URL(baseUrl, relativePath.toString()); System.out.println(targetUrl.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } } }

salida

http://example.com/first/second/third/fourth/fifth

baseUrl.getPath() son muy importantes, no lo olvides.

un mal ejemplo:

import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { try { URL baseUrl = new URL("http://example.com/first"); Path relativePath = Paths.get("second", "/third", "//fourth//", "fifth"); URL targetUrl = new URL(baseUrl, relativePath.toString()); System.out.println(targetUrl.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } } }

salida

http://example.com/second/third/fourth/fifth

Hemos perdido nuestro /first en baseurl.

Tengo problemas para crear una URL absoluta a partir de una URL relativa sin tener que recurrir a String hackery ...

Dado

http://localhost:8080/myWebApp/someServlet

Dentro del método:

public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }

¿Cuál es la forma más "correcta" de construir:

http://localhost:8080/myWebApp/someImage.jpg

(Nota, debe ser absoluta, no relativa)

Actualmente, lo estoy haciendo a través de la construcción de la cadena, pero DEBE haber una mejor manera.

He visto varias combinaciones de nuevos URI / URL, y termino con

http://localhost:8080/someImage.jpg

Ayuda muy apreciada


Parece que ya te diste cuenta de la parte difícil, que es en qué host estás ejecutando. El resto es fácil,

String url = host + request.getContextPath() + "/someImage.jpg";

Debería darte lo que necesitas.


Qué tal si:

String s = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/someImage.jpg";


Utilizando java.net.URL

URL baseUrl = new URL("http://www.google.com/someFolder/"); URL url = new URL(baseUrl, "../test.html");