导航

在WEB应用程序开发时,页面跳转有几种方式?

  • ① 服务器转发

  • ② 客户端重定向

在Spring MVC种导航的两种实现方式:

  • ① 返回字符串(推荐)

  • ② 使用ModelAndView

在Spring MVC种两种导航进行跳转时,前缀不同:

  • ①转发: forward:

  • ② 重定向: redirect:

1.转发到页面

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller("ForwordController")
@RequestMapping("/forward")
public class ForwordController {

    //使用ModelAndView实现转发到jsp页面
    @RequestMapping("demo01")
    public ModelAndView demo01(){
        System.out.println("demo01 is ran…");
        ModelAndView mav = new ModelAndView();
// 如果转发到jsp页面,不用像下面写的这么复杂,因为他是默认方式
// mav.setViewName("forward:/exp.jsp");
        mav.setViewName("exp"); //记得创建一个exp.jsp
        return mav;
    }

    //使用String类型转发到Controller
    @RequestMapping("demo02")
    public String demo02(){
        System.out.println("demo02 is ran…");
        return "forward:/forward/demo01.xhtml";
    }
}

2.重定向

Spring MVC的规范是不直接访问jsp页面,所以重定向时就只有Controller。

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller("RedirectController")
@RequestMapping("/redirect")
public class RedirectController {
    @RequestMapping("demo01")
    public String demo01(@RequestParam("goodsId") int goodsId){
        System.out.println("demo01 is ran…");
        System.out.println("goodsId:" + goodsId);
        return "exp"; //创建exp.jsp页面
    }

    @RequestMapping("demo02")
    public String demo02(Model model){
        System.out.println("demo02 is ran…");
        model.addAttribute("goodsId", 6);
        return "redirect:/redirect/demo01.xhtml";
//实现demo02重定向到demo01,并且附带了goodsId的参数
    }
}