springmvc重定向到另一个项目_spring mvc的转发与重定向

转发与重定向

spring mvc底层其实就是一个servlet,因此在spring mvc中也存在转发和重定向的概念。对于转发的页面,可以是在WEB-INF目录下的页面;而重定向的页面,是不能在WEB-INF目录下的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF目录下的资源的。

根据索要跳转的的资源,可以分为跳转到前端页面和跳转到其他controller。

返回ModelAndView时的请求转发

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

/**

* 转发返回ModelAndView对象

* @return

* @throws Exception

*/

@RequestMapping("forwardMAV")

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文件:

Title

${type}

使用转发跳转到其他controller中

@RequestMapping("forwardMAV")

public ModelAndView forwardMAV()throws Exception{

ModelAndView mv = new ModelAndView();

//手动显式指定使用转发,此时springmvc.xml配置文件中的视图解析器将会失效

mv.setViewName("forward:other");

return mv;

}

创建OtherController:

/**

* 被跳转的controller

*/

@Controller

public class OtherController {

/**

* 被跳转的controller返回result.jsp

* @return

* @throws Exception

*/

@RequestMapping("other")

public ModelAndView other()throws Exception{

ModelAndView mv = new ModelAndView();

mv.addObject("type", "被跳转的controller");

mv.setViewName("result");

return mv;

}

}

返回ModelAndView时的重定向

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

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

/**

* 重定向返回ModelAndView对象

* @return

* @throws Exception

*/

@RequestMapping("/redirectMAV")

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

Title

${school.schoolName}

${param.school.address}

${param.name}

在上面的jsp中只有最后一个才能读取到数据。

重定向到其他controller中

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

@RequestMapping("redirectMAV")

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");

return mv;

}

OtherController:

@RequestMapping("other")

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")

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")

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");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL备份和还原数据库及慢查询日志使用

转载于:https://www.cnblogs.com/NiceTime/p/6665495.html

Oracle 11gR2 +sqldeveloper 安装过程(学习记录)

Oracle 11g 和SQL developer安装过程 一、Oracle 11g的安装 背景:由于课程学习需要Oracle 11g,但在Oracle官方网页(https://www.oracle.com/index.html)中没有直接找到Oracle 11的版本,所以自己在网上找到相关的压缩包进行的。 …

zemax设计35mm镜头_ZEMAX怎样优化MTF?

什么是MTF?MTF即调制传递函数是描述一个光学系统很重要的方法。在成像光学系统中运用傅立叶理论的目的就是让MTF能描述图像中所要观察的空间频率场的对比度。位图分析窗口显示了三个孩子的图像的部分,展示了“好的”图像质量:但是好到底是怎样…

网线重新插拔后恢复正常_生活小窍门之网线不够长怎么办,毕亚兹网线连接器轻松搞定...

很多朋友在家中装修完时候,为了整齐和方便收纳都会把每个屋中的网口和光纤输出口集中到一起,放置到网络箱中,看起来更加整齐划一,但是装修时都不会考虑到网线要预留很长,很多时候都只留了很短的一节网线,还…

利用IDEA部署过的Tomcat开发Web Service

(1)使用idea开发一个Web Service; (2)开发一个客户端来调用该Web Service并展现出相应j结果; (3)编程调用网络上提供的天气预报Web Service并显示结果。 (1)开…

平衡的括号[UVA-673]

UVA673 Parentheses Balance 书上习题6-1,题比较简单,主要是使用栈这个“后进先出”的数据结构。因为平衡的括号,必然可以在左半括号进行push而右半括号进行pop,当到达序列末尾而栈不空,显然不满足题意了。 抛开题目说…

仅展示近三天的动态设置_抱歉,朋友仅展示最近三天的朋友圈

QQ空间可以封存; 微信朋友圈可以设置三天/半年可见; 微博可以设置半年内可见; 越来越多的人选择把自己的过去隐藏起来,为什么? 上了大学之后,你的微信好友变多了,连发传单的小哥和校门口理发店的…

wallpaper怎么导入视频_快速制作视频字幕,我们推荐这款可视化字幕软件!

大家平时在使用诸如pr,会声会影,或者爱剪辑等视频编辑软件制作字幕时会不会觉得很麻烦,一点都不方便呢?亦或是大家苦苦寻找,却怎么都找不到合适的字幕制作软件。那么到底有没有即高效又方便快捷的字幕制作软件呢&#…

javaScript命名规范

必须以字母、$符号或下划线开头;可以包括数字、字母、$符号和下划线;不能包含空格和其他标点符号;区分大小写;最好采用驼峰命名法转载于:https://www.cnblogs.com/qqm16113/p/6702569.html

带负荷测试要求二次最小电流_开关柜设计人员如何选择合适的零序电流互感器?...

作者介绍了开关柜内配零序电流互感器(适用于0.38~66kV),分析特性,探讨如何选择合适的零序电流互感器,以期达到最佳的使用效果。1 概述在中压电力系统的项目中,我们开关柜的设计人员经常会遇到开关柜内配零序电流互感器…

scikit_learn 官方文档翻译(集成学习)

1.11. Ensemble methods(集成学习) 目标: 相对于当个学习器,集成学习通过使用多个基学习器的预测结果来来提高学习预测的泛化性能以及鲁棒性; 集成学习的两个思路: 1)、通过使用并行的学习&…

