一、向页面传值
响应跳转,如何绑定参数
第一种:原生方式
@RequestMapping("/form5")
public void form5(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{
req.setAttribute("message5", "tom");
req.getRequestDispatcher("/jsp/model2.jsp").forward(req, resp);
}
第二种:ModelAndView方式
//使用ModelAndView对象
@RequestMapping("/form6")
public ModelAndView form6(){
ModelAndView mv = new ModelAndView();
mv.addObject("message6", "jack");
mv.setViewName("/jsp/model2.jsp");
return mv;
}
第三种:使用Model对象
//使用Model对象 -- 【掌握】
@RequestMapping("/form7")
public String form7(Model model){
model.addAttribute("message7", "james");
return "/jsp/model2.jsp";
}
注意:
在SpringMvc中默认跳转方式是转发:默认转发 ,因为1.可以共享request中的数据 2.可以转发到WEB-INF 3.效率要高一些
这三种方式,数据默认都是绑定在request中
二、视图解析器
实际项目中通常会把返回数据统一交给视图解析器做处理
解析视图和数据的配置了视图解析器之后,不管返回什么样的值都会默认自动经过视图解析器
配置如下:
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀prefix:会自动在返回值前面加个上/ -->
<property name="prefix" value="/"></property>
<!-- 前缀suffix:会自动在返回值后面加个上.jsp -->
<property name="suffix" value=".jsp"></property>
</bean>
三、跳转方式
区别:
转发:一次请求,可以共享request的数据,地址栏不会变化,不可以转到外部应用
重定向:多此请求,不可以共享request的数据,地址栏会变,可以定向到外部应用
SpringMvc中的转发和重定向写法:
转发:
- 默认转发:会经过视图解析器
@RequestMapping("form6")
//默认转发,会经过视图解析器。
public ModelAndView getResp5(){
ModelAndView m=new ModelAndView();
m.addObject("message6", "ModelAndView");
m.setViewName("jsp/model2");
return m;
}
2.显示转发:forward:xxx
不会经过视图解析器,一般不用。
@RequestMapping("form6")
//显示转发forward,不会经过视图解析器。一般不会使用
public ModelAndView getResp3(){
ModelAndView m=new ModelAndView();
m.addObject("message6", "ModelAndView");
m.setViewName("forward:/jsp/model2.jsp");
return m;
}
重定向:redirect:xxx
不会经过视图解析器
@RequestMapping("form6")
//redirect,不会经过视图解析器。
public ModelAndView getResp4(){
ModelAndView m=new ModelAndView();
m.addObject("message6", "ModelAndView");
m.setViewName("redirect:/jsp/model2.jsp");
return m;
}