最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

教程揭秘 | 動(dòng)力節(jié)點(diǎn)內(nèi)部Java零基礎(chǔ)教學(xué)文檔第十一篇:SpringMVC

2023-11-16 09:27 作者:動(dòng)力節(jié)點(diǎn)  | 我要投稿

接上期后續(xù)

本期分享第十一章節(jié)

SpringMVC

已經(jīng)分享過(guò)半了,你們都跟上了嗎?

每天都在學(xué)習(xí)嘛?

有什么不會(huì)的嘛?

今日教學(xué)文檔分享來(lái)了?

今日新篇章

【SpringMVC】

主要內(nèi)容

1.?SpringMVC的概念引入

2.?SpringMVC的數(shù)據(jù)綁定

3.?SpringMVC跳轉(zhuǎn)

4.?SpringMVC內(nèi)置對(duì)象

5.?SpringMVC參數(shù)傳遞

6.?SpringMVC獲取內(nèi)置作用域

7.?Spring+Mybatis+SpringMVC整合

8.?SpringMVC內(nèi)置編碼過(guò)濾器

9.?SpringMVC返回JSON數(shù)據(jù)

10.?SpringMVC文件上傳下載

11.?SpringMVC攔截器

12.?SpringMVC異常處理器

13.?Restful

學(xué)習(xí)目標(biāo)


1.?SpringMVC介紹

SpringMVC是Spring框架中的一個(gè)組件,是一個(gè)輕量級(jí)的web的MVC框架,充當(dāng)controller,其本質(zhì)就是一個(gè)Servlet。

1.1?傳統(tǒng)Servlet的不足

每個(gè)請(qǐng)求,都需要定義一個(gè)Servlet。雖然可以在service方法中,根據(jù)業(yè)務(wù)標(biāo)識(shí)進(jìn)行業(yè)務(wù)分發(fā),但是每個(gè)Servlet中的service方法的實(shí)現(xiàn)是重復(fù)。如果想要對(duì)service進(jìn)行更高層次的封裝,就可以解決service的重復(fù)代碼問(wèn)題。

每個(gè)請(qǐng)求的參數(shù),都需要根據(jù)request對(duì)象,從Map逐一的獲取,單調(diào)且含量低。將所有的參數(shù),自動(dòng)封裝映射,簡(jiǎn)化開(kāi)發(fā)。

request.getParameter(“”)

每個(gè)Servlet,向客戶(hù)端返回?cái)?shù)據(jù)時(shí),需要單獨(dú)的處理。

request.getRequestDispatcher(“/路徑”).forward(request,response)

Response.sendRedirect(“/路徑”)

針對(duì)于Servlet在實(shí)際使用中的不便,Spring中提供了組件,SpringMVC,更進(jìn)一步的簡(jiǎn)化了Servlet的開(kāi)發(fā)。

1.2?SpringMVC的架構(gòu)

?


1.2.1?DispatcherServlet

核心控制器,本質(zhì)上就是一個(gè)Servlet,處理所有的客戶(hù)端的請(qǐng)求。根據(jù)請(qǐng)求的資源路徑,在處理器映射器中查找對(duì)應(yīng)的處理器。

1.2.2?HandlerMapping

處理器映射器,存儲(chǔ)所有當(dāng)前程序中的處理器,如果在處理器映射器中查找不到資源路徑,直接返回404。

1.2.3?HandlerAdapter

處理器適配器,用于適配各種處理器,調(diào)用具體的處理器程序。

1.2.4?Handler

具體處理器,開(kāi)發(fā)者實(shí)現(xiàn)相應(yīng)接口或者使用注解聲明的程序。用于處理具體的請(qǐng)求。

1.2.5?ViewResolver

視圖解析器,根據(jù)處理器返回的數(shù)據(jù),進(jìn)行數(shù)據(jù)處理,將數(shù)據(jù)處理成相應(yīng)的格式。

JSP/JSON等等。

2.?SpringMVC使用

2.1?SpringMVC入門(mén)使用

2.1.1?導(dǎo)入SpringMVC相關(guān)jar包

