博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC 几种页面跳转方式
阅读量:6156 次
发布时间:2019-06-21

本文共 3334 字,大约阅读时间需要 11 分钟。

hot3.png

SpringMVC跳转问题

SpringMVC的Controller每次处理完数据后都会返回一个逻辑视图(view)和模型(model)

所以我们会看到原生的Controller是返回一个ModelAndView(内部包含了view和model)。
正常情况下(除非被@ModelAttribute注解了的方法),否则最终都会返回ModelAndView。

当然有时候一个功能处理方法不一定要返回一个逻辑视图,也可以重定向到另一个功能方法

服务器内部转发到一个逻辑视图或者另一个功能方法。

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

所以这里的重定向实质是重定向到另一个功能方法。

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

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

  • 使用Servlet API实现页面跳转

  • 使用SpringMvc的API实现页面跳转

 

1、使用Servlet API

1.1通过HttpServletResponse的API直接输出(不需要配置渲染器)

controller类的主要代码

@Controllerpublic class RequestController{ @RequestMapping("/resp")    public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {         resp.getWriter().println("hello HttpServletResponse");    }

web.xml配置

dispatcher
org.springframework.web.servlet.DispatcherServlet
1
dispatcher
/

dispatcher-servlet.xml主要代码

1.2 使用HttpServletResponse 重定向到另一个视图(其他不变 )

@RequestMapping("/resp")    public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {        resp.sendRedirect("index.jsp");    }}

1.3 使用HttpServletRequest 转发(默认访问/下的index.jsp页面 不受渲染器的影响)

@RequestMapping("/resp")    public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {        req.setAttribute("message","it's forword ");        req.getRequestDispatcher("index.jsp").forward(req,resp);        }

1.4直接返回jsp页面的名称(无渲染器)

其他的配置不变

@RequestMapping("/nice")    public String hello1(){        //转发方式1        return "home.jsp";        //转发方式2        return "forward:index.jsp";        //重定向方式        return "redirect:index.jsp";    }

1.5当有渲染器指定

@RequestMapping("/nice")    public String hello1(){        //转发方式1        return "home";        //转发方式2        return "forward:index";        //重定向方式  hello指的是requsrmapping        return "redirect:hello";    }

 

2 使用SpringMVCAPI

 

2.1 使用modelandview普通返回一个视图

需要视图解析器 能指定跳转页面

public class HelloController implements Controller {    @Override    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest,                                      javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {        ModelAndView mv = new ModelAndView();        //封装要显示到视图的数据        mv.addObject("msg","hello myfirst mvc");        //视图名        mv.setViewName("hello");        return mv;    }}

[servlet-name]-servlet.xml

2.2、使用ModelAndView转发和重定向:

使用ModelAndView时,可以重定向或请求转发 ,也需要配置相应的[servlet-name]-servlet.xml视图解析器

//Controller中使用ModelAndView进行跳转和重定向@RequestMapping("/e")public ModelAndView testE(){System.out.println("testE");//跳转到服务器内部的一个页面//return "index";    //跳转到服务器内部的一个功能处理方法    //return new ModelAndView("forward:/dispather/b");    //重定向一个功能方法    return new ModelAndView("redirect:/dispather/b");}

 

来自!http://blog.csdn.net/jsu_9207/article/details/51281027

          http://www.cnblogs.com/ggr0305/p/7218686.html

 

唉今天有点头疼转载了几篇博客,没深看,改天在来修改完善一下

9/27修改

转载于:https://my.oschina.net/zjllovecode/blog/1543890

你可能感兴趣的文章
随机生成50个字段的elasticsearch的测试程序输入
查看>>
如何使用流量精灵刷网站流量
查看>>
使用AutoMapper 处理DTO数据对象的转换
查看>>
java使用POI获取sheet、行数、列数
查看>>
js 调用 oc 的解释
查看>>
Linux学习笔记——Ubuntu更新软件源
查看>>
非nodejs方式的vue.js的使用
查看>>
普林斯顿公开课 算法2-2:选择排序
查看>>
SharePoint 2013 开启訪问请求
查看>>
jQuery(三) javascript跨域问题(JSONP解决)
查看>>
Redis和Memcached的区别
查看>>
ubuntu17.04 调试系统工具bcc,systamtap安装
查看>>
Java微信公众平台开发(二)--微信服务器post消息体的接收
查看>>
分享一个HTML5画布实现的超酷文字弹跳球效果
查看>>
农民还乡
查看>>
asp.Net_图片上传的一个类库的源码
查看>>
Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
查看>>
组合 z
查看>>
IOS研究之App转让流程须知具体介绍
查看>>
又一个触摸事件,哟
查看>>