Eu tenho um HttpServletRequest
objeto
Como obtenho o URL exato e completo que fez com que essa chamada chegasse ao meu servlet?
Ou pelo menos com a maior precisão possível, pois talvez haja coisas que possam ser regeneradas (a ordem dos parâmetros, talvez).
Respostas:
O
HttpServletRequest
possui os seguintes métodos:getRequestURL()
- retorna a parte do URL completo antes do caractere separador da cadeia de caracteres de consulta?
getQueryString()
- retorna a parte do URL completo após o caractere separador de cadeia de consulta?
Portanto, para obter o URL completo, basta:
fonte
Eu uso este método:
fonte
url
é declarada, instanciada e usada apenas dentro do método, portanto, não pode ser acessada por encadeamentos diferentes daquele que chamou o método.StringBuffer
para cada chamada e não a compartilha com outros encadeamentos. Isso deve ser alterado para ser aStringBuilder
.getRequestURI
?fonte
StringBuffer
.Em um projeto Spring, você pode usar
fonte
new ServletServerHttpRequest(request).getURI()
HttpUtil sendo preterido, este é o método correto
fonte
Combinando os resultados de
getRequestURL()
egetQueryString()
você deve obter o resultado desejado.fonte
Você pode usar filtro.
Não se esqueça de colocar
<dispatcher>FORWARD</dispatcher>
no mapeamento de filtros no web.xmlfonte
Use os seguintes métodos no objeto HttpServletRequest
java.lang.String getRequestURI () -Retorna a parte da URL desta solicitação do nome do protocolo até a string de consulta na primeira linha da solicitação HTTP.
java.lang.StringBuffer getRequestURL () -Reconstrói a URL que o cliente usou para fazer a solicitação.
java.lang.String getQueryString () -Retorna a string de consulta que está contida na URL de solicitação após o caminho.
fonte
Um pouco tarde para a festa, mas incluí isso na minha biblioteca MarkUtils-Web no WebUtils - aprovado pelo Checkstyle e testado pelo JUnit:
Provavelmente a resposta mais rápida e robusta aqui até agora, atrás da de Mat Banik - mas mesmo a dele não responde por possíveis configurações de portas não padrão com HTTP / HTTPS.
Veja também:
fonte
É possível escrever um liner simples com um ternário e se você usar o padrão de construtor do StringBuffer em
.getRequestURL()
:Mas isso é apenas açúcar sintático.
fonte