2010-12-08 10 views
57

Estoy intentando escribir un filtro que pueda recuperar la URL de solicitud, pero no estoy seguro de cómo hacerlo.¿Cómo puedo obtener la URL de solicitud de un filtro de Java?

Esto es lo que tengo hasta ahora:

import javax.servlet.*; 
import javax.servlet.http.HttpServletRequest; 
import java.io.IOException; 

public class MyFilter implements Filter { 
    public void init(FilterConfig config) throws ServletException { } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     chain.doFilter(request, response); 

     String url = ((HttpServletRequest) request).getPathTranslated(); 
     System.out.println("Url: " + url); 
    } 

    public void destroy() { } 
} 

Cuando llegué a una página en mi servidor, la única salida que veo es "Url: nulo".

¿Cuál es la forma correcta de obtener la URL solicitada de un objeto ServletRequest determinado en un filtro?

Respuesta

127

Es esto lo que está buscando?

if (request instanceof HttpServletRequest) { 
String url = ((HttpServletRequest)request).getRequestURL().toString(); 
String queryString = ((HttpServletRequest)request).getQueryString(); 
} 

reconstruir:

System.out.println(url + "?" + queryString); 

Información sobre HttpServletRequest.getRequestURL() y HttpServletRequest.getQueryString().

+4

'getRequestURL()' devuelve 'StringBuffer', no' String'. – BalusC

+0

@BalusC, me di cuenta de que de los documentos, actualicé mi publicación. –

+1

Es mejor considerar el patrón de 'queryString' nulo. –

2
request.getRequestURL(); 
+1

ServletRequest no implementa getRequestURL(). Si es posible, debe convertirlo a HttpServletRequest según la respuesta de Buhake –

+0

faltando los parámetros –

1

Sobre la base de another answer on this page,

public static String getCurrentUrlFromRequest(ServletRequest request) 
{ 
    if (! (request instanceof HttpServletRequest)) 
     return null; 

    return getCurrentUrlFromRequest((HttpServletRequest)request); 
} 

public static String getCurrentUrlFromRequest(HttpServletRequest request) 
{ 
    StringBuffer requestURL = request.getRequestURL(); 
    String queryString = request.getQueryString(); 

    if (queryString == null) 
     return requestURL.toString(); 

    return requestURL.append('?').append(queryString).toString(); 
} 
Cuestiones relacionadas