返回靜態數據

在Java項目中,往往不會一直返回某某數據,而是會返回一個靜態頁面,那么,如何正確返回一個靜態頁面呢??

要想成功的返回一個靜態頁面前提是必須要有一個靜態頁面:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>index首頁</title>
</head>
<body><h1>hello word!!!</h1><p>this is a html page</p>
</body>
</html>

靜態頁面的運行效果為:

?既然有了靜態頁面,那么,我們便考慮如何用Java語言正確返回靜態頁面吧!!

返回靜態頁面代碼:

//@RestController
@Controller
@RequestMapping("/return")
public class returnController {@RequestMapping("index")public String returnIndex(){return "/index.html";}
}

?

在這段代碼中,使用了新的注解@Controller(返回視圖)

啟動程序,在瀏覽器輸入:http://127.0.0.1:8080/return/index

這便是啟動成功了!!

值得注意的是:筆者一開始使用的是注解@RestController,然而很不湊巧的是不能返回靜態頁面!

下述為錯誤代碼(Bug)

@RestController
//@Controller
@RequestMapping("/return")
public class returnController {@RequestMapping("index")public String returnIndex(){return "/index.html";}
}

當然,在瀏覽器輸入:127.0.0.1:8080/return/index

這便是不成功!!沒能正確返回靜態頁面!!

上面兩個差異存在的主要區別在于:@RestController與@Controller這兩個注解!!

@RestController與@Controller的異同點在哪?

`@RestController`和`@Controller`注解都是Spring框架中用于定義控制器的注解,但它們在使用場景和功能上存在一些差異。具體分析如下:

相同點
- 生命周期:無論是使用`@Controller`還是`@RestController`,它們的生命周期都持續到程序運行時。

不同點
- 組合注解:`@RestController`是`@Controller`和`@ResponseBody`這兩個注解的結合體,它同時具有這兩個注解的功能。這意味著在`@RestController`注解的類中,方法返回的對象會自動序列化為JSON或其他響應體格式,并寫入到HTTP響應體中。
- 使用場景:`@Controller`通常用于處理HTTP請求并返回視圖(View),適合傳統的MVC模式,其中方法返回的是模型和視圖名稱。而`@RestController`主要用于構建RESTful API,方法返回的是數據對象,這些對象會自動轉換為JSON或XML格式的響應體,適合前后端分離的應用架構。

總的來說,`@RestController`注解更適合于創建RESTful Web服務,而`@Controller`注解更適用于需要返回視圖的傳統Web應用。在實際開發中,選擇使用哪個注解取決于你的應用場景和需求。

那我在所有的情況下都寫@RestController注解可以嗎?

在大多數情況下,你可以使用`@RestController`注解來創建控制器,特別是當你正在構建一個RESTful API時。然而,并不是所有情況下都適合使用`@RestController`。以下是一些考慮因素:

  1. 返回類型:如果你的控制器方法需要返回視圖(例如,使用Thymeleaf、FreeMarker等模板引擎),那么你應該使用`@Controller`,因為`@RestController`默認將返回對象序列化為JSON或XML格式,而不是渲染視圖。
  2. 靈活性:`@Controller`注解提供了更多的靈活性,因為它不自動將返回值序列化為JSON。這意味著你可以根據需要選擇返回視圖、下載文件、渲染PDF等。
  3. 混合需求:在一個控制器類中,你可能有一些方法需要返回JSON數據,而另一些方法需要返回視圖。在這種情況下,使用`@Controller`注解并結合`@ResponseBody`注解(在需要返回JSON的方法上)會更加合適。
  4. 內容協商:如果你需要根據請求頭信息(如`Accept`頭)來決定返回JSON還是其他格式(如HTML),那么使用`@Controller`可能更靈活,因為它允許你手動處理這些邏輯。
  5. API與視圖混合:在一些舊的或傳統的Spring MVC應用中,可能需要在同一個控制器中同時處理API請求和視圖渲染。在這種情況下,`@Controller`可能是更好的選擇。

總結來說,雖然`@RestController`注解在許多現代Web應用中非常有用,但并不是所有場景都適用。如果你需要返回視圖或者需要更復雜的響應類型,那么`@Controller`可能是更合適的選擇。在實際應用中,你應該根據你的具體需求和應用場景來選擇合適的注解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719699.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何讓 JOIN 跑得更快?

