mvc学习小笔记(四) 返回参数相关

344 阅读3分钟

1.控制方法返回字符串

则根据mvc基础相关里的逻辑原理图里讲的,根据视图解析器,找到对应的字符串.jsp页面。

2.若控制方法未写返回值(void)。

@RequestMapping("/testVoid")
public void testVoid{
System.out.println("testvoid方法执行了...");
}

image-20201223165439762

如上,控制台会打印"testvoid方法执行了...",会默认去找方法同名的jsp文件

若想void,不报404。

1.通过请求转发,(转发一次请求,就不用编写项目名称,依然默认在当前项目下)这样就不会经过视图解析器,所以路径及jsp格式都要提供。如上方法将转到success.jsp页面

@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
    System.out.println("testVoid方法执行了...");
    //编写请求转发的程序
    request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
    return;
}

2.通过请求重定向(重新发送请求,算是总共进行两次请求,所以通过response响应调方法),request.getContextPath()为获取项目名称根目录路径,即webapp,进行拼接,进入该路径下的index.jsp。(此时不能进入/WEB-INF)

@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
    System.out.println("testVoid方法执行了...");
    //重定向
    response.sendRedirect(request.getContextPath()+"/index.jsp");
    return;
}

3.通过直接相应,相当于直接赋予相应结果,此时页面是在testVoid.jsp页面。

@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
    System.out.println("testVoid方法执行了...");
    // 设置中文乱码
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

    // 直接会进行响应
    response.getWriter().print("你好");

    return;
}

3.若控制方法返回值是ModelAndView对象

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    // 创建ModelAndView对象
    ModelAndView mv = new ModelAndView();
    System.out.println("testModelAndView方法执行了...");
    // 模拟从数据库中查询出User对象
    User user = new User();
    user.setUsername("小凤");
    user.setPassword("456");
    user.setAge(30);

    // 把user对象存储到mv对象中,也会把user对象存入到request对象
    mv.addObject("user",user);

    // 跳转到哪个页面
    mv.setViewName("success");

    return mv;
}

其实,返回字符串,底层也是调用ModelAndView对象。

ModelAndView为model实现类,所以addObject方法可以封装“键值对”,也会把user对象存入到request对象,前端就可以通过${}取到。

setViewName方法设定视图名字,也会经过视图解析器,所以找到success.jsp页面。

4.SpringMVC框架提供的转发和重定向

forward关键字进行转发,redirect关键字进行重定向

@RequestMapping("/delete")
public String delete() throws Exception {
	System.out.println("delete方法执行了...");
    // 请求的转发
	// return "forward:/WEB-INF/pages/success.jsp";
	return "forward:/user/findAll";
    // 重定向
    // return "redirect:/index.jsp";
}

使用forward关键字进行请求转发,forward:转发的JSP路径",不走视图解析器了,所以需要编写完整的路径转发请求到对应jsp页面,路径要写完整。转发到对应页面或者转发到其他请求。

使用redirect关键字进行重定向,底层自动编写项目根路径,所以可以不写。