SpringBoot中处理的转发与重定向方式

 更新时间:2022年11月02日 14:43:13   作者:yubin1285570923  
这篇文章主要介绍了SpringBoot中处理的转发与重定向方式,分别就转发和重定向做了概念解说,结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

转发:一次请求,服务器内部调用另外的组件处理,request和response可以共用,有限制性,只能转发到本应用中的某些资源,页面或者controller请求可以访问WEB-INF目录下面的页面

重定向:两次请求,地址会改变,request和response不能共用,不能直接访问WEB-INF下面的资源,

根据所要跳转的资源,可以分为跳转到页面或者跳转到其他controller

一、返回ModelAndView时的请求转发

当controller中的方法返回ModelAndView的时候,默认是使用的转发。当然,我们也可以显式的指出要使用转发,此时,需在 setViewName()指定的视图前添加forward:,此时springmvc.xml文件中配置的视图解析器将会失效,即需要在setViewName中写上jsp相对于项目根的路径。

1:转发到页面

/**
 * 转发返回ModelAndView对象
 * @return
 * @throws Exception
 */
@RequestMapping("/forwardMAV.do")
public ModelAndView forwardMAV()throws Exception{
 
    ModelAndView mv = new ModelAndView();
    mv.addObject("type", "转发返回ModelAndView");
    //默认情况下使用转发
    //mv.setViewName("/result");
 
    //手动显式指定使用转发,此时springmvc.xml配置文件中的视图解析器将会失效
    mv.setViewName("forward:/jsp/result.jsp");
    return mv;
}

需要在webapp目录下添加jsp/result.jsp文件:

2:转发到controller

使用转发跳转到其他controller中

@RequestMapping("/forwardMAV.do")
public ModelAndView forwardMAV()throws Exception{
 
    ModelAndView mv = new ModelAndView();
 
    //手动显式指定使用转发,此时springmvc.xml配置文件中的视图解析器将会失效
    mv.setViewName("forward:other.do");
    return mv;
}

创建OtherController:

/**
 * 被跳转的controller
 */
@Controller
public class OtherController {
 
    /**
     * 被跳转的controller返回result.jsp
     * @return
     * @throws Exception
     */
    @RequestMapping("/other.do")
    public ModelAndView other()throws Exception{
 
        ModelAndView mv = new ModelAndView();
        mv.addObject("type", "被跳转的controller");
 
        mv.setViewName("result");
        return mv;
    }
}

二、返回ModelAndView时的重定向:发送的get请求,参数在url后面

如果要实现重定向,则需在setViewName()指定的视图前添加redirect:,此时springmvc.xml文件中配置的视图解析器将会失效,即需要在setViewName中写上jsp相对于项目根的路径。重定向的方式在request域中的数据会失效,此时可以通过ModelAndView来传递数据,但是只能传递基本数据类型和String类型,因为spring mvc会将传递的数据以请求参数的方式放到url的后面,此时任何数据类型都会被转换为普通的字符串。另外,我们在jsp中取值的时候需要使用 EL 表达式中的请求参数param读取。

除此之外,你还可以将数据放到HttpSession域中,这里就不演示了。

1.重定向到页面

/**
 * 重定向返回ModelAndView对象
 * @return
 * @throws Exception
 */
