springmvc的转发和重定向的案例演示 到底什么是转发和重定向两者有什么区别?

 案例演示

在Spring MVC中,你可以使用`ModelAndView`或直接返回`String`来实现转发和重定向。以下是转发和重定向的示例:

### 1. 使用`ModelAndView`

#### 转发(Forward)

```java

@RequestMapping("/forwardDemo")
public ModelAndView forwardWithModelAndView() {
    ModelAndView mav = new ModelAndView();
    mav.addObject("message", "This is a forwarded message.");
    mav.setViewName("forward:/targetPage");
    return mav;
}


```

在上述代码中,`forward:/targetPage`将请求转发到`/targetPage` URL。

#### 重定向(Redirect)

```java

@RequestMapping("/redirectDemo")
public ModelAndView redirectToExternalURLWithModelAndView() {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("redirect:http://www.google.com");
    return mav;
}


```

上述代码将请求重定向到外部URL `http://www.google.com`。

### 2. 直接返回`String`

#### 转发

```java

@RequestMapping("/forwardDemo")
public String forwardWithString() {
    return "forward:/targetPage";
}


```

#### 重定向

```java

@RequestMapping("/redirectDemo")
public String redirectWithString() {
    return "redirect:http://www.google.com";
}


```

在这些示例中,`/targetPage`是你的应用中另一个处理方法的URL,而`http://www.google.com`是外部网站的URL。根据你的具体需求,你可以将这些URL替换为你想要的任何有效URL。

注意,当你使用`forward`时,客户端(例如浏览器)不知道这个转发的存在,因为它是在服务器内部发生的。而使用`redirect`时,浏览器会收到一个新的URL,并导航到该URL。

什么是转发和重定向    两者有什么区别?

转发(Forward)和重定向(Redirect)是Web开发中两种常用的导航方式,它们在功能和用途上有显著的区别:

### 转发 (Forward)

1. **服务器端行为**:转发是在服务器内部完成的。当一个请求到达服务器,服务器可以将这个请求转发给另一个资源进行处理,客户端并不知道发生了转发。
   
2. **地址不变**:在浏览器地址栏中,用户看到的URL不会发生变化,因为整个转发过程在服务器端完成,客户端没有被重新定向到其他地址。
   
3. **效率较高**:由于整个过程在同一个服务器内部完成,没有额外的客户端到服务器的往返,因此效率相对较高。
   
4. **共享请求范围的数据**:在转发前后,可以在请求范围内共享数据,因为它们是同一次请求的不同部分。

### 重定向 (Redirect)

1. **客户端行为**:重定向涉及到两次请求。首先,客户端发送一个请求到服务器,然后服务器以一个特殊的响应指示客户端向另一个URL发送第二次请求。

2. **地址改变**:浏览器地址栏中的URL会改变,因为浏览器被指示访问一个新的URL。

3. **效率相对较低**:由于涉及两次完整的客户端-服务器往返,所以相对于转发,重定向的效率较低。

4. **无法共享请求范围的数据**:由于重定向涉及两次完全独立的请求,所以你不能在两次请求之间共享请求范围的数据。但是,你可以使用会话范围或URL参数来传递数据。

### 总结

- **转发**是服务器内部的行为,只涉及一次请求,地址栏不变。
- **重定向**涉及到客户端和两次请求,地址栏会显示新的URL。

选择使用转发还是重定向取决于你的具体需求。例如,如果你完成了表单的提交并想防止重复提交,重定向通常是一个好选择。如果你只是想在服务器内部导航,而不想改变浏览器中显示的URL,那么转发可能更合适。

你可能感兴趣的:(tomcat,servlet,spring,java,开发语言)