2.1.2?編寫(xiě)SpringMVC配置文件

?

2.1.3?編寫(xiě)相關(guān)類(lèi)

2.1.4?在web.xml中配置SpringMVC

2.1.5?進(jìn)行測(cè)試

使用bean標(biāo)簽的name屬性進(jìn)行訪問(wèn)。注意,每個(gè)名字必須有個(gè)/,如果多個(gè)名字,之間使用逗號(hào)。

2.2?SpringMVC的數(shù)據(jù)綁定

在SpringMVC中為了簡(jiǎn)化開(kāi)發(fā),SpringMVC對(duì)請(qǐng)求的參數(shù)進(jìn)行預(yù)處理,SpringMVC支持按照參數(shù)名稱(chēng),直接將請(qǐng)求參數(shù)封裝傳遞給處理器中的方法,處理無(wú)需單獨(dú)的獲取。

2.2.1?請(qǐng)求參數(shù)

請(qǐng)求參數(shù),是指基本數(shù)據(jù)類(lèi)型和字符串、對(duì)象、數(shù)組、Map等。

2.2.2?獲取請(qǐng)求參數(shù)

2.2.3?頁(yè)面代碼

2.3?SpringMVC的跳轉(zhuǎn)

在SpringMVC中,默認(rèn)的跳轉(zhuǎn)方式內(nèi)部轉(zhuǎn)發(fā),,每個(gè)URL前面默認(rèn)有forward:

,默認(rèn)會(huì)將方法的返回值當(dāng)做視圖的路徑處理。并且,在SpringMVC中,/表示當(dāng)前項(xiàng)目根目錄。如果想要使用重定向,則使用關(guān)鍵字:redirect:/路徑。

2.3.1?代碼示例

2.4?SpringMVC支持內(nèi)置的對(duì)象

在SpringMVC中,支持為處理器中的方法注入內(nèi)置的對(duì)象,如:HttpServletRequest、HttpServletResponse、HttpSession、Model等。

?

2.5?Spring+SpringMVC+Mybatis整合

2.5.1?創(chuàng)建項(xiàng)目導(dǎo)入jar包

2.5.2?定義相關(guān)類(lèi)

2.5.2.1?domain

2.5.2.2?mapper

2.5.2.3?service

2.5.2.4?controller

2.5.2.5?頁(yè)面

?

2.5.3?配置文件

2.5.3.1?數(shù)據(jù)庫(kù)配置文件

2.5.3.2?日志配置文件

2.5.3.3?spring核心配置文件

2.5.3.4?springmvc配置文件

2.5.3.5?Mapper配置文件

2.5.3.6?web.xml

2.6?SpringMVC獲取Servlet作用域

2.7?SpringMVC內(nèi)置的編碼過(guò)濾器

在springmvc中,為了解決亂碼問(wèn)題,springmvc提供了內(nèi)置的編碼過(guò)濾器。在使用時(shí),只需要在web.xml中進(jìn)行配置即可。

?

2.8?SpringMVC返回JSON??

{key1:value1,key2:value2}:key為String,value為Object

[{},{},{}...]

實(shí)體類(lèi)對(duì)象、Map<String,Object>、List<實(shí)體類(lèi)>、List<Map<String,Object>>

fastjson.jar: ???JSON.toJSONString(Object)

在springmvc中,默認(rèn)返回的數(shù)據(jù)不論是什么格式,都當(dāng)做視圖進(jìn)行解析。會(huì)根據(jù)返回值的toString的結(jié)果,當(dāng)做路徑去查找視圖的模板,如果想要返回JSON,則需要使用注解,標(biāo)識(shí)該方法返回的是JSON數(shù)據(jù),不要當(dāng)做視圖路徑進(jìn)行路徑的查找.該注解為:@ResponseBody.因?yàn)閟pringmvc有內(nèi)置的消息轉(zhuǎn)換器,如果想要特殊設(shè)置,需要進(jìn)行XML配置.

2.8.1?XML配置的形式

