Descripción general
Este artículo se centrará en implementar redireccionamientos en la primavera y discutir las razones detrás de cada estrategia.
¿Por qué redirigir?
Primero consideremos por qué es posible que deba hacer una redirección en su aplicación de primavera.
Por supuesto, hay muchos ejemplos y razones posibles. Uno simple podría ser los datos de la forma posterior, alrededor de la doble envío del problema o simplemente delegar el flujo de ejecución a otro método del controlador.
Una cosa a tener en cuenta es que el patrón típico de post/redirección/get no resuelve adecuadamente el problema de confirmación dual: el problema de actualizar la página antes de que se complete la confirmación inicial aún puede dar lugar a una confirmación dual.
Redirigir usando redirectView
Comencemos con este simple método: tomemos un ejemplo directamente:
Detrás de RedirectView disparará httpservletResponse.sendedirect (): esto realizará la redirección real.
Tenga en cuenta cómo inyectamos propiedades redirigidas en el método aquí: el marco hace esta parte del trabajo pesado, lo que nos permite interactuar con estas propiedades.
Agregamos el atributo al modelo redirectatTributes: exponerlo como un parámetro de consulta HTTP. El modelo contiene objetos, generalmente cadenas u objetos que se pueden convertir en cadenas.
Ahora probemos nuestra función de redirección: use un comando curl simple para ayudarlo:
El resultado será:
Redirigir usando la redirección: prefijo
El método anterior utiliza RedirectView, porque no es óptimo por algunas razones.
Primero, ahora estamos acoplados a la API de primavera porque usamos redirectView directamente en nuestro código.
En segundo lugar, necesitamos saber desde el principio que al implementar la operación del controlador, sus resultados siempre serán redirigidos, pero este no siempre es el caso.
Una mejor opción es usar la redirección: prefijo: el nombre de la vista de redirección se inyecta en el controlador como otros nombres de vista lógicas. El controlador ni siquiera sabe que la redirección está sucediendo.
Se parece a esto:
Cuando el nombre de la vista se devuelve con redirección:, la clase URLBasedViewResolver (y todas sus subclases) lo reconoce como una indicación especial que debe ser redirigida. El resto del nombre de la vista será tratado como una URL de redirección.
Aquí hay un lugar para tener en cuenta: cuando usamos la Vista lógica de redirección:/rediredurl aquí, estamos haciendo una redirección relacionada con el contexto de servlet actual.
Si necesita redirigir a una URL absoluta, podemos usar un nombre como este: Redirección: http: // localhost: 8080/spring-redirect/redirectionUrl.
Entonces, ahora, cuando ejecutamos el comando curl:
Obtendremos una redirección inmediatamente:
Reenviar con prefijo hacia adelante
Veamos ahora cómo hacer algo ligeramente diferente: un reenvío.
Antes de mirar el código, echemos un vistazo a un resumen rápido y de alto nivel de la semántica de reenvío y redirección:
La redirección responderá con una nueva URL que contiene el código de respuesta 302 y el encabezado de ubicación; Luego, el navegador/cliente hará una solicitud a la nueva URL nuevamente reenviar completamente en el lado del servidor; El contenedor Servlet reenvía la misma solicitud a la URL de destino; la URL en el navegador no necesita ser cambiado
Ahora echemos un vistazo al código:
Como redirección:, el delantero: el prefijo será analizado por URLBasedViewResolver y sus subclases. Internamente, esto crea un internereurceView que realiza una operación requestdispatcher.forward () para la nueva vista.
Cuando ejecutamos el comando con curl:
Obtendremos HTTP 405 (método no permitido):
En este caso, solo tenemos una solicitud enviada desde el navegador/cliente al lado del servidor en comparación con las dos solicitudes que tenemos en la solución de redirección. Por supuesto, las propiedades agregadas por redireccionamientos no son necesarias.
Propiedades que contienen redirectattributes
A continuación, veamos las propiedades de aprobación en una redirección, aproveche redirectattribures en el marco:
Como se mencionó anteriormente, podemos insertar objetos de propiedad directamente en el método, lo que hace que el mecanismo sea muy fácil de usar.
También tenga en cuenta que también agregamos un atributo flash: esta es una propiedad que no se agregará a la URL. Podemos lograr esta propiedad: luego podemos usar @modelattribute ("flashattribute") en el método de destino final redirigido para acceder al atributo flash:
Entonces, complete con éxito: si necesita usar Curl para probar la función:
Seremos redirigidos a la nueva ubicación:
De esta manera, el uso de redirectattribures en lugar de modelmap nos brinda la capacidad de compartir algunas propiedades solo entre los dos métodos involucrados en la operación de redirección.
Otra configuración sin prefijos
Ahora exploremos otra configuración: redirección sin prefijos.
Para lograr esto, necesitamos usar org.springframework.web.servlet.view.xmlviewResolver:
En lugar de org.springframework.web.servlet.view.internalResourceViewResolver que utilizamos en nuestra configuración anterior:
También necesitamos definir un bean redirectView en la configuración:
Ahora podemos referirnos a este nuevo frijol a través de la identificación para activar la redirección:
Para probarlo, usamos el comando curl nuevamente:
El resultado será:
Redirigir la solicitud de solicitud de publicación HTTP
Para casos de uso como pagos bancarios, es posible que necesitemos redirigir las solicitudes de publicación HTTP. Dependiendo del código de estado HTTP devuelto, la solicitud de publicación se puede redirigir a HTTP Get o Post.
De acuerdo con la referencia del protocolo HTTP 1.1, los códigos de estado 301 (eliminados permanentemente) y 302 (encontrado) permiten que el método de solicitud se cambie de publicación para obtener. La especificación también define los códigos de estado 307 relevantes (redirección temporal) y 308 (redirección permanente) que no permiten cambiar el método de solicitud de publicación para obtener.
Ahora echemos un vistazo al código para redirigir la solicitud de publicación a otra solicitud de publicación:
Ahora, usemos el comando curl para probar la publicación redirigida:
Estamos siendo redirigidos a la dirección de destino:
en conclusión
Este artículo presenta tres formas diferentes de implementar redireccionamientos en la primavera, cómo manejar/pasar atributos al realizar estas redirecciones y cómo manejar las redirecciones de las solicitudes de publicación HTTP.
Lo anterior es la Guía de Redirección VSPRING (redirección) y problemas de estrategia relacionados que le presentó el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!