StringMVC

目錄

一,MVC定義

二,SpringMVC的基本使用?

2.1建立連接 - @RequestMapping("/...")

?編輯

2.2請求

1.傳遞單個參數

2.傳遞多個參數

3.傳遞對象

4.參數重命名

5.傳遞數組

6. 傳遞集合

7.傳遞JSON數據

8. 獲取url中數據

9. 傳遞文件

10.獲取Cookie

11.獲取session

12.獲取header

?編輯

2.3響應

1.返回靜態頁面

2.返回html片段

3. 返回JSON

?4.設置狀態碼

5.設置Header


一,MVC定義

MVC,英文名Model-View-Controller,是軟件工程中的一種軟件架構模式。MVC模式分離了應用程序的數據訪問,用戶界面,和處理邏輯。

  • Model(模型)模型是用來處理數據和業務邏輯,在MVC 模式中,模型與視圖是分離的,模型并不知道視圖的存在。
  • View(視圖)視圖是用戶看到和交互的界面,例如網頁,窗口等。視圖通常是動態生成的。
  • Controller(控制器)控制器接收用戶的請求,并調用模型和視圖去完成用戶的需求。控制器本身不輸出任何東西和做任何處理,它只是接收請求并決定調用哪個模型構件和哪個視圖來處理請求。

二,SpringMVC的基本使用?

學習Spring MVC 就是學習如何通過瀏覽器和用戶程序進行交互,主要分為一下三個方面:

  1. 建立連接:將瀏覽器于Java程序連接起來,就是訪問一個網址能調用Spring程序
  2. 接收請求:用戶請求可能會帶一些參數,要學會在程序中接收這些參數
  3. 返回響應:直接完業務邏輯后,要將程序運行的結果返回給用戶

2.1建立連接 - @RequestMapping("/...")

@RequestMapping 注解是用來注冊接口的路由映射的。表示服務接收到請求時,路徑為 /... 的請求會調用對應的方法。

該注釋既可以修飾方法也可以修飾類,如果兩者同時加注釋的話,它的訪問地址就是 類路徑 + 方法路徑,舉個例子:

@RestController
@RequestMapping("/test")
public class Test {@RequestMapping("/hello")public String test1(){return "hello world!";}
}
//這里的路徑是指:類路徑(/test)+ 方法路徑(/hello)

@RequestMapping注釋既支持post請求也支持get請求,也可以限定只支持其中一個請求方式,代碼如下:

@RestController
@RequestMapping("/test")
public class Test {//如果只有一個參數,就會默認賦值給value這個屬性,如果有多個參數,就需要屬性名 = ...//此處表示只支持post請求@RequestMapping(value = "/hello",method = RequestMethod.POST)public String test1(){return "hello world!";}
}

2.2請求

一般的參數名要與請求中給的數據一致

1.傳遞單個參數

    @RequestMapping("/r1")public String r1(String name){return "name = " + name;}

2.傳遞多個參數

    @RequestMapping("/r2")public String r2(String name, Integer age){return "name = " + name+", age = " + age;}

