2009-07-30 6 views
1

Comment accéder à REQUEST_URI depuis une action Struts 2? En perl/php/ruby, il est facilement disponible via ENV ["REQUEST_URI"] et similaires. En Java, il semble que le PageContext.getErrorData(). GetRequestURI() soit ce que je recherche, mais malheureusement, le PageContext ne semble pas être défini dans l'action, soit parce que la redirection ErrorDocument fait que la requête ne ressemble pas à erreur, ou parce qu'elle est définie plus tard.Comment obtenir l'instruction REQUEST_URI d'origine dans une action Struts 2 obtenue via une redirection Apache ErrorDocument?

Un exemple particulier

Compte tenu d'une façade apache (mod_jk/AJP) 2 entretoises application sur tomcat atteint via la configuration ErrorDocument 404 dans apache. Avec les détails suivants:

- url demande originale (qui déclenche la 404) -

http://server/totally/bogus/path 

- http.conf -

ErrorDocument 404 /struts2app/lookup.action 

- action entretoises -

public String bogusUrlLookup() { 
    HttpServletRequest request = ServletActionContext.getRequest(); 

    // contains /lookup.action as does request.getRequestURI(); 
    String url = RequestUtils.getServletPath(request); 

    // PageContext is null, so I cannot reach ErrorData from it. 
    log.info("pageContext="+ServletActionContext.getPageContext()); 

    // Not in the ENV 
    // Map env = System.getenv(); 

    // Not in the ATTRIBUTES 
    // request.getAttributeNames() 

    // Not in HEADER 
    // request.getHeaderNames() 

    return ERROR; 
} 

Encore une fois tout ce dont j'ai besoin est la chaîne "/ total/bogus/path", mais dans l'action ci-dessus la seule chaîne d'URL que je peux trouver est "/ st ruts2app/lookup.action ". Je suis lié au ErrorDocument car le chemin total/bogus/ne doit pas se trouver dans l'espace de nom de mon application car Apache dessert d'autres ressources non-tomcat.

Répondre

1

request.getAttribute ("javax.servlet.forward.request_uri")

+0

Non. C'est nul dans ce contexte. – andynu

1

Utilisation:

JkEnvVar REDIRECT_URL "" 

dans votre fichier httpd.conf. Ensuite, utilisez request.getAttribute("REDIRECT_URL"); pour obtenir la variable dans votre jsp/servlets.

1
baseUri = (String)request.getAttribute("struts.request_uri"); 
0

Si vous ne voulez pas manquer la partie de la chaîne de requête, ce qui est mieux:

final String referrer = (String) request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI); 
if(referrer != null) { 
    final String query = (String) request.getAttribute(RequestDispatcher.FORWARD_QUERY_STRING); 
    if(query != null && query.length() > 0) { 
     url = referrer+ "?" + query; 
    } 
    else { 
     url = referrer; 
    } 
// do something 

} 
Questions connexes