Spring MVC 的底层是 servlet,因此在 Spring MVC 中也存在转发和重定向的概念。
使用 forward: 即可实现转发
转发至目的页面:forward:目的页面相对站点的路径
return "forward:WEB-INF/jsp/test.jsp";
转发至控制器:forward:控制器
return "forward:/restAdd/1/2";
处理器适配器在返回 ModelAndView 时默认使用转发方式
使用 redirect: 即可实现重定向
重定向至目的页面:redirect:目的页面相对站点的路径
return "redirect:index.jsp";
重定向至控制器:redirect:控制器
return "redirect:/restAdd/1/2";
重定向与转发不可使用 RestFul 风格直接在浏览器带参数进行访问
请求参数与被请求函数形参名称相同
http://localhost:8080/user/rec?name=why
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/rec")
public String rec(String name, Model model) {
System.out.println("name: " + name);
model.addAttribute("msg", "name: " + name);
return "test";
}
}
请求参数与被请求函数形参名称不同
http://localhost:8080/user/rec?username=why
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/rec")
public String rec(@RequestParam("username") String name, Model model) {
System.out.println("name: " + name);
model.addAttribute("msg", "name: " + name);
return "test";
}
}
被请求函数形参为对象
http://localhost:8080/user/recObj?id=1&name=why&age=1
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/recObj")
public String recObj(User user, Model model) {
System.out.println("user: " + user);
model.addAttribute("msg", "user: " + user);
return "test";
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private int age;
}
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","HelloSpringMVC!");
mv.setViewName("hello");
return mv;
}
}
@GetMapping("/recObj")
public String recObj(User user, Model model) {
System.out.println("user: " + user);
model.addAttribute("msg", "user: " + user);
return "test";
}
Model extends ModelMap extends LinkedHashMap
@GetMapping("/recObj")
public String recObj(User user, ModelMap model) {
System.out.println("user: " + user);
model.addAttribute("msg", "user: " + user);
return "test";
}