O método request.getRequestURI () retorna URI com o caminho do contexto.
Por exemplo, se o URL base de uma aplicação é http://localhost:8080/myapp/
(ou seja, o caminho do contexto é myapp ), e eu chamo request.getRequestURI()
para http://localhost:8080/myapp/secure/users
, ele irá retornar /myapp/secure/users
.
Existe alguma maneira de obter apenas essa parte /secure/users
, ou seja, o URI sem caminho de contexto?
Respostas:
Se você estiver dentro de um servlet de contoller frontal mapeado em um padrão de prefixo, poderá usar
HttpServletRequest#getPathInfo()
.Supondo que o servlet no seu exemplo esteja mapeado
/secure
, isso retornará/users
as informações de interesse único dentro de um servlet de controlador frontal típico.Se, no entanto, o servlet estiver mapeado em um padrão de sufixo (seus exemplos de URL não indicam que esse é o caso), ou quando você estiver realmente dentro de um filtro (quando o servlet a ser chamado ainda não estiver necessariamente determinado ainda, então
getPathInfo()
pode retornarnull
), então sua melhor aposta é substring o URI da solicitação com base no comprimento do caminho de contexto usando oString
método usual :fonte
getServletPath()
? Estou escrevendo um filtro e notei quegetPathInfo()
retornanull
, masgetServletPath()
retorna o caminho menos o contexto (adequado para passar para o distribuidor de solicitações).getPathInfo()
retorna nulo se o servlet do controlador frontal não estiver mapeado em um padrão de prefixo./foo.xhtml
vez de/foo.jsf
) e não o URI real da solicitação (aquele que o usuário final veria na barra de endereços do navegador). O caminho do servlet original é, nesse caso, no entanto resolvível como atributo de solicitação com chaveRequestDispatcher.FORWARD_SERVLET_PATH
. De qualquer forma, a pergunta solicita explicitamente o URI da solicitação (como na barra de endereços do navegador), portanto a resposta é baseada nisso.fonte
Com o Spring, você pode:
fonte
Às vezes, getPathInfo () retorna nulo. Na documentação HttpServletRequest
Preciso obter o caminho para o arquivo sem o caminho de contexto no Filter e getPathInfo () me retorna nulo. Então, eu uso outro método: httpRequest.getServletPath ()
fonte
Se você usar request.getPathInfo () dentro de um filtro, sempre parecerá nulo (pelo menos com o jetty).
Este erro + resposta concisa alude ao problema que penso:
https://issues.apache.org/bugzilla/show_bug.cgi?id=28323
Suspeito que esteja relacionado ao fato de os filtros serem executados antes do servlet receber a solicitação. Pode ser um bug do contêiner ou comportamento esperado que não consegui identificar.
O contextPath está disponível, portanto, a solução fforws funciona mesmo em filtros. Não gosto de fazer isso manualmente, mas a implementação está interrompida ou
fonte
Uma maneira de fazer isso é repousar o caminho de contexto da servelet do URI da solicitação.
Leia aqui .
fonte
Pode ser que você possa usar o método split para eliminar o '/ myapp', por exemplo:
fonte