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

  • 请求转发: 服务器内部转发,整个过程处于同一个请求当中。
  • 重定向: 浏览器重新发送请求,相当于向服务器端发送了两个请求。

区别:

问题重定向请求转发
第二次请求谁请求的?浏览器服务器
浏览器发送了几次请求?2次以上1次
servlet可以共享request吗?不可以可以
地址栏是否发生改变?
浏览器地址栏显示的哪一次访问地址?最后一次第一次
可以跳转到什么资源?任意资源项目内部
第二次的请求路径是?绝对路径内部路径
是否可以跨域访问?可以不可以

SpringMVC如何设定重定向和转发?

  • 转发:在返回值前面加"forward:",比如:forward:user.do?name=method4
  • 重定向:在返回值前面加"redirect:",比如:redirect:http://www.baidu.com

Servlet如何设定重定向和转发?

  • 转发:request.getRequestDispatcher(user.do?name=method4).forward(request, response)
  • 重定向:response.sendRedirect(http://www.baidu.com)

SpringMVC默认处理方式就是请求转发还是重定向?
在SpringMVC中,处理请求时,默认返回的是View组件的名称,是按照转发进行处理的。
一般我们传值到页面是通过 request.setAttribute("key", value); 方式,所以可以看出默认是请求转发的。

向前端页面提供数据的集中方式:

  • 【不推荐】通过HttpServletRequest转发 request.setAttribute("key", value);
  • 【不常用】通过ModelAndView转发数据
    ModelAndView中,Model表示的就是转发的数据,可以通过ModelAndView(String viewName, Map<String, ?> model)构造方法封装Model,而这里Model的类型就是Map<String, Object>,代码:
public ModelAndView login(String username, String password) {	
	// 封装需要转发的数据
	Map<String, Object> model= new HashMap<String, Object>();
	model.put("username", username);
	model.put("password", password);
	// 创建返回的对象
	ModelAndView mv = new ModelAndView("login", model);
	// 执行返回
	return mv;
}
  • 【推荐】通过ModelMap转发数据
    在处理请求的方法中,添加ModelMap类型的参数,当需要转发数据时,调用它的addAttribute(String name, Object value)方法即可封装数据,如果需要封装多条数据,则多次调用该方法即可:
	public String login(String username, String password, ModelMap modelMap) {
		// 转发数据:直接向参数modelMap中封装数据
		modelMap.addAttribute("username", username);
		// 返回
		return "login";
	}

运用场景:
Forward:一用于用户登陆的时候,根0角色转发到相应的模块. redirect:一般用于用户注销登
陆时返回主页面和跳转到其它的网站等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值