2010-12-08 32 views
57

J'essaye d'écrire un filtre qui peut récupérer l'URL de demande, mais je ne suis pas sûr de savoir comment le faire.Comment puis-je obtenir l'URL de la requête à partir d'un filtre Java?

Voici ce que j'ai jusqu'à présent:

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() { } 
} 

Quand je frappe une page sur mon serveur, la seule sortie que je vois est « Url: null ».

Quelle est la manière correcte d'obtenir l'URL demandée à partir d'un objet ServletRequest donné dans un filtre?

Répondre

127

Est-ce que vous cherchez?

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

Pour RECONSTRUIRE:

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

Infos sur HttpServletRequest.getRequestURL() et HttpServletRequest.getQueryString().

+4

'getRequestURL()' renvoie 'StringBuffer', pas' String'. – BalusC

+0

@BalusC, je l'ai réalisé à partir des docs, j'ai mis à jour mon post. –

+1

Il est préférable de considérer le modèle de null 'queryString'. –

2
request.getRequestURL(); 
+1

ServletRequest ne met pas en œuvre getRequestURL(). Vous devez le convertir en HttpServletRequest si possible selon la réponse de Buhake –

+0

ses paramètres manquants –

1

bâtiment sur 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(); 
}