SpringMVC学习总结(五)——转发和重定向

本文详细介绍了SpringMVC中转发与重定向的区别及应用场景。转发主要用于控制器内部页面跳转,而重定向用于控制器间的跳转。文章通过具体代码示例展示了这两种跳转方式的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


      

       在SpringMVC中转发和重定向最重要的区别就是:应用场景不同,换句话说,就是需求不同。

如果是直接放回到jsp页面:则如下边两种方式均可。

 1·

	@RequestMapping("/add/{itemid}")
	public String addCart(@PathVariable long itemid,int num,
			HttpServletRequest request,HttpServletResponse response){
		//获取商品数量
		try {
		    cartservice.getItemByitemid(itemid, num, request, response);
			return "cartSuccess";
		} catch (Exception e) {
			e.printStackTrace();
			return "cartSuccess";
		}
	}
2·return "cartSuccess"同样可换成下边这种方式
 return "forward:cartSuccess";

以上两种都是转发的方式,实现效果一致。

注意:上边写法的前提是在SpringMVC的配置文件中已经配置好了前缀和后缀,这样在代码中就可省去无用代码。

 

但如果是在controllercontroller之间的跳转,就要用到redirect重定向了。如下:

	/**
	 * 修改购物车商品的数量
	 * @param itemId
	 * @param num
	 * @return
	 */
	@RequestMapping("/update/num/{itemId}/{num}")
	@ResponseBody
	public String updateNum(@PathVariable long itemId,@PathVariable int num,
			HttpServletRequest request,HttpServletResponse response){
		TaotaoResult result = cartservice.updateCartItem(itemId,num,request,response);
		return "redirect:/cart/cart.html";
	}
	
    重定向后,该返回值就会去请求controller的注解RequestMapping为cart/cart的方法了。(.html是在web.xml文件中配置的拦截格式)。


### Spring MVC 中重定向转发的区别及用法 在Spring MVC框架内,`forward``redirect`是两种不同的视图解析机制。 当使用`forward`时,请求会被内部转发到另一个资源而不会改变浏览器地址栏中的URL。这通常发生在服务器端处理过程中,在同一应用程序上下文中执行。这种方式效率较高因为不需要额外的HTTP请求[^1]。 对于`redirect`而言,则会告知客户端发起一个新的GET请求指向指定位置;这意味着用户的浏览器将会看到更新后的URL,并且这个过程涉及两次独立的HTTP交互——一次是从原始页面到服务器,另一次是由服务器返回给新的目标路径。这种方法可以有效解决表单重复提交等问题,因为它强制刷新了整个流程并清除了之前的POST数据[^2]。 下面是一个简单的例子来展示如何实现这两种操作: #### 使用 `forward` ```java @RequestMapping("/exampleForward") public String exampleForward(Model model){ // 添加模型属性... return "forward:/targetView"; } ``` 此代码片段表示控制器接收到 `/exampleForward` 请求后,它将把该请求直接转交给名为 `/targetView` 的其他组件继续处理而不更改客户端显示的 URL 地址。 #### 实现 `redirect` ```java @RequestMapping("/exampleRedirect") public String exampleRedirect(){ return "redirect:/newPage"; } ``` 这里展示了如果希望用户访问 `/exampleRedirect` 后被引导至 `/newPage` ,则应采用上述方式编写逻辑。这样做不仅改变了浏览器中呈现出来的链接形式,还意味着任何先前存在的 POST 数据都将丢失,从而防止潜在的安全隐患或不必要的副作用发生。 需要注意的是,在Portlet环境中由于其特殊性,传统的基于Servlet API的方法如`sendRedirect`不可行,所以像`RedirectView`以及带有`redirect:`前缀的方式也不适用于此类场景下的MVC应用开发。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值