3.傳遞對象

    @RequestMapping("/r3")public String r3(User user){//User是單獨創建的一個對象,需要有構造方法和get()return user.toString();}

4.參數重命名

當請求中的給的名稱與參數名不一致時,可以使用 @RequestParam注解

    @RequestMapping("/r4")public String r4(@RequestParam("name") String username, Integer age){return "name = " + username+", age = " + age;}

使用@RequestParam注解還有一點需要注意:它修飾的參數默認是必須傳值的,如果沒有傳值,就會報錯。當然也可以設置為非必傳,代碼如下:

    @RequestMapping("/r4")public String r4(@RequestParam(value = "name", required = false) String username, Integer age){return "name = " + username+", age = " + age;}

5.傳遞數組

    @RequestMapping("/r5")public String r5(int[] arr){return Arrays.toString(arr);}

有兩種請求方式 :

6. 傳遞集合

集合參數:和數組類似, 同?個請求參數名有為多個, 且需要使? @RequestParam 綁定參數關系
默認情況下,請求中參數名相同的多個值,是封裝到數組. 如果要封裝到集合,必須使用@RequestParam 綁定參數關系。
此次的請求與數組一致,就不再貼圖了。
    @RequestMapping("/r6")public String r6(@RequestParam List<Integer> lst){return lst.toString();}

7.傳遞JSON數據

JSON就是?種數據格式, 有自己的格式和語法, 使用文本表示?個對象或數組的信息, 因此
JSON本質是字符串. 主要負責在不同的語言中數據傳遞和交換,它是以鍵值對的形式表示,主要還是表示一個對象。
JSON給的數據是在請求的正文當中,所以需要使用@RequestBody注解,被該注解修飾的參數需要到請求正文中查找對應的數據,該注釋只有一個屬性就是required,也就是說它也可以設置該參數是否必傳。
    @RequestMapping("/r7")public String r7(@RequestBody User user){return user.toString();}

8. 獲取url中數據

這里需要使用@PathVariable,該注釋主要作用在url路徑的數據綁定上,即默認參數寫在url上。該注釋也可以設置成非必傳,但是一般都是默認的。

    @RequestMapping("/r8/{name}")public String r8(@PathVariable String name){return name;}

9. 傳遞文件

     @RequestMapping("/r9")public String r9(@RequestPart MultipartFile file) throws IOException {String filename = file.getOriginalFilename();//獲取文件名file.transferTo(new File("D:/二次元/"+filename));//將文件上傳到指定的路徑return filename;}

10.獲取Cookie

    @RequestMapping("/r10")//這里的兩個參數,是spring內置的,用到的時候可以直接加上public String r10(HttpServletRequest request, HttpServletResponse response) {}//獲取cookie的第一種寫法,能得到所有的cookie@RequestMapping("/r10")public String r10(HttpServletRequest request) {Cookie[] cookies = request.getCookies();String res = "";for(Cookie x : cookies){res = res +  x.getName() + ":" + x.getValue();}return res;}//第二種寫法,獲取名為Cookie_2對應value@RequestMapping("/r11")public String r11(@CookieValue("Cookie_2") String value) {return value;}

11.獲取session

    //三種方式都行@RequestMapping("/r12")public String r12(HttpServletRequest request) {HttpSession session = request.getSession();String username = (String)session.getAttribute("username");return username;}@RequestMapping("/r13")public String r13(HttpSession session) {String username = (String)session.getAttribute("username");return username;}@RequestMapping("/r14")public String r14(@SessionAttribute("username") String name) {return name;}

12.獲取header

    @RequestMapping("/getHeader")public String getHeader(HttpServletRequest request){//請求頭中的數據是以鍵值對的形式存儲,所以和map的用法差不多String userAgent = request.getHeader("User-Agent");return userAgent;}@RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User-Agent") String userAgent){return userAgent;}

2.3響應

1.返回靜態頁面

@Controller
@RequestMapping("/demo")
public class Demo {@RequestMapping("/r1")public String r1(){return "/index.html";}
}

這里需要講解一下@RequestController注解與@Controller注解的區別,先看一下它們的源碼:

//@Controller
@Target({ElementType.TYPE})//表示能作用的目標(比如:類,方法)
@Retention(RetentionPolicy.RUNTIME)//表示生命周期
@Documented
@Component
public @interface Controller {@AliasFor(annotation = Component.class)String value() default "";
}
//@ResquestController
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
}

我們可以發現,@RequestController = @Controller + @ResponseBody,而@Controller注釋只負責告訴Spring幫我們管理哪些程序,所以關鍵是@ResponsBody注釋,它的作用是保證返回的一定是數據,如果不加該注釋,那么默認返回的是一個網頁。

?@ResponsBody注解既可以修飾類,也可以修飾方法,修飾類,那么該類中的所有方法都返回數據;修飾方法,表示該方法返回的數數據,當一個類中的方法既要返回數據也要返回頁面時,要給該類使用@Controller注解,再給返回數據的方法加上@ResponseBody注解。

2.返回html片段

直接返回數據,spring會根據返回的結果,動態設置response的content-type

    @ResponseBody@RequestMapping("/r2")public String r2(){return "<h1>.....</h1>";}

3. 返回JSON

類和哈希都會自動轉換成 json格式來返回

    @ResponseBody@RequestMapping("/r3")public User r3(){User user = new User();user.setName("zhangsan");user.setAge(18);user.setSex("男");return user;}

    @ResponseBody@RequestMapping("/r4")public Map<String, String> r4(){HashMap map = new HashMap();map.put("key", "value");map.put("zhangsan", "lisi");return map;}

?4.設置狀態碼

    @ResponseBody@RequestMapping("/r7")public String r7(HttpServletResponse response){response.setStatus(404);return "設置成功";}

5.設置Header

Http響應報頭也會向客戶端傳遞一些信息,比如服務程序的名稱,請求資源已移動到新地址等,如:Content-Type,Local等。這些信息通過@RequestMapping注解來實現,先看看它的源碼:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};
}
  • value:指映射的URL
  • method:指請求的method類型,比如:post,get,put...
  • consumes:指處理請求(request)的提交內容類型(Content-Type)
  • produces:指返回提交內容類型,僅當request請求頭中的Accept類型包含該指定類型才返回
  • params:request中必須包含某參數值時,才讓該方法處理
  • header:request中必須包含某指定的header參數值時,才讓該方法處理

