Cómo redirigir en Spring MVC
Los métodos de solicitud SpringMvc se dividen en reenvío y redirección, que se procesan en la capa del controlador utilizando las palabras clave reenviar y redireccionar.
El siguiente código implementa estos dos métodos de solicitud diferentes:
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.stereotype .Controller ; importar org.springframework.ui.Model; importar org.springframework.web.bind.annotation.RequestMapping; importar org.springframework.web.bind.annotation.RequestParam; ;
@Controllerpublic class HelloController {
/**
* Formulario de reenvío
* @param nombre
* @param model
* @return
*/
@RequestMapping("/helloForward") public String helloForward(@RequestParam(value= "nombre ", require=false, defaultValue="World2017") Nombre de cadena, Modelo modelo) {
model.addAttribute("name", name); return "hello";
}
@RequestMapping("/hola") public String hola() {
return "hola";
}
/* *
* Utilice la clase RedirectAttributes
* @param nombre
* @param redirigirAttributes
* @return
*/
@RequestMapping("/helloRedirect") public String helloRedirect(@RequestParam(value="name", require=false) Nombre de cadena, RedirectAttributes redirigirAttributes) {
redirigirAttributes.addFlashAttribute("nombre", nombre);
return "redirect:/hola";
}
@RequestMapping("/hola2") public String hola2(Modelo modelo, solicitud HttpServletRequest) {
HttpSession session = request.getSession();
model.a
ddAttribute("nombre", session.getAttribute("nombre")); return "hola";
}
/**
* Práctica convencional, Coloque los parámetros en la sesión antes de la redirección. En el controlador después de la redirección, saque los parámetros de la sesión y colóquelos en ModelAndView
* @param name
* @param request.
* @return
*/
@RequestMapping("/helloRedirect2") public String helloRedirect2(@RequestParam(value="nombre", requerido=false ) Nombre de cadena, solicitud HttpServletRequest) {
request.getSession().setAttribute("nombre", nombre);
return "redirect:/hello2";
}
}
El enlace URL solicitado cambia cuando se usa la redirección para la redirección y en el controlador, si es como recompensa?model.addAttribute("name", name ) no se puede obtener después de la redirección, por lo que la redirección requiere otra forma de transferir parámetros. El programa anterior introduce dos formas de transferir parámetros en la redirección:
① Coloque los parámetros en la sesión antes de la redirección. de la sesión y colóquelos en ModelAndView en el controlador después de la redirección
② Utilice la clase RedirectAttributes. Este método de implementación es relativamente simple.
Resumamos la diferencia entre reenviar request.getRequestDispatcher().forward() y redireccionar respuesta.sendRedirect() en servlet:
① El reenvío es una solicitud y una respuesta. son dos solicitudes y dos respuestas
②. Reenvío: servlet y jsp*** comparten una solicitud. Redirección: las dos solicitudes son independientes, por lo que cualquier setAttribute() en la solicitud anterior no se puede obtener en las siguientes. solicitudes
③. Reenvío: la barra de direcciones no cambiará, redirección: la barra de direcciones cambiará.