@RequestMapping("/redirectMAV.do")
public ModelAndView redirectMAV(School school,String name)throws Exception{
 
    ModelAndView mv = new ModelAndView();
 
    //在重定向中可以使用ModelAndView传递数据,但是只能传递基本数据类型和String类型
    mv.addObject("school",school);
    mv.addObject("name", name);
 
    //使用重定向,此时springmvc.xml配置文件中的视图解析器将会失效
    mv.setViewName("redirect:/jsp/result.jsp");
    return mv;

result.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
 
${school.schoolName}<br>
${param.school.address}<br>
${param.name}
</body>
</html>

2,重定向到controller

在重定向到其他controller中的方法的时候,只要保证两者的参数名一致即可实现数据的传递。

@RequestMapping("/redirectMAV.do")
public ModelAndView redirectMAV(School school,String name)throws Exception{
 
    ModelAndView mv = new ModelAndView();
 
    mv.addObject("name", name);
    mv.addObject("schoolName", school.getSchoolName());
    mv.addObject("address", school.getAddress());
 
    System.out.println(school.getAddress());
    //使用重定向,此时springmvc.xml配置文件中的视图解析器将会失效
    mv.setViewName("redirect:other.do");
    return mv;
}
RequestMapping("/other.do")
public ModelAndView other(String name, School school)throws Exception{
 
    ModelAndView mv = new ModelAndView();
 
    //单个接收
    mv.addObject("name", name);
 
    //通过javabean对象接收
    mv.addObject("school", school);
 
    System.out.println(school.getAddress());
    mv.setViewName("result");
 
    return mv;
}

返回String类型的转发

这个整体上跟之前ModelAndView差不多,只不过在controller中的方法参数会被自动的放到request域中。

@RequestMapping("/forwardStr.do")
public String forwardStr(School school)throws Exception{
 
    //默认会使用转发
    //return "result";
    //显式的使用转发
    return "forward:/jsp/result.jsp";
}

result.jsp中直接通过request域获取数据,以下两种方式均可。

${requestScope.school.schoolName}

${school.schoolName}

返回String类型的重定向

这里要想传递数据的话,需要使用之前介绍过的Model实现,这里的数据同样会放在url中,所以只能传递基本数据类型和String类型。

@RequestMapping("/redirectStr.do")
public String redirectStr(School school, Model model)throws Exception{
 
    //这里的数据同样会放在url中,所以只能传递基本数据类型和String类型
    model.addAttribute("schoolName", school.getSchoolName());
    model.addAttribute("address", school.getAddress());
 
    return "redirect:/jsp/result.jsp";
}

result.jsp中需要通过param来获取数据:

${param.schoolName}

${param.address}

这里转发和重定向跟之前返回ModelAndView的时候一样,所以就不演示了。

返回void的重定向和转发

当方法没有返回值即返回void的时候,重定向和转发操作都是使用的servlet的api,就是:
转发:

request.getRequestDispatcher("/jsp/result.jsp").forward(request, response);

重定向:

response.sendRedirect(request.getContextPath()+"/jsp/result.jsp");

***************************************

@RequestMapping(value="/aa",method=RequestMethod.GET)

public ModelAndView aaa (HttpServletRequest request) {
String user  =  request.getParameter("username");

ModelAndView  mv = new ModelAndView ("xyxyh/declaration/delcleView");

mv.addObject("pas","bb"):

return mv

}
@RequestMapping(value="/aa",method=RequestMethod.GET)
 
public ModelAndView aaa (HttpServletRequest request,ModelMap model) {
 
String user  =  request.getParameter("username");
 
ModelAndView  mv = new ModelAndView ("xyxyh/declaration/delcleView");
 
mv.addObject("pas","bb"):
 
model.addAttribute("typeFlag","aaaaa");
return mv
 
}

到此这篇关于SpringBoot中处理的转发与重定向方式的文章就介绍到这了,更多相关SpringBoot 转发与重定向内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 128进制加密数据示例分享

    128进制加密数据示例分享

    这篇文章主要介绍了128进制加密数据示例,这里使用JAVA实现,需要的朋友可以参考下
    2014-03-03
  • IDEA打包应用程序的教程图解

    IDEA打包应用程序的教程图解

    这篇文章主要介绍了IDEA打包应用程序的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Springboot中yml文件没有叶子图标的解决

    Springboot中yml文件没有叶子图标的解决

    这篇文章主要介绍了Springboot中yml文件没有叶子图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解springboot读取yml配置的几种方式

    详解springboot读取yml配置的几种方式

    这篇文章主要介绍了详解springboot读取yml配置的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 详解快速排序算法中的区间划分法及Java实现示例

    详解快速排序算法中的区间划分法及Java实现示例

    这篇文章主要介绍了详解快速排序算法中的区间划分法及Java实现示例,文中分别介绍了快排时两种区间划分的思路,需要的朋友可以参考下
    2016-04-04
  • IDEA的Mybatis Log Plugin插件配置和使用详解

    IDEA的Mybatis Log Plugin插件配置和使用详解

    这篇文章主要介绍了IDEA的Mybatis Log Plugin插件配置和使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java Filter 过滤器详细介绍及实例代码

    Java Filter 过滤器详细介绍及实例代码

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,本文章WEB开发人员通过Filter技术,对web服务器管理的所有web资源进行拦截,从而实现一些特殊的功能,本文章将向大家介绍Java 中的 Filter 过滤器,需要的朋友可以参考一下
    2016-12-12
  • SpringBoot浅析缓存机制之Ehcache 2.x应用

    SpringBoot浅析缓存机制之Ehcache 2.x应用

    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点。它是Hibernate中的默认缓存框架。Ehcache已经发布了3.1版本。但是本文的讲解基于2.x版本
    2022-08-08
  • Spring的@CrossOrigin注解处理请求源码解析

    Spring的@CrossOrigin注解处理请求源码解析

    这篇文章主要介绍了Spring的@CrossOrigin注解处理请求源码解析,@CrossOrigin源码解析主要分为两个阶段@CrossOrigin注释的方法扫描注册,请求匹配@CrossOrigin注释的方法,本文从源码角度进行解析,需要的朋友可以参考下
    2023-12-12
  • SpringBoot找不到映射文件的处理方式

    SpringBoot找不到映射文件的处理方式

    这篇文章主要介绍了SpringBoot找不到映射文件的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10

最新评论