首页 > 代码库 > forward:hello 与 redirect:hello的区别
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中的参数不会丢失;
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。