?設置Content-Type

    @ResponseBody@RequestMapping(value = "/r9",produces = "application/json")public String r9(){return "1111";}

自定義Header:這里的key和value是可以自己隨意指定的

    @ResponseBody@RequestMapping("/r10")public String r10(HttpServletResponse response) {response.setHeader("key","value");return "設置成功";}

?

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

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

相關文章

怎么通過OpenAI API調用其多模態大模型(GPT-4o)

現在只要有額度&#xff0c;大家都可以調用OpenAI的多模態大模型了&#xff0c;例如GPT-4o和GPT-4 Turbo&#xff0c;我一年多前總結過一些OpenAI API的用法&#xff0c;發現現在稍微更新了一下。主要參考了這里&#xff1a;https://platform.openai.com/docs/guides/vision 其…

python數據類型之元組、集合和字典

目錄 0.三者主要作用 1.元組 元組特點 創建元組 元組解包 可變和不可變元素元組 2.集合 集合特點 創建集合 集合元素要求 集合方法 訪問與修改 子集和超集 相等性判斷 集合運算 不可變集合 3.字典 字典特點 字典創建和常見操作 字典內置方法 pprin模塊 0.…

k8s——Pod詳解

一、Pod基礎概念 1.1 Pod定義 Pod是kubernetes中最小的資源管理組件&#xff0c;Pod也是最小化運行容器化應用的資源對象。一個Pod代表著集群中運行的一個進程。kubernetes中其他大多數組件都是圍繞著Pod來進行支撐和擴展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod運行…

繆爾賽思又來到了你的面前(哈希)

定義一棵根節點為 1 1 1&#xff0c; n ( 2 ≤ n ≤ 1 0 3 ) n(2≤n≤10^3) n(2≤n≤103) 個節點的樹的哈希值為&#xff1a; H ∑ i 1 n X i Y f a ( i ) m o d 998244353 H∑^n_{i1}X^iY^{fa(i)}\ mod\ 998244353 Hi1∑n?XiYfa(i) mod 998244353 f a ( i ) fa(i) fa(i)…

斷網之后的頁面,Autox.js是點擊還是上下滑動比較好?

在處理斷網之后的頁面&#xff0c;選擇點擊還是上下滑動作為刷新操作&#xff0c;取決于應用的設計和用戶界面。通常&#xff0c;這兩種操作都可以作為刷新頁面的方式&#xff0c;但它們各自有不同的適用場景&#xff1a; 點擊刷新 - 適用場景&#xff1a;如果應用提供了一個明…

Java進階學習筆記7——權限修飾符

什么是權限修飾符&#xff1f; 就是用來限制類中的成員&#xff08;成員變量、成員方法、構造器、代碼塊....&#xff09;能夠被訪問的范圍。 protected使用的比較少&#xff0c;但是程序員還是要閱讀代碼&#xff0c;看官方文檔是怎么寫的&#xff0c;都會接觸到protected修飾…

C#串口通信-串口相關參數介紹

串口通訊(Serial Communication)&#xff0c;是指外設和計算機間&#xff0c;通過數據信號線、地線等&#xff0c;按位進行傳輸數據的一種雙向通訊方式。 串口是一種接口標準&#xff0c;它規定了接口的電氣標準&#xff0c;沒有規定接口插件電纜以及使用的通信協議&#xff0c…

ssh 配置 authorized_keys 后無法免密登錄

查看日志&#xff1a; tail -f /var/log/auth.log May 25 15:55:13 121 sudo: pam_unix(sudo:session): session opened for user root by root(uid0) May 25 15:55:13 121 sshd[550561]: Received signal 15; terminating. May 25 15:55:13 121 sshd[922866]: Server liste…

性能測試場景的設計方法

引用&#xff1a;根據2008年Aberdeen Group的研究報告&#xff0c;對于Web網站&#xff0c;1秒的頁面加載延遲相當于少了11%的PV&#xff08;page view&#xff09;&#xff0c;相當于降低了16%的顧客滿意度。如果從金錢的角度計算&#xff0c;就意味著&#xff1a;如果一個網站…

