Spring MVC请求方式分为转发、重定向两种,是用forward和redirect关键字在controller层进行处理。本文我们就来探讨一下Spring MVC请求方式中的Spring MVC重定向和转发。
HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有很大的区别。我们依次来看看转发和重定向的定义和路径支持。
1.转发
return "index.jsp"; //这种方式默认的就是转发
return "forward:/index.jsp"; //这是全写的方式
路径支持
相对路径:相对于当前浏览器的地址 ../
根路径:以/开始(/代表当前项目)
绝对路径:不支持的——最大的范围就是当前的项目
@Controller
@RequestMapping("MyCno2")
public class MyCno2 {
@RequestMapping("demo1")
public String demo1(){
//return "../index.jsp";
return "/index.jsp";//相当于 return "forward:/index.jsp";
}
}
在类上面加 @RequestMapping("MyCno2") 是为避免不同类中方法有重名而导致不知道是进入那个类中的方法,加上之后 /MyCno2/demo1就知道是进入MyCno2类下面的demo1方法。
2.重定向
return "redirect:index.jsp";
路径支持
相对路径:支持使用的——相对于当前的浏览器路径
根路径:/ ——代表当前项目
绝对路径:支持的 如: return "redirect:";
@RequestMapping("demo2")
public String demo2(){
//return "redirect:index.jsp";
//return "redirect: ../index.jsp";
return "redirect:/index.jsp";
//return "redirect:";
}
我们来看一下请求转发和重定向的区别:
请求重定向和请求转发都是web开发中资源跳转的方式。
请求转发是服务器内部的跳转
地址栏比发生变化,只有一个请求相应
4.可以通过request域对跳转目标的请求
5.请求重定向是浏览器自动发起对跳转目标的请求
6.地址栏会发生变化
7.两次请求相应
8.无法通过request域传递对象
下面讲一讲如何在SpringMVC中实现转发和重定向
1.在SpringMVC中仍然可以使用传统方式实现转发和重定向
request.getRequestDispatcher(" ").forward(request,response);
response.sendRedirect(" ");
2.在SpringMVC中也提供了快捷方式实现转发和重定向
只要在返回视图时,使用如下方式指定即可:
/**
* 实现转发
*/
@RequestMapping("/hello11.action")
public String hello11(HttpServletRequest request){
request.setAttribute("name", "cjj");
return "forward:hello.action";
}
/**
* 实现重定向
*/
@RequestMapping("/hello12.action")
public String hello12(HttpServletRequest request){
request.setAttribute("name", "cjj");
return "redirect:/hello.action";
}
3.可以利用转发,实现允许用户访问WEB-INF下保存的指定资源
/**
* 通过转发 实现 访问到在WEB-INF目录下的资源
* @throws Exception
*/
@RequestMapping("/toFile.action")
public String toFile(String vname){
if("form".equals(vname)){
return vname;
}else{
return "err";
}
}
Spring MVC重定向和转发在Spring MVC框架体系中发挥着不可忽视的作用,然而这也是容易被我们忽视的知识点。为了避免我们对知识的遗漏,推荐观看本站的Spring MVC视频教程,全面系统的学习Spring MVC的知识讲解和解析,让你再无遗漏知识点!