JOIN 一直是數據庫性能優化的老大難問題&#xff0c;本來挺快的查詢&#xff0c;一旦涉及了幾個 JOIN&#xff0c;性能就會陡降。而且&#xff0c;參與 JOIN 的表越大越多&#xff0c;性能就越難提上來。 其實&#xff0c;讓 JOIN 跑得快的關鍵是要對 JOIN 分類&#xff0c;分…

Effective Programming 學習筆記

1 基本語句 1.1 斷言 在南溪看來&#xff0c;斷言可以用來有效地確定編程中當前代碼運行的前置條件&#xff0c;尤其是以下情況&#xff1a; 第三方工具庫對輸入數據的依賴&#xff0c;例如&#xff1a;minitouch庫對Android版本的要求

第三百八十一回

文章目錄 1. 概念介紹2. 修改方法 015buttonStyle.png2.1 修改形狀2.2 修改顏色2.3 修改位置 3. 示例代碼4. 內容總結 我們在上一章回中介紹了"如何創建以圖片為背景的頁面"相關的內容&#xff0c;本章回中將介紹如何修改按鈕的形狀.閑話休提&#xff0c;讓我們一起T…

2024年華為OD機試真題-文件緩存系統-Python-OD統一考試(C卷)

題目描述: 請設計一個文件緩存系統,該文件緩存系統可以指定緩存的最大值(單位為字節)。 文件緩存系統有兩種操作:存儲文件(put)和讀取文件(get) 操作命令為put fileName fileSize或者get fileName 存儲文件是把文件放入文件緩存系統中;讀取文件是從文件緩存系統中訪問已存…

06. Nginx進階-Nginx代理服務

proxy代理功能 正向代理 什么是正向代理&#xff1f; 正向代理&#xff08;forward proxy&#xff09;&#xff0c;一個位于客戶端和原始服務器之間的服務器。 工作原理 為了從原始服務器獲取內容&#xff0c;客戶端向代理發送一個請求并指定目標&#xff08;即原始服務器…

為不同文章形式選擇不同的WordPress文章模板

在寫文章的時候選擇不同的文章形式&#xff0c;然后打開文章的時候會調用不同文章形式的模板。比如&#xff0c;文章形式為video &#xff0c;就調用single-video.php模板&#xff0c;其它文章形式類似&#xff0c;可以添加多個文章樣式。 //為不同文章形式的內容添加不同的si…

chatgpt-next-web搭建教程,超低成本部署屬于自己的ChatGPT

隨著AI的應用變廣&#xff0c;各類AI程序已逐漸普及&#xff0c;尤其是在一些日常辦公、學習等與撰寫/翻譯文稿密切相關的場景&#xff0c;大家都希望找到一個適合自己的穩定可靠的ChatGPT軟件來使用。 ChatGPT-Next-Web就是一個很好的選擇。它是一個Github上超人氣的免費開源…

Spring AOP在業務中常見的使用方式

目錄 1、動態代理 1.1、jdk動態代理 1.2、cglib動態代理 1.3、動態代理的好處 2、什么是AOP 2.1、AOP常用術語 2.2、切面的構成 3、使用aspectJ框架實現AOP 3.1、aspectJ簡介 聲明實現類ServiceImpl 聲明切面 3.3、AfterReturning后置通知 切面類代碼 3.4、Aroun…

2核4G云服務器租用價格_2核4G云主機優惠價格_2024年報價

租用2核4G服務器費用價格&#xff0c;2核4G云服務器多少錢一年&#xff1f;1個月費用多少&#xff1f;阿里云2核4G服務器30元3個月、輕量應用服務器2核4G4M帶寬165元一年、企業用戶2核4G5M帶寬199元一年&#xff1b;騰訊云輕量2核4G服務器5M帶寬165元一年、252元15個月、540元三…

Spring IOC在業務中常見的使用方式

