forward:hello 与 redirect:hello的区别

对于某些Controller的处理方法,当返回值为String类型时,返回的结果中可能含有forward或redirect前缀;

如:

 1 @Controller
 2 @RequestMapping("/user")
 3 public class UserController {
 4     @RequestMapping("/forward")
 5     public String replyWithForward(HttpServletRequest request, String userId){
 6         request.setAttribute("userid", userId);
 7
 8         System.out.println("userId =" +userId);
 9
10         return "forward:hello";
11     }
12
13     @RequestMapping("/redirect")
14     public String replyWithRedirect(HttpServletRequest request, String userId){
15         request.setAttribute("userid", userId);
16
17         System.out.println("userId = "+userId);
18
19         return "redirect:hello";
20     }
21 }

测试页面hello.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4      String userId = (String)request.getAttribute("userid");
 5      System.out.println("获取到的userId为:"+userId);
 6 %>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <head>
10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
11 <title>测试页面</title>
12 </head>
13 <body>
14     hello, <%= userId %>;
15 </body>
16 </html>

当路径为 http://localhost:8080/crazysnailweb/user/forward?userId=123时,浏览器中的URL不会发生变化,且页面输出:

当路径为http://localhost:8080/crazysnailweb/user/redirect?userId=123 时,浏览器中URL变为http://localhost:8080/crazysnailweb/user/hello,且页面输出:

注:redirect会让浏览器发起一个新的请求,因而原来request对象中的参数丢失;而forward所到的目标地址位于当前请求中,request中的参数不会丢失;

forward:hello 与 redirect:hello的区别,布布扣,bubuko.com

时间: 2024-10-13 15:43:24

forward:hello 与 redirect:hello的区别的相关文章

请求转发(Forward)和重定向(Redirect)的区别

forward(转发): 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址. redirect(重定向): 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL. 转发是服务器行为,重定向是客户端行为. 区别: 1. 从地址栏显示来说for

直接请求转发(Forward)和间接请求转发(Redirect)两种区别?

用户向服务器发送了一次HTTP请求,该请求肯能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的.根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect)两种有何区别呢?本篇在回答该问题的同时全面的讲解两种请求转发方式的原理和区别. [关键考点] 请求转发的含义: Forward转发请求的原理: Redirect转发请求的原理. [考题分析] Forward和Redirect代表了两种请求转发方式:

请求转发(forward) 和重定向(redirect)的区别?

   forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取   过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,   所以它的地址栏中还是原来的地址.   redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,地址栏中   是新的地址.    前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址:后者则   是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接.这样,从浏览

转发(Forward)和重定向(Redirect)的区别

转发是服务器行为,重定向是客户端行为. 转发(Forword) :通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的. RequestDispatcher 可以通过HttpServletRequest 的 getRequestDispatcher()方法获得.例如下面的代码就是跳转到 login_success.jsp 页面. request.getRequestD

转发(forward)和重定向(redirect)的区别

转发与重定向的主要区别 转发 重定向 转发是服务器行为 重定向是客户端行为 转发浏览器url不改变 重定向浏览器url改变 转发request请求数据不丢失 重定向request请求数据丢失 转发效率较高 重定向效率较低 工作流程: 转发:客户浏览器发送http请求--web服务器接受此请求--调用内部的一个方法在容器内部完成请求处理和转发动作--将目标资源发送给客户: 重定向:客户浏览器发送http请求--web服务器接受后发送302状态码响应及对应新的location给客户浏览器--客户浏览

WEB-INF有关的目录路径总结、转向方式: forward 重定向方式: Redirect

WEB-INF有关的目录路径总结 1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html 3.只能用转向方式来访问WEB-INF目录下的JSP,不用采用重定向的方式请求该目录里面的任何资源.如图:index.jsp >>  main.jsp 4.WEB-INF目录下文件访问资源文件时,可以忽略WEB-INF这一层目录.如main.jsp 要用css目录里的

spring 转发forward和重定向redirect

forward 转发,如return "forward:/hello"; 浏览器的地址栏不会变,但是有视图返回来 redirect 重定向,如return "redirect:/hello"; 浏览器的地址栏会变. 网络解释: spring控制器最后返回一个ModelAndView(urlName),其中urNamel可以是一个视图名称,由视图解析器负责解析后将响应流写回客户端;也可以通过redirect/forward:url方式转到另一个控制器进行处理. red

View()/Redirect()/RedirectToAction()的区别(控制器调用另一个控制器||视图)

如: public actionResult Index { return viewn() --返回默认视图Index.cshtml return View("PayList")  --从Index控制器调用PayList.cshtml  注:此处仅仅是调用视图,并未经过PayList控制器,如果控制器中有逻辑代码则就调用不到了 return Redirct("Pay/PayList"); --只能通过url路径跳转(无重载) return RedirctToAct

JSP 中 forward 和 redirect 的区别_2014.12.31

重定向,只能访问工程下(WebRoot文件夹)的页面,不能访问到内部(WEB_INF文件夹)的页面 1.从地址栏显示来说:forward浏览器显示路径不变,redirect浏览器显示路径改变forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.