XML配置形式,是修改了默認(rèn)結(jié)果處理,全局生效的。使用注解@ResponseBody,標(biāo)識(shí)該方法返回的內(nèi)容不是URL地址,而是一個(gè)消息,使用輸出對(duì)象輸出給客戶(hù)端。

@RequestMapping

name : 方法映射名稱(chēng)

value/path : 方法訪問(wèn)路徑

method : ?支持的請(qǐng)求的方法類(lèi)型: ?

GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE

params?: 請(qǐng)求必須有的參數(shù)

headers?: 請(qǐng)求必須有的頭信息

consumes?: 指定請(qǐng)求的數(shù)據(jù)格式類(lèi)型 : 普通文本、表單格式、JSON

produces?: 指定返回?cái)?shù)據(jù)的格式類(lèi)型 :JSON 、HTML

?

2.8.2?注解

SpringMVC中,有內(nèi)置的轉(zhuǎn)換器,但是SpringMVC內(nèi)置的轉(zhuǎn)換器需要相關(guān)jar包,需要jackson的jar包。只需要導(dǎo)入jar包后,使用@ResponseBody標(biāo)識(shí)返回的數(shù)據(jù)是消息即可。SpringMVC自動(dòng)將返回?cái)?shù)據(jù)當(dāng)做JSON字符串處理,并且消息按照UTF-8進(jìn)行編碼。如果@ResponseBody放在類(lèi)上,類(lèi)中所有的方法都返回的是消息,不是視圖資源。

注意:

@RestController

是?@ResponseBody,?@Controller 結(jié)合,標(biāo)識(shí)該類(lèi)是一個(gè)處理器,并且處理器中所有的方法都返回的是消息。

?

2.9?文件上傳下載

在springmvc中,也對(duì)文件上傳進(jìn)行了封裝。更進(jìn)一步的簡(jiǎn)化的文件上傳,只需導(dǎo)入文件上傳相關(guān)的jar包和處理文件上傳的解析器即可。

2.9.1?文件上傳

2.9.1.1?導(dǎo)入jar包

2.9.1.2?配置文件上傳的解析器

在SpringMVC的核心配置文件中,新增文件上傳解析器配置:

2.9.1.3?處理文件上傳請(qǐng)求

頁(yè)面

處理器

2.9.2?文件下載

2.9.2.1?方案一(推薦):

文件下載的本質(zhì),就是獲取服務(wù)器的文件數(shù)據(jù)信息,使用字節(jié)流將數(shù)據(jù)傳遞給客戶(hù)端。

1.?使用輸入流,將磁盤(pán)文件讀到內(nèi)存中。

2.?使用網(wǎng)絡(luò)輸出流,將數(shù)據(jù)輸出給客戶(hù)端。

2.9.2.2?方案二:

springMVC中為了簡(jiǎn)化文件的下載,封裝了實(shí)體類(lèi):ResponseEntity,可以將文件數(shù)據(jù)封裝在ResponseEntity中。

2.10?SpringMVC中的攔截器?????

SpringMVC提供HandlerInteceptor接口,這個(gè)接口用于攔截處理具體的Handler中的方法,在具體的Handler中的方法執(zhí)行前后及返回視圖之間都可以進(jìn)行相關(guān)擴(kuò)展操作。

2.10.1?如何使用攔截器

2.10.1.1?創(chuàng)建類(lèi)實(shí)現(xiàn)HandlerInteceptor接口

?

2.10.1.2?配置攔截器

注意:

1.?在攔截器中,最先執(zhí)行preHandle,然后執(zhí)行Handler中具體的方法,再然后執(zhí)行postHandle和afterCompletion。preHandle就是前置的攔截的方法,返回如果為true,則執(zhí)行處理器中的方法,如果為false則不執(zhí)行處理器中的方法。postHandle是在Handler中具體的方法執(zhí)行完成,但是沒(méi)有交給視圖解析器之前執(zhí)行,afterCompletion在視圖解析器完成了視圖解析之后執(zhí)行的。

