El método request.getRequestURI () devuelve URI con la ruta de contexto.
Por ejemplo, si la URL base de una aplicación es http://localhost:8080/myapp/
(es decir, la ruta de contexto es miaplicacion ), y llamar request.getRequestURI()
para http://localhost:8080/myapp/secure/users
, devolverá /myapp/secure/users
.
¿Hay alguna manera de que podamos obtener solo esta parte /secure/users
, es decir, el URI sin ruta de contexto?
Respuestas:
Si está dentro de un servlet de control frontal que está mapeado en un patrón de prefijo, entonces puede usarlo
HttpServletRequest#getPathInfo()
.Suponiendo que el servlet en su ejemplo está mapeado
/secure
, esto devolverá lo/users
que sería la información de interés exclusivo dentro de un servlet de controlador frontal típico.Sin embargo, si el servlet está mapeado en un patrón de sufijo (sus ejemplos de URL sin embargo no indican que este sea el caso), o cuando está realmente dentro de un filtro (cuando el servlet a invocar aún no está necesariamente determinado, entonces
getPathInfo()
podría volvernull
), entonces su mejor opción es substraer el URI de solicitud usted mismo en función de la longitud de la ruta de contexto utilizando elString
método habitual :fuente
getServletPath()
? Estoy escribiendo un filtro y noté quegetPathInfo()
devuelvenull
, perogetServletPath()
devuelve la ruta menos el contexto (adecuado para pasar al despachador de solicitudes).getPathInfo()
devuelve nulo si el servlet del controlador frontal no está asignado en un patrón de prefijo./foo.xhtml
lugar de/foo.jsf
) y no el URI de solicitud real (el que el usuario final vería en la barra de direcciones del navegador). La ruta del servlet original es en tal caso, sin embargo, resoluble como atributo de solicitud con claveRequestDispatcher.FORWARD_SERVLET_PATH
. De cualquier manera, la pregunta solicita explícitamente el URI de solicitud (como en la barra de direcciones del navegador), por lo que la respuesta se basa en eso.fuente
Con Spring puedes hacer:
fuente
getPathInfo () a veces devuelve nulo. En la documentación HttpServletRequest
Necesito obtener la ruta al archivo sin ruta de contexto en Filter y getPathInfo () me devuelve nulo. Entonces uso otro método: httpRequest.getServletPath ()
fuente
Si usa request.getPathInfo () dentro de un filtro, siempre parece ser nulo (al menos con jetty).
Este breve error inválido + respuesta alude al problema, creo:
https://issues.apache.org/bugzilla/show_bug.cgi?id=28323
Sospecho que está relacionado con el hecho de que los filtros se ejecutan antes de que el servlet reciba la solicitud. Puede ser un error de contenedor o un comportamiento esperado que no he podido identificar.
Sin embargo, contextPath está disponible, por lo que la solución fforws funciona incluso en filtros. No me gusta tener que hacerlo a mano, pero la implementación está rota o
fuente
Una forma de hacerlo es descansar la ruta de contexto del servidor desde el URI de la solicitud.
Lea aquí .
fuente
Puede ser que pueda usar el método de división para eliminar '/ myapp', por ejemplo:
fuente