动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC实现页面跳转

08-21 21:04 117浏览
举报 T字号
  • 大字
  • 中字
  • 小字

作为提供了构建 Web 应用程序的全功能 MVC 模块,Spring MVC实现页面跳转是WEB开发的基本功能实现。本文就来探讨一下Spring MVC如何实现页面跳转。

Spring MVC实现controller间跳转,需重定向。通常有几种情况:不带参数跳转;带参数拼接url形式跳转;带参数不拼接参数跳转,页面也能显示。

Spring MVC的Controller每次处理完数据后都会返回一个逻辑视图(view)和模型(model)。所以我们会看到原生的Controller是返回一个ModelAndView(内部包含了view和model)。正常情况下(除非被@ModelAttribute注解了的方法),否则最终都会返回ModelAndView。当然有时候一个功能处理方法不一定要返回一个逻辑视图,也可以重定向到另一个功能方法。服务器内部转发到一个逻辑视图或者另一个功能方法。

Spring MVC的强大之处在于它封装了Servlet大量底层代码,但是有没有完全屏蔽用户对Servlet API的使用。所以SpringMvc页面跳转也是分为两大类:

1.使用Servlet API实现页面跳转

2.重定向方式: 由于重定向的本质是要求浏览器重新发送一个请求,SpringMvc里面的页面一般是放到WEB-INF下,浏览器不可以直接访问)。所以这里的重定向实质是重定向到另一个功能方法。

服务器内部请求转发: 请求转发为服务器内部行为,所以可以直接跳转访问一个jsp页面也可以跳转到另一个功能处理方法。具体的方法如下:

一、forward请求转发2种方式

Spring MVC中forward请求转发只需要请求一次服务器,可以提高访问速度,同时参数传递可以借助HttpServletRequest来处理,由于是处理同一个请求,所以request对象还是同一个,中文也不会出现乱码现象。使用forward后转到发某个请求而不是某个页面。

1.forward请求转发流程

客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来。整个过程是一个请求,一个响应。

  1. ViewResolver 请求转发
  2. ModelAndView 请求转发

二、redirect重定向3种方式

Spring MVC中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,其中redirect是直接跳转到其他页面,有以下3种方法进行重定向。

1.redirect重定向流程

客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问test.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求test.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。

  1. response.sendRedirect重定向跳转
  2. ViewResolver直接跳转

redirect重定向可以跳转到任意服务器,可以用在系统间的跳转。Spring MVC中redirect重定向,参数传递可以直接拼接url也可以使用RedirectAttributes来处理,由于是不同的请求,重定向传递的参数会在地址栏显示,所以传递时要对中文编码进行处理。

看完以上介绍,Spring MVC实现页面跳转你掌握了多少呢?最底层还是两种跳转,只是spring又进行了封装而已,所以说跳转的方式其实有很多很多种,你自己也可以封一个,也可以用最原始的response来,也没有问题。当然,自己封装还是需要很扎实的Java基础的,可以观看本站的Java基础教程,帮你夯实Java基础!

0人推荐
共同学习,写下你的评论
0条评论
红業
程序员红業

15篇文章贡献46120字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消