SpringMVC怎样请求重定向和转发

SpringMVC怎样请求重定向和转发
文献种类:专题技术文献;
开发工具与关键技术:IntelliJ IDEA 2020.1.1
作者:卢媛媛;
撰写时间:2021/01/20
什么是Spring MVC ?

Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一部分,它和Struts2一样都属于表现层的框架。
MVC(Model模型 View 视图 Controller 控制器)
模型:用于封装业务逻辑处理(java类);
视图:用于数据展现和操作界面(Servlet);
控制器:用于协调视图和模型(jsp);
处理流程:视图将请求发送给控制器,由控制器选择对应的模型来处理;
模型将处理结果交给控制器,控制器选择合适的视图来展现

重定向与转发的区别:

重定向时浏览器上的网址改变,而重定向实际上产生了两次请求(速度慢),但是重定向时的网址可以是任何网址
转发时浏览器上的网址不变,转发只有一次请求(速度快),但是转发的网址必须是本站点的网址
在这里插入图片描述
forward:表示转发,
实现request.getRequestDispatcher(“xx.jsp”).forward();
redirect:表示重定向,实现 response.sendRedirect(“xxx.jsp”);

Controller类:当项目中有视图解析器,这样就不可以访问WEB-INF以外的资源了,所以显示转发有这个用途

@RequestMapping(value = "/user")
@Controller
public class myController {
    @RequestMapping(value = "/doForward.do")
    public ModelAndView doforward(String name, int age) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("name", name);
        mv.addObject("age", age);
    //显示转发
    // mv.setViewName("forward:/WEB-INF/result.jsp");
    //当项目中有视图解析器,这样就不可以访问WEB-INF以外的资源了,所以显示转发有这个用途
        mv.setViewName("forward:/result.jsp");
    // mv.setViewName("show");//这个也是转发
        return mv;
    }
}

当项目中加入了视图解析器的话,我们不可以访问WEB-INF以外的资源页面了,所以这个显示转发就可以解决这个问题了,同理,重定向

@RequestMapping("/hello")
public String Hello(){
    System.out.println("springmvc程序");
    //请求转发
    return "forward:/WEB-INF/jsp/success.jsp";
}

输出结果截图:
在这里插入图片描述
很奇怪,为什么没有获取到数据?
并且浏览器的访问地址也发生改变,地址中由输入的参数

是因为:mv.setViewName(“redirect:/result.jsp”);程序走到这步时,浏览器发起第二次请求,页面不在是doForward.do请求的页面地址了。并且框架对请求重定向的操作:框架会把ModelAndView的简单类型数据转为字符串数据,作为result.jsp的get请求的参数使用。
目的是可以在doRedirect.do和result.jsp两次请求之间传递数据

为什么没有获取到数据?
就是mv.addObject(“name”,myname) 数据是放入到request的作用域的,而在两次请求中页面发生改变,这个request对象不在是同一个对象了,当然就获取不到数据了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值