¿La clase de configuración de sesión se puede obtener en springmvc, pero no en otro lugar?
El primer método: pasar HttpSession como parámetro del método Spring MVC y obtenerlo directamente.
Pase los parámetros directamente en el método Spring MVC:
public void getSessionAction(HttpSession session){
}
Mucha gente No se recomienda su uso, pero en una prueba simple se descubrió que aún se puede usar, pero no funciona. Muchos artículos no indican las razones exactas de esta recomendación.
Segundo: usar HttpServletRequest como parámetro del método de Spring MVC y obtenerlo indirectamente
Primero obtenemos la solicitud y luego obtenemos la sesión indirectamente a través de la solicitud. siguiente:
public void getSessionAction(solicitud HttpServletRequest){
HttpSession session = request.getSession();
}
Un uso común método, pero algunas personas encontrarán este método más problemático, porque necesita pasar un parámetro cada vez que usa la sesión (qué vago es), por lo que hay un tercer método
El tercer método : a través de @Autowired Solicitud HttpServletRequest Obtener sesión
Este método es similar al método cuando inyectamos la clase de servicio. A primera vista, rechacé este método. A primera vista, rechacé este enfoque, porque todos sabemos que los servlets usan subprocesos múltiples singleton de forma predeterminada para manejar solicitudes de múltiples usuarios. ¿Sería inseguro si se escribiera directamente como una variable global? Pero aquí, basado en las anotaciones de Spring, básicamente se puede garantizar la seguridad de los subprocesos. Pero para ser honesto, todavía no estoy seguro, así que busqué información en línea y finalmente eché un vistazo al código fuente de esta parte de la primavera (lo discutiré en detalle con usted en otro artículo) y finalmente descubrió que es completamente factible.
Cuarto: use la clase RequestContextHolder para obtener la solicitud e indirectamente obtener la sesión
Al usar la clase RequestContextHolder, podemos obtener la solicitud directamente en la solicitud sin pasar HttpServletRequest. En uso general, lo encapsularemos como un método de herramienta para su uso:
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
Tenga en cuenta que la mayoría de Un enfoque eficaz es utilizar la clase RequestContextHolder.
p>
Tenga en cuenta que la razón específica para la conversión forzada a ServletRequestAttributes se puede encontrar en el código fuente (un poco sin sentido. El principio general es que hay dos ThreadLocals en la clase RequestContextHolder para guardar solicitudes). el hilo actual. La solicitud actual se obtendrá cada vez que se llame a getRequestAttributes (). La solicitud no se pasará cuando se llame al método springmvc. Si observa el código fuente, puede ver que está en un método ProcessRequest (solicitud HttpServletRequest, respuesta HttpServletResponse). Cada vez que se usen doget() y dopost(), este método en el artículo se usará para nuestra solicitud. respuesta.
La quinta forma es usar @SessionAttributes
Esta no es una forma de obtener la sesión directamente, pero es una forma de poner los valores que queremos en la sesión.