目錄 1、什么是IOC 2、java實現創建對象的方式有哪些 3、基于配置文件的di實現 3.1、什么是di 3.2、入門案例 3.3、環境搭建 接口和實現類 ioc配置文件 測試程序 3.4、案例總結 3.5、簡單類型屬性的賦值&#xff08;set注入&#xff09; set注入要求 JavaBean sp…

前端項??件很?,?且??訪問速度慢,如何在前端側提?性能?

1. 網絡優化 減少HTTP請求的數量&#xff0c;可以通過合并CSS和JavaScript文件來實現。使用CDN&#xff08;內容分發網絡&#xff09;來加速靜態資源的加載速度。對圖片進行壓縮&#xff0c;選擇正確的格式&#xff0c;并實現懶加載技術&#xff0c;以減少頁面初次加載時的數據…

代碼隨想錄day12(2)字符串:重復的子字符串(leetcode459)

題目要求&#xff1a;給定一個非空的字符串&#xff0c;判斷它是否可以由它的一個子串重復多次構成。給定的字符串只含有小寫英文字母&#xff0c;并且長度不超過10000。 思路&#xff1a; 一、首先對于暴力解法&#xff0c;可以枚舉所有的字串進行判斷。但是枚舉時實際上只需…

rt thread stdio如何同時生成bin和hex

一、rt thread stdio默認生成bin文件&#xff1a; rt thread stdio 軟件編譯時&#xff0c;默認生成bin文件&#xff1b; 二、rt thread stdio如何同時生成bin和hex 右鍵單擊-->項目-->屬性-->C/C構建-->設置-->構建步驟-->(構建后步驟)命令&#xff1a; …

視頻如何無水印保存?這三種下載方法趕緊收藏

在互聯網時代&#xff0c;視頻已成為我們獲取信息、娛樂休閑的重要途徑。然而&#xff0c;有時我們想要保存或分享某些視頻時&#xff0c;卻發現下載起來卻帶有水印。為了解決這個問題&#xff0c;今天給大家帶來幾個無水印下載的方法。 方法一&#xff1a;水印云 水印云是一…

Python使用模塊和庫編程

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 路在腳下&#xff0c;勇往直前&#x…

Spring Boot2.2.4版本啟動項目時,訪問登錄接口顯示頁面不存在

問題觸發場景&#xff1a;IDEA 2023.3.4 SpringBoot 2.2.4 上面4張圖片分別是項目結構、Spring Boot啟動配置、SpringMVC配置和頁面展示在項目中存放的位置&#xff0c;表面上看上去沒有太大問題&#xff0c;項目應該會達到預期結果&#xff0c;但是bug總是在不經意間出現&…

MySQL數據庫運維第一篇(日志與主從復制)

文章目錄 一、錯誤日志二、二進制日志三、查詢日志四、慢查詢日志&#xff08;記錄超時的sql語句&#xff09;五、主從復制概括六、主從復制原理七、搭建主從復制八、主從復制的測試 在這篇深入的技術文章中&#xff0c;作者將以明晰透徹的方式詳細介紹MySQL數據庫中關鍵的日志…

XGB-16:自定義目標和評估指標

概述 XGBoost被設計為一個可擴展的庫。通過提供自定義的訓練目標函數和相應的性能監控指標&#xff0c;可以擴展它。本文介紹了如何為XGBoost實現自定義的逐元評估指標和目標。 注意&#xff1a; 排序不能自定義 在接下來的兩個部分中&#xff0c;將逐步介紹如何實現平方對數…

【EAI 027】Learning Interactive Real-World Simulators

Paper Card 論文標題&#xff1a;Learning Interactive Real-World Simulators 論文作者&#xff1a;Mengjiao Yang, Yilun Du, Kamyar Ghasemipour, Jonathan Tompson, Leslie Kaelbling, Dale Schuurmans, Pieter Abbeel 作者單位&#xff1a;UC Berkeley, Google DeepMind, …

【 Docker 容器詳細介紹和說明】

Docker 容器詳細介紹和說明 Docker 容器詳細介紹和說明Docker 安裝步驟&#xff08;以Ubuntu為例&#xff09;&#xff1a;使用Docker創建并運行容器&#xff1a;VSCode遠程連接Docker容器&#xff1a;步驟1&#xff1a;配置Docker環境步驟2&#xff1a;配置PyCharm步驟3&#…