Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)

学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅

第五章、SpringMVC控制器开发详解 三

5.1 核心要点

3.流程跳转

5.2 JavaWeb中流程跳转的核心回顾

5.2.1 JavaWeb中流程跳转的核心代码

5.2.2 JavaWeb页面跳转方式回顾

5.2.3测试

在web.xml里添加Servlet然后执行

可以看到通过url拼接可以获取传递的数据

5.3 Spring MVC的四种跳转形式

  1. 四种跳转指的是:在SpringMVC中控制器与JSP或者控制器与控制器之间的跳转。
    1. Controller - - forward —> JSP
    2. Controller - - redirect—> JSP
    3. Controller - - forward —> Controller
    4. Controller - - redirect—> Controller
  2. SpringMVC的四种跳转,底层上就是对Servlet跳转的封装。
  3. 默认情况下SpringMVC中控制器通过视图解析器跳转到JSP页面,通过的是forward形式。

5.3.1 控制器forward页面

  • 编码

    // 方式1 结合ViewResolver进行拼接成完整页面,并进行forward跳转
    @RequestMapping("view1")
    public String view1() {
        System.out.println("ViewController.view1");
        **return "result";**
    }
    
    // 方式2 使用forward关键字,视图解析器的拼接会失效,必须写完整路径
    @RequestMapping("view1")
    public String view1() {
        System.out.println("ViewController.view1");
        **return "forward:/result1.jsp";**
    }
    
    

5.3.2 控制器redirect页面

  • 编码

    // 使用了redirect关键字,视图解析器的拼接会失效,也要写完整路径
    @RequestMapping("view3")
    public String view3() {
        System.out.println("ViewController.view1");
        **return "redirect:/result.jsp";**
    }
    

5.3.3 forward控制器相互跳转

  • 是否存在控制器间相互跳转的需求

    是的,例如下图逻辑,登录后进入展示信息的页面,登录逻辑和展示信息逻辑属于两个不同的Controller,所以控制器间需要相互跳转

  • 编码

    @Controller
    @RequestMapping("forwardController")
    public class ForwardController {
    
        @RequestMapping("forward1")
        public String forward1() {
            System.out.println("ForwardController.forward1");
            return "forward:/forwardController/forward2";
        }
    
        @RequestMapping("/forward2")
        public String forward2() {
            System.out.println("ForwardController.forward2");
            return "result";
        }
    }
    // 执行后控制台输出结果与预期一致
    

5.3.4 redirect控制器相互跳转

  • 编码

    @Controller
    @RequestMapping("redirectController")
    public class RedirectController {
    
        @RequestMapping("redirect1")
        public String redirect1() {
            System.out.println("RedirectController.redirect1");
            return "redirect:/redirectController/redirect2";
        }
    
        @RequestMapping("/redirect2")
        public String redirect2() {
            System.out.println("RedirectController.redirect2");
            return "result";
        }
    }
    // 执行后控制台输出结果与预期一致
    

5.4 Web作用域处理

5.4.1 JavaWeb中作用域回顾

  • 三种作用域及其使用场景回顾

![](https://img2023.cnblogs.com/blog/3321544/202312/3321544-20231202102551017-1176911242.png)

5.4.2 SpringMVC中作用域处理

  • 基本使用方式及其存在的问题

```java
@RequestMapping("view1")
public String view1(HttpServletRequest request) {
    System.out.println("View2Controller.view2");
    request.setAttribute("name","xiaojr");
    return "result1";
}
// 在result1.jsp中通过${name}获取
//存在问题:与ServletAPI耦合,同时与视图模板技术(jsp、ftl)耦合,在SpringMVC中不建议使用
```

下一章:Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

posted @ 2023-12-01 00:06  扬眉剑出鞘  阅读(129)  评论(0编辑  收藏  举报