css 实现一个尖角_一个讲述了 CSS 相关的技巧、动画实现 的开源项目(60篇相关文章)...

iCSS不止于 CSS文章围绕 CSS/web动画 展开,谈一些有趣的话题,内容天马行空,想到什么说什么,不仅是为了拓宽解决问题的思路,更涉及一些容易忽视或是十分有趣的 CSS 细节。Article List下面这个左边竖条图形,…

2017.4.14 java基本类型和包装类的区别

int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配 而实际的对象是在存…

httos双向认证配置_idou老师教你学Istio 15:Istio实现双向TLS的迁移

本文由华为云容器Istio团队撰稿,未经允许谢绝转载。众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道&…

面向对象 【类库】【委托】【is as运算符】

类库(Class Library) .dll文件 类库字面意思就是类的集合,里面有很多被编译后的C#代码,不可阅读,不可修改,只能调用 类库是一个综合性的面向对象的可重用类型集合,这些类型包括:接口、抽象类和具体类。 类库…

混凝土静力受压弹性模量试验计算公式_【小马建考干货】天天送检,你知道混凝土试块检测哪些性能标指吗?...

混凝土九大类性能检测试块留置尺寸,具体留置前请咨询项目试验室,因为奇葩试验室很多!一、砼抗压强度试块尺寸1、砼标准试件尺寸为 150*150*150(公称最大粒径≤31.5mm)。2、非标准试件尺寸通常用100*100*100&#xff08…

怎么做手机的上下滑动_diy滴胶手机壳到底怎么做呢?

diy滴胶手机壳到底怎么做呢?步骤1⃣:购买到手机壳(新手建议用有凹槽的手机壳,以免滴胶溢出)步骤2⃣:​拿到手机壳之后,建议用酒精擦拭一下, 以免有灰尘影响滴胶的效果步骤3⃣:​(此步骤不为必须步骤)如果不喜欢手机背面的颜色&…

扫描线三巨头 hdu1928hdu 1255 hdu 1542 [POJ 1151]

学习链接:http://blog.csdn.net/lwt36/article/details/48908031 学习扫描线主要学习的是一种扫描的思想,后期可以求解很多问题。 扫描线求矩形周长并 hdu 1928 Picture Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O…

希尔排序 最坏时间_排序算法(2)

本文介绍插入排序和希尔排序,插入排序是较为常见的排序算法,希尔排序也是基础的排序算法,废话不多说,具体来看一下两种算法。山插入排序插入排序的基本思想是拿到下一个插入元素,在已经有序的待排数组部分找到自己的位…

题目1017:还是畅通工程(最小生成树初步应用)

题目链接:http://ac.jobdu.com/problem.php?pid1017 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1017 还是畅通工程.cpp // Jobdu // // Created by PengFei_Zheng on 18/04/2017. // Copyright © 201…