2.?攔截器是攔截器的方法,被DispatcherServlet代理調(diào)用的方法,如果請(qǐng)求的不是Handler,攔截器是不會(huì)攔截的。index.html由于是由tomcat默認(rèn)的servlet進(jìn)行返回的,不會(huì)執(zhí)行DispatcherServlet中的doDispatch,那么攔截器無(wú)法進(jìn)行攔截。

2.10.2?Interceptor和Filter的區(qū)別

Filter是Java Web的規(guī)范,攔截的是請(qǐng)求,任何JavaWeb項(xiàng)目都可以有Filter,但是Interceptor是SpringMVC提供的一套規(guī)范HandlerInterceptor,只適用SpringMVC自身,并且只能對(duì)DispatherServlet處理器的請(qǐng)求生效,攔截的方法。從范圍上說(shuō),任何JavaWeb項(xiàng)目都有Filter,但是未必有Interceptor。

1、filter可以應(yīng)用于任何的javaweb項(xiàng)目;inteceptor應(yīng)用于springmvc框架

2、Filter可以過(guò)濾所有請(qǐng)求資源(不限于html、css、js、images等);Interceptor只能攔截所有的controller方法

3、Filter過(guò)濾路徑時(shí),沒(méi)有排除選項(xiàng);Interceptor可以排除攔截路徑

2.11?異常處理器

在spring中,相對(duì)完善的異常處理器機(jī)制,spring可以自己定義處理異常的規(guī)則,這種處理異常規(guī)則的程序,就被稱(chēng)之為異常處理器。其實(shí),異常處理器就是對(duì)controller的增強(qiáng),因?yàn)楫惓J窍蛏蠏?,controller調(diào)用service,service調(diào)用mapper,controller屬于最上層,所以最終異常都會(huì)匯集到controller。因此,spring提供了@ControllerAdvice注解,表示對(duì)controller增強(qiáng)類(lèi)。并且還提供了@ExceptionHandler這個(gè)注解,當(dāng)發(fā)生異常時(shí),該注解修飾的方法就會(huì)執(zhí)行。

在實(shí)際開(kāi)發(fā)中,異常主要分為兩類(lèi):

1.?系統(tǒng)異常,JDK中定義的異常

2.?業(yè)務(wù)異常,開(kāi)發(fā)者自己定義的異常

一般是將系統(tǒng)異常轉(zhuǎn)化為業(yè)務(wù)異常,開(kāi)發(fā)者只處理業(yè)務(wù)異常。使用try...catch...將代碼包裹起來(lái),在catch中拋出自定義的異常,這種方案就是將系統(tǒng)異常轉(zhuǎn)化為業(yè)務(wù)異常。因?yàn)楹芏鄶?shù)據(jù)操作,事務(wù)需要異常進(jìn)行數(shù)據(jù)回滾。

?

2.12?springmvc中數(shù)據(jù)校驗(yàn)

springmvc中的數(shù)據(jù)校驗(yàn)時(shí)通過(guò)hibernate-validator實(shí)現(xiàn),對(duì)實(shí)體類(lèi)中的字符串有效。

1、引入hibernate-validator依賴(lài)

2、在實(shí)體類(lèi)中的字符串(正則表達(dá)式)屬性上添加相關(guān)注解

3、可以用hibernate-validor提供的特有注解對(duì)Long、Integer、Float做校驗(yàn)

4、在被校驗(yàn)的實(shí)體類(lèi)前添加@Valid注解

5、當(dāng)實(shí)體類(lèi)中的數(shù)據(jù)格式發(fā)生錯(cuò)誤時(shí),錯(cuò)誤信息被封裝到了BindResult對(duì)象中去,BindResult必須和實(shí)體類(lèi)緊緊挨在一起

2.13?Restful風(fēng)格

Restful風(fēng)格適合參數(shù)少、參數(shù)不敏感的請(qǐng)求地址。使用了restful風(fēng)格的請(qǐng)求地址,就不能使用.do的方式請(qǐng)求

Resustful風(fēng)格:

1)?請(qǐng)求地址問(wèn)題

2)?請(qǐng)求方式問(wèn)題

