3、SpringMVC跳转方式
3.1 ModelAndView
- 这只ModelAndView对象,根据view的名称,和视图解析器跳转到指定页面
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
对应的Controller类
public class ControllerTest1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//返回一个模型视图对象
ModelAndView mv = new ModelAndView();
mv.addObject("msg","ControllerTest1");
mv.setViewName("test");
return mv;
}
}
3.2 ServletAPI
- 在SpringMVC的Controller中仍然可以获取到 HttpServletRequest, HttpServletResponse
3.3 重定向和转发
@Controller
public class ForwardRedictController {
@RequestMapping("forward")
public String forwardTest(HttpServletRequest req, HttpServletResponse resp, Model model){
HttpSession session = req.getSession();
model.addAttribute("msg", session.getId());
return "forward:/WEB-INF/jsp/hello.jsp";
}
@RequestMapping("redirect")
public String redirectTest(Model model){
model.addAttribute("msg", "重定向来的");
// 如果已经存在和RequestMapping("hello")就会跳转到另一个链接,而不是hello.jsp
return "redirect:hello";
}
}
4、参数传递
- 数据提交: 使用@RequestParam(“name”) 来指定参数的传递(选用)
- 可以提交对象: 提交的表单域和对象的属性名一致即可(test3)
- ModelMap的方式也可以传递数据(test3)
@Controller
@RequestMapping("/model")
public class ModelController {
@RequestMapping("/test1")
public String model1(@RequestParam("name") String name, Model model){
model.addAttribute("msg", "Model返回传递参数");
return "hello";
}
@RequestMapping("/test2")
public String model2(Model model){
model.addAttribute("msg", "返回传递参数");
return "hello";
}
@RequestMapping("/test3")
public String model3(User user, ModelMap modelMap){
modelMap.addAttribute("name", user.getName());
modelMap.addAttribute("id", user.getId());
return "hello";
}
}
- Model、ModelMap、ModelAndView
- Model继承字ModelMap,只有几个方法存储数据,简化了新手对于Model的操作和理解
- ModelMap 继承了 LinkedMap, 除了实现自身的方法,也继承了LinkedMap的方法和特性
- ModelAndView 可以在存储数据的同时,进行设置返回的逻辑视图