forward:hello 与 redirect:hello的区别
程序员文章站
2022-07-02 13:00:50
...
对于某些Controller的处理方法,当返回值为String类型时,返回的结果中可能含有forward或redirect前缀;
如:
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/forward") public String replyWithForward(HttpServletRequest request, String userId){ request.setAttribute("userid", userId); System.out.println("userId =" +userId); return "forward:hello"; } @RequestMapping("/redirect") public String replyWithRedirect(HttpServletRequest request, String userId){ request.setAttribute("userid", userId); System.out.println("userId = "+userId); return "redirect:hello"; } }
测试页面hello.jsp;
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String userId = (String)request.getAttribute("userid"); System.out.println("获取到的userId为:"+userId); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试页面</title> </head> <body> hello, <%= userId %>; </body> </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中的参数不会丢失;
推荐阅读
-
jsp中页面之间的跳转forward与sendRedirect的区别
-
Docker搭建简单的应用栈与容器Hello World访问详解
-
JS中‘hello’与new String(‘hello’)引出的问题详解
-
详解ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)
-
forward和redirect的区别
-
SERVLET API中forward()与redirect()的区别
-
【AOP 的实现之Aspectj(一)】:AspectJ开发环境搭建与Hello World
-
forward:hello 与 redirect:hello的区别
-
servlet redirect/forward/session/cookie 与 HTTP 协议的测试
-
forward(转发)与redirect(重定向)的区别