「探討」:什么是網絡審計?好用的網絡審計系統推薦【圖文詳解】

網絡是企業運營、政府管理、個人生活不可或缺的基礎設施。 然而網絡安全問題卻日益凸顯&#xff0c;數據泄露、網絡攻擊、欺詐行為等風險日益嚴重。 一、網絡審計的定義 網絡審計&#xff0c;又稱信息技術審計或電子審計&#xff0c;是指審計人員運用專業技能和工具&#xff…

fdk-aac將aac格式轉為pcm數據

int sampleRate 44100; // 采樣率int sampleSizeInBits 16; // 采樣位數&#xff0c;通常是16int channels 2; // 通道數&#xff0c;單聲道為1&#xff0c;立體聲為2FILE *m_fd NULL;FILE *m_fd2 NULL;HANDLE_AACDECODER decoder aacDecoder_Open(TT_MP4_ADTS, 1);if (!…

實戰之快速完成 ChatGLM3-6B 在 GPU-8G的 INT4 量化和本地部署

ChatGLM3 (ChatGLM3-6B) 項目地址 https://github.com/THUDM/ChatGLM3大模型是很吃CPU和顯卡的&#xff0c;所以&#xff0c;要不有一個好的CPU&#xff0c;要不有一塊好的顯卡&#xff0c;顯卡盡量13G&#xff0c;內存基本要32GB。 清華大模型分為三種(ChatGLM3-6B-Base&…

“大數據建模、分析、挖掘技術應用研修班”的通知!

隨著2015年9月國務院發布了《關于印發促進大數據發展行動綱要的通知》&#xff0c;各類型數據呈現出了指數級增長&#xff0c;數據成了每個組織的命脈。今天所產生的數據比過去幾年所產生的數據大好幾個數量級&#xff0c;企業有了能夠輕松訪問和分析數據以提高性能的新機會&am…

Vue3中為Ant Design Vue中table的checkbox加tooltip、popover

問題的產生 Vue版本&#xff1a;3.3.13 ant-design-vue 版本&#xff1a;3.x.x 在工作時遇到一個場景&#xff0c;需要在 ant-table 的 checkbox 被禁用的時候提示原因&#xff0c;但是在 ant-design-vue 文檔中并沒有發現有相關介紹。 首先我去看了issue中是否有提到相關問題…

【金磚賽】基于docker搭鏈

一&#xff0e;基于docker搭建 啟動并檢查是否啟動成功 #啟動命令 sudo systemctl start docker#檢查命令 sudo systemctl status docker修改權限 chomd 777 build_chain.sh 進行4節點聯盟鏈搭建&#xff08;舉例&#xff09; sudo ./build_chain.sh -d -l "127.0.0.1…

OOM不會導致JVM退出

問題來源 一次生產事故&#xff0c;由于一次性從數據庫查詢過多數據導致線程 OOM&#xff1a;Java heap space 異常&#xff08;千萬級表&#xff0c;JVM堆內存2G&#xff09;&#xff0c;但是在線程OOM發生時&#xff0c;java進程卻沒有立即掛掉。 ##OOM與異常 說到底OutOfM…

基于Android Studio記事本系統

目錄 項目介紹 圖片展示 運行環境 獲取方式 項目介紹 具有登錄&#xff0c;注冊&#xff0c;記住密碼&#xff0c;自動登錄的功能&#xff1b; 可以新增記事本&#xff0c;編輯&#xff0c;刪除記事本信息&#xff0c;同時可以設置主標題&#xff0c;內容&#xff0c;以及…

Ansible自動化運維中的Setup收集模塊應用詳解

作者主頁&#xff1a;點擊&#xff01; Ansible專欄&#xff1a;點擊&#xff01; 創作時間&#xff1a;2024年5月22日13點14分 &#x1f4af;趣站推薦&#x1f4af; 前些天發現了一個巨牛的&#x1f916;人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xf…

服務器沒有圖形界面沒有顯示器怎么辦

可以用vnc。 vnc是開元的。什么是vnc&#xff1f; 使用vnc 下載vnc和vncserver命令。 每生成一個圖形界面就叫做開啟session會話。 vnc相關命令&#xff1a; start a new session: vncserver。 如果沒有會話&#xff0c;一般從:1開始 端口5901 vncserver :2 #指定會話為:2 端…

WinForm+SQL Server+.NET開發菜鳥驛站管理系統

完整效果看嗶哩嗶哩&#xff0c;有需要其他系統&#xff0c;可以私信