原文地址: SpringBoot系列教程web篇之重定向java
前面介紹了spring web篇數據返回的幾種經常使用姿式,當咱們在相應一個http請求時,除了直接返回數據以外,還有另外一種常見的case -> 重定向;git
好比咱們在逛淘寶,沒有登陸就點擊購買時,會跳轉到登陸界面,這其實就是一個重定向。本文主要介紹對於後端而言,能夠怎樣支持302重定向github
首先得搭建一個web應用纔有可能繼續後續的測試,藉助SpringBoot搭建一個web應用屬於比較簡單的活;web
建立一個maven項目,pom文件以下spring
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7</version>
<relativePath/> <!-- lookup parent from update -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
複製代碼
依然是通常的流程,pom依賴搞定以後,寫一個程序入口json
/** * Created by @author yihui in 15:26 19/9/13. */
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
複製代碼
這種case一般適用於返回視圖的接口,在返回的字符串前面添加redirect:
方式來告訴Spring框架,須要作302重定向處理後端
@Controller
@RequestMapping(path = "redirect")
public class RedirectRest {
@ResponseBody
@GetMapping(path = "index")
public String index(HttpServletRequest request) {
return "重定向訪問! " + JSON.toJSONString(request.getParameterMap());
}
@GetMapping(path = "r1")
public String r1() {
return "redirect:/redirect/index?base=r1";
}
}
複製代碼
上面給出了一個簡單的demo,當咱們訪問/redirect/r1
時,會重定向到請求/redirect/index?base=r1
,實際測試結果以下瀏覽器
注意上面的截圖,咱們實際訪問的鏈接是 http://127.0.0.1:8080/redirect/index?base=r1
,在瀏覽器中的表現則是請求url變成了http://127.0.0.1:8080/redirect/index?base=r1
;經過控制檯查看到的返回頭狀態碼是302服務器
說明websocket
@ResponseBody
註解,不然返回的字符串被當成普通字符串處理直接返回,並不會實現重定向前面一篇說到SpringMVC返回數據的時候,介紹到能夠直接經過HttpServletResponse
往輸出流中寫數據的方式,來返回結果;咱們這裏也是利用它,來實現重定向
@ResponseBody
@GetMapping(path = "r2")
public void r2(HttpServletResponse response) throws IOException {
response.sendRedirect("/redirect/index?base=r2");
}
複製代碼
從上面的demo中,也能夠看出這個的使用方式很簡單了,直接調用javax.servlet.http.HttpServletResponse#sendRedirect
,並傳入須要重定向的url便可
這裏主要介紹了兩種常見的後端重定向方式,都比較簡單,這兩種方式也有本身的適用場景(固然並不絕對)
redirect
的方式,更加適用於視圖的跳轉,從一個網頁跳轉到另外一個網頁HttpServletResponse#sendRedirec
的方式更加靈活,能夠在後端接收一次http請求生命週期中的任何一個階段來使用,好比有如下幾種常見的場景
盡信書則不如,以上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