java - servlet - setattribute jsp
Spring: ¿cómo puedo inyectar un HttpServletRequest en un bean con ámbito de solicitud? (2)
Estoy tratando de configurar un frijol con alcance de solicitud en primavera.
Lo configuré con éxito, por lo que el bean se crea una vez por solicitud. Ahora, necesita acceder al objeto HttpServletRequest.
Como el bean se crea una vez por solicitud, creo que el contenedor puede inyectar fácilmente el objeto de solicitud en mi bean. Cómo puedo hacer eso ?
Los beans con alcance de solicitud se pueden autoconectar con el objeto de solicitud.
private @Autowired HttpServletRequest request;
Spring expone el objeto HttpServletRequest
actual (así como el objeto HttpSession
actual) a través de un objeto contenedor de tipo ServletRequestAttributes
. Este objeto contenedor está vinculado a ThreadLocal y se obtiene llamando al método static
RequestContextHolder.currentRequestAttributes()
.
ServletRequestAttributes
proporciona el método getRequest()
para obtener la solicitud actual, getSession()
para obtener la sesión actual y otros métodos para obtener los atributos almacenados en ambos ámbitos. El siguiente código, aunque un poco feo, debe obtener el objeto de solicitud actual en cualquier lugar de la aplicación:
HttpServletRequest curRequest =
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();
Tenga en cuenta que el método RequestContextHolder.currentRequestAttributes()
devuelve una interfaz y debe ServletRequestAttributes
en ServletRequestAttributes
que implementa la interfaz.
Spring Javadoc: RequestContextHolder | ServletRequestAttributes