添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
光明磊落的卤蛋  ·  Android基于Gradle ...·  5 月前    · 
可爱的勺子  ·  thread.sleep()方法执行后 ...·  11 月前    · 
踢足球的毛豆  ·  CVPR 2023 | ...·  1 年前    · 

请求重定向与请求转发的比较,HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有很大的区别。

1.RequestDispatcher.forward方法只能将请求转发给 同一个Web应用中的组件 ,HttpServletResponse.sendRedirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到 同一个站点 上的其他应用程序的资源,甚至是使用绝对URL重定向到其他站点的资源。对于sendRedirect如果传递的URL以”/”开头,他是相对于整个Web站点的根目录;对于forward如果传递的URL以”/”开头,它是相对于当前Web应用程序的根目录。

2.sendRedirect对浏览器做出的响应是重新发出对另外一个URL的访问请求,forward在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果

3.forward的调用者与被调用者之间共享相同的request对象和response对象,他们属于同一个访问请求和响应过程;sendRedirect的调用者与被调用者使用各自的request和response对象,属于两个独立的访问请求和响应过程

请求重定向以redirect:开头,请求转发以forward:开头;
样例如下:

@RequestMapping(value="/users")
@Controller
public class UserController {
    @RequestMapping(value="/queryuser",method = RequestMethod.GET)
    public String queryuser(Model model) throws Exception {
        return "forward:/users/uc";
    @RequestMapping(value="/uc",method = RequestMethod.GET)
    public String quer(Model model) throws Exception {
        return "redirect:/#/home";
     @RequestMapping(value = "/save", method = RequestMethod.GET)  
        public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response) throws Exception {  
            ModelAndView mv = new ModelAndView("forward:/users/uc");//默认为forward模式  
//        ModelAndView mv = new ModelAndView("redirect:/#/home");//redirect模式  
            return mv;  
	@RequestMapping(value="/index")
	public String test(HttpServletResponse response) {
		System.out.println("重定向1");
		return "redirect:https://www.baidu.com";
                                    重定向是将用户从当前处理请求定向到另一个视图(例如 JSP)或处理请求,以前的请求(request)中存放的信息全部失效,并进入一个新的 request 作用域;转发是将用户对当前处理的请求转发给另一个视图或处理请求,以前的 request 中存放的信息不会失效。
                                    SpringMVC04--SpringMVC核心技术1.1 请求重定向和转发1.1.1 请求转发1.1.2 请求重定向1.2 异常处理1.2.1 @ExceptionHandler 注解1)自定义异常2)修改 Controller 抛出异常3)定义异常处理页面4)定义全局异常处理类5)定义SpringMVC配置文件1.3 拦截器
1.1 请求重定向和转发
当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其它处理器。
                                    请求转发概念:一种在服务器内容资源跳转的方式【内部】【同一个请求链】原理图:得到转发器 request.getRequestDispatcher(“/要跳转到地址”)调用转发器的方法: forward(request, response) //将请求和响应对象转发给下一个页面写成一句话: request.getRequestDispatcher(“/url”).forward(request, response);转发地址栏路径不变转发只能访问当前服务器下的资源。
2.转发页面的URL不会改变,而重定向地址会改变
3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径。
4.转发相当于服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页 共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和 request.getAttribute()。而重定向会产.
                                      当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器。
  注意,对于请求转发的页面,可以是WEB-INF中的页面;而重定向的页面,是不能为WEB-INF中页面的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF中资源的。
请求转发的实现:
  使用forward转发也叫显式转发,顾名思义,就算我们不用forward,当我们返回一个mv.setViewName(“show”)时,也
                                    Spring MVC中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,其中redirect是直接跳转到其他页面,有以下3种方法进行重定向。
redirect重定向流程
客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应
                                    redirectAttributes.addFlashAttribute 放入重定向需要传递的参数,SpringMVC重定向到新地址之前,会将这部分数据丢到session中,当重定向的请求过来后,SpringMVC又会从session中拿到这部分数据,然后丢到Model或者ModelMap中,然后冲session中清理掉这部分数据。访问接口test3,会被重定向到test4,顺便传递了2个参数。访问接口test5,会被重定向到test6,顺便传递了2个参数。,效果如下,参数传递成功了,传递是隐藏式的。
                                    Spring MVC中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,其中redirect是直接跳转到其他页面,有以下3种方法进行重定向。
redirect重定向流程
客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,......