SpringMVC的响应
·
文章目录
SpringMVC响应方式介绍
页面跳转:
- 返回字符串逻辑视图
void原始ServletAPIModelAndView
返回数据:
- 直接返回字符串数据
- 将对象或集合转为
json返回
返回字符串逻辑视图
直接返回字符串:这种方式会将返回的字符串与视图解析器的前后缀拼接,然后跳转到指定页面。
@RequestMapping("/returnString")
public String returnString() {
return "success";
}
void原始ServletAPI
通过
request、response对象实现响应。
@RequestMapping("/returnVoid")
public void returnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 1. 通过response直接响应数据
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("输出的信息");
// ----------------------------------------
request.setAttribute("username", "测试");
// 2. 通过request实现转发
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
// ----------------------------------------
// 3. 通过response实现重定向
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
转发 & 重定向
forward转发
在实际开发中,一般使用返回字符串逻辑视图实现页面的跳转,这种方式其实就是请求转发。
- 也可以写成:
forward转发 - 如果用了
forward:则路径必须写成实际视图url,不能写逻辑视图。它相当于:
request.getRequestDispatcher("url").forward(request,response)
- 使用请求转发,既可以转发到
jsp,也可以转发到其他的控制器方法。
@RequestMapping("/forward")
public String forward(Model model) {
model.addAttribute("username", "转发测试");
return "forward:/WEB-INF/pages/success.jsp";
}
Redirect重定向
我们可以不写虚拟目录,SpringMVC框架会自动拼接,并且将
Model中的数据拼接到url地址上。
@RequestMapping("/redirect")
public String redirect(Model model) {
model.addAttribute("username", "重定向测试");
return "redirect:/index.jsp";
}
ModelAndView
方式一
在
Controller中创建并返回ModelAndView对象,并设置视图名称。
@RequestMapping("/returnModelAndView1")
public ModelAndView returnModelAndView1() {
// Model:模型 封装数据
// View :视图 展示数据
ModelAndView modelAndView = new ModelAndView();
// 设置模型数据
modelAndView.addObject("username", "test");
// 设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
方式二【推荐】
在
Controller方法的形参上直接声明ModelAndView,无需在方法中自己创建,在方法中直接使用该对象设置视图。
@RequestMapping("/returnModelAndView2")
public ModelAndView returnModelAndView2(ModelAndView modelAndView) {
// 设置模型数据
modelAndView.addObject("username", "test");
// 设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
@SessionAttributes
如果在多个请求之间共用数据,则可以在控制器类上标注
@SessionAttributes,配置需要在session中存放的数据范围,SpringMVC会将存放在model中对应的数据暂存到HttpSession中。
注意事项:@SessionAttributes能且只能定义在类上。
@Controller
@SessionAttributes("username") // 向request域存入的key为username时,同步到session域中
public class UserController {
@RequestMapping("/forward")
public String forward(Model model) {
model.addAttribute("username", "测试");
return "forward:/WEB-INF/pages/success.jsp";
}
@RequestMapping("/returnString")
public String returnString() {
return "success";
}
}
更多推荐



所有评论(0)