http://localhost:8080/getBooksByFenye.do?pageNum=1&pageSize=5

http://localhost:8080/getBooksByFenye/1/5

2.13.1?Http協(xié)議設(shè)計(jì)的初衷

HTTP協(xié)議在設(shè)計(jì)時(shí),期望使用一個(gè)URL表示一個(gè)資源。然后,根據(jù)不同的動(dòng)作:GET、POST、PUT、DELETE等等表示對(duì)一個(gè)資源的各種操作。

如:

獲取這個(gè)資源就使用GET,??@GetMapping(“/”)

修改這個(gè)資源PUT,???@PutMapping()

刪除這個(gè)資源用DELETE,@DeleteMapping()

創(chuàng)建這個(gè)資源使用POST。?@PostMapping() ?

但是在實(shí)際使用中,多個(gè)URL表示一個(gè)資源,例如:新增用戶(hù): addUser.do,修改用戶(hù):updateUser.do,刪除用戶(hù):deleteUser.do,查詢(xún)一個(gè)用戶(hù):getUser.do。這時(shí)候,出現(xiàn)一個(gè)資源存在多個(gè)URL。在一定程度聲,違背了HTTP協(xié)議的設(shè)計(jì)初衷,并且命名也是個(gè)問(wèn)題。

2.13.2?Restful設(shè)計(jì)思想

1.?使用一個(gè)URL表示一種資源

2.?客戶(hù)端使用GET、POST、PUT、DELETE4個(gè)表示操作方式的動(dòng)詞對(duì)服務(wù)端資源進(jìn)行操作:GET用來(lái)獲取資源,POST用來(lái)新建資源(也可以用于更新資源),PUT用來(lái)更新資源,DELETE用來(lái)刪除資源

3.?通過(guò)操作資源的表現(xiàn)形式來(lái)操作資源

2.13.3?在SpringMVC中使用Restful

SpringMVC也支持Restful風(fēng)格,但是目前存在一些問(wèn)題。主要不是很好支持PUT請(qǐng)求,沒(méi)有辦法獲取到PUT請(qǐng)求的數(shù)據(jù)。

2.13.3.1?將DispatherServlet的映射地址改為

由于將DispatherServlet的映射路徑,改為了/,則所有的請(qǐng)求都由DispatherServlet處理,靜態(tài)的資源文件不在處理器映射器中,會(huì)出現(xiàn)404。并攔截器攔截DispatherServlet中調(diào)用Handler中的方法,改為/,則所有的請(qǐng)求都會(huì)被攔截。

則需要在SpringMVC的核心配置文件中,新增啟用默認(rèn)的Servlet的處理器。

<!-- 啟用默認(rèn)Servlet -->
<mvc:default-servlet-handler/>

并且注意,配置攔截器時(shí),將靜態(tài)資源不進(jìn)行攔截,要排除:

<mvc:exclude-mapping path="/resouces/**"/>

2.13.3.2?配置處理PUT請(qǐng)求的攔截器

?

2.13.3.3?處理器代碼

2.13.3.4?頁(yè)面代碼

?

?


更多干貨我們下期再說(shuō)!

下期會(huì)分享

第十二章節(jié)

Linux

相關(guān)知識(shí)~

下期見(jiàn)!





教程揭秘 | 動(dòng)力節(jié)點(diǎn)內(nèi)部Java零基礎(chǔ)教學(xué)文檔第十一篇:SpringMVC的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
印江| 鲁山县| 安吉县| 北辰区| 同德县| 平原县| 台前县| 左云县| 泸水县| 新建县| 宝应县| 阳江市| 金山区| 娱乐| 永胜县| 漳州市| 麻江县| 奈曼旗| 滕州市| 子长县| 格尔木市| 屯昌县| 龙南县| 睢宁县| 巴彦淖尔市| 新竹市| 锡林郭勒盟| 砚山县| 琼海市| 晋州市| 剑阁县| 阿拉善左旗| 裕民县| 民权县| 黔南| 西盟| 临漳县| 莱芜市| 武陟县| 冷水江市| 金沙县|