《Java Web開發(fā)從入門到實戰(zhàn)(IntelliJ IDEA版·微課視頻版)》 課件 第12章 Spring MVC框架基礎(chǔ)_第1頁
《Java Web開發(fā)從入門到實戰(zhàn)(IntelliJ IDEA版·微課視頻版)》 課件 第12章 Spring MVC框架基礎(chǔ)_第2頁
《Java Web開發(fā)從入門到實戰(zhàn)(IntelliJ IDEA版·微課視頻版)》 課件 第12章 Spring MVC框架基礎(chǔ)_第3頁
《Java Web開發(fā)從入門到實戰(zhàn)(IntelliJ IDEA版·微課視頻版)》 課件 第12章 Spring MVC框架基礎(chǔ)_第4頁
《Java Web開發(fā)從入門到實戰(zhàn)(IntelliJ IDEA版·微課視頻版)》 課件 第12章 Spring MVC框架基礎(chǔ)_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第12章SpringMVC框架基礎(chǔ)學習目的與要求本章重點講解SpringMVC的工作原理、控制器、數(shù)據(jù)綁定以及數(shù)據(jù)庫編程。通過本章的學習,了解Spring

MVC的工作原理,掌握Spring

MVC應(yīng)用的開發(fā)步驟?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

目錄《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.1SpringMVC的工作原理12.2SpringMVC的工作環(huán)境12.3基于注解的控制器12.4Spring的數(shù)據(jù)庫編程12.5基于SpringMVC框架的注冊與登錄12.1SpringMVC的工作原理SpringMVC框架主要由DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成,其工作原理,如圖12.1所示。從圖12.1可總結(jié)出Spring

MVC的工作流程如下:1.客戶端請求提交到DispatcherServlet;2.由DispatcherServlet控制器尋找一個或多個HandlerMapping,找到處理請求的Controller;3.DispatcherServlet將請求提交到Controller;4.Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView;5.DispatcherServlet尋找一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖;6.視圖負責將結(jié)果顯示到客戶端?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.1SpringMVC的工作原理圖12.1中包含4個Spring

MVC接口:DispatcherServlet、HandlerMapping、Controller和ViewResoler。Spring

MVC所有的請求都經(jīng)過DispatcherServlet來統(tǒng)一分發(fā)。DispatcherServlet將請求分發(fā)給Controller之前,需要借助于Spring

MVC提供的HandlerMapping定位到具體的Controller。HandlerMapping接口負責完成客戶請求到Controller映射。Controller接口將處理用戶請求,這和Java

Servlet扮演的角色是一致的。一旦Controller處理完用戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。從宏觀角度考慮,DispatcherServlet是整個Web應(yīng)用的控制器;從微觀考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型(Model)和視圖(View)。ViewResolver接口(視圖解析器)在Web應(yīng)用中負責查找View對象,從而將相應(yīng)結(jié)果渲染給客戶?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

目錄《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.1SpringMVC的工作原理12.2SpringMVC的工作環(huán)境12.3基于注解的控制器12.4Spring的數(shù)據(jù)庫編程12.5基于SpringMVC框架的注冊與登錄12.2SpringMVC的工作環(huán)境在第1章Java

Web開發(fā)環(huán)境的基礎(chǔ)上,導入Spring

MVC的相關(guān)JAR包,即可開發(fā)Spring

MVC應(yīng)用?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.2.1Spring的下載使用Spring框架開發(fā)應(yīng)用程序時,需要引用Spring框架自身的JAR包。Spring

Framework

6.0.0的JAR包可以從Maven

中央庫獲得。Spring的JAR包中,有四個基礎(chǔ)包:spring-core-6.0.0.jar、spring-beans-6.0.0.jar、spring-context-6.0.0.jar和spring-expression-6.0.0.jar,分別對應(yīng)Spring核心容器的四個模塊:Spring-core模塊、Spring-beans模塊、Spring-context模塊和Spring-expression模塊。對于Spring框架的初學者,開發(fā)Spring應(yīng)用時,只需要將Spring的四個基礎(chǔ)包和Spring

Commons

Logging

Bridge對應(yīng)的JAR包spring-jcl-6.0.0.jar復制到Web應(yīng)用的WEB-INF/lib目錄下即可。對于Spring

MVC框架的初學者,開發(fā)Spring

MVC應(yīng)用時,只需要將Spring的4個基礎(chǔ)JAR包、Spring

Commons

Logging

Bridge對應(yīng)的JAR包spring-jcl-6.0.0.jar、AOP實現(xiàn)JAR包spring-aop-6.0.0.jar以及兩個Web相關(guān)的JAR包(spring-web-6.0.0.jar和spring-webmvc-6.0.0.jar)復制到Web應(yīng)用的WEB-INF/lib目錄下即可?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.2.1Spring的下載Tomcat

10運行Spring

MVC

6.0應(yīng)用時,DispatcherServlet接口依賴性能監(jiān)控micrometer-observation和micrometer-commons兩個包進行請求分發(fā)。因此,Spring

MVC應(yīng)用所添加的JAR包如圖12.2所示。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.2.2使用IntelliJIDEA開發(fā)SpringMVC的Web應(yīng)用1.創(chuàng)建Web應(yīng)用并導入JAR包按照1.2.2節(jié)的操作步驟,在IntelliJ

IDEA中,創(chuàng)建一個Web項目ch12_1,并為ch12_1添加Tomcat依賴。將如圖12.2所示的JAR包添加到ch12_1的WEB-INF/lib目錄中。2.在web.xml文件中部署DispatcherServlet在開發(fā)Spring

MVC應(yīng)用時,需要在web.xml(webapp/WEB-INF/)中部署DispatcherServlet?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.2.2使用IntelliJIDEA開發(fā)SpringMVC的Web應(yīng)用3.創(chuàng)建Web應(yīng)用首頁在ch12_1應(yīng)用的webapp目錄下,創(chuàng)建應(yīng)用的首頁面index.jsp。4.創(chuàng)建Controller類在應(yīng)用的src目錄下,創(chuàng)建包controller,并在該包中創(chuàng)建基于注解的名為“IndexController”的控制器類,該類中有兩個處理請求方法,分別處理首頁中“注冊”和“登錄”超鏈接請求?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.2.2使用IntelliJIDEA開發(fā)SpringMVC的Web應(yīng)用5.創(chuàng)建SpringMVC的配置文件在Spring

MVC中,使用掃描機制找到應(yīng)用中所有基于注解的控制器類。所以,為了讓控制器類被Spring

MVC框架掃描到,需要在配置文件中聲明spring-context,并使用<context:component-scan/>元素指定控制器類的基本包(請確保所有控制器類都在基本包及其子包下)。另外,需要在配置文件中定義Spring

MVC的視圖解析器(ViewResolver)6.應(yīng)用的其他頁面IndexController控制器的register方法處理成功后,跳轉(zhuǎn)到“/WEB-INF/jsp/register.jsp”視圖;IndexController控制器的login方法處理成功后,跳轉(zhuǎn)到“/WEB-INF/jsp/login.jsp”視圖。因此,應(yīng)用的“/WEB-INF/jsp”目錄下應(yīng)有“register.jsp”和“l(fā)ogin.jsp”頁面,此兩個JSP頁面代碼略。7.發(fā)布并運行Spring

MVC應(yīng)用在IntelliJ

IDEA中第一次運行Spring

MVC應(yīng)用時,需要參考1.2.2節(jié)將應(yīng)用發(fā)布到Tomcat?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

目錄《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.1SpringMVC的工作原理12.2SpringMVC的工作環(huán)境12.3基于注解的控制器12.4Spring的數(shù)據(jù)庫編程12.5基于SpringMVC框架的注冊與登錄12.3基于注解的控制器使用基于注解的控制器,具有如下兩個優(yōu)點:1.在基于注解的控制器類中,可以編寫多個處理方法,進而可以處理多個請求(動作)。這就允許將相關(guān)的操作編寫在同一個控制器類中,從而減少控制器類的數(shù)量,方便以后的維護。2.基于注解的控制器不需要在配置文件中部署映射,僅需要使用RequestMapping注解類型注解一個方法進行請求處理。在SpringMVC中,最重要的兩個注解類型是Controller和RequestMapping?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.3.1Controller注解類型在SpringMVC中,使用org.springframework.stereotype.Controller注解類型聲明某類的實例是一個控制器。例如,在應(yīng)用的src/main/java目錄下,創(chuàng)建controller

包,并在該包中創(chuàng)建Controller注解的控制器類IndexController。/**“@Controller”表示IndexController的實例是一個控制器*@Controller相當于@Controller("indexController")或@Controller(value="indexController")*/@ControllerpublicclassIndexController{ //處理請求的方法}《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.3.2RequestMapping注解類型需要使用RequestMapping注解類型將請求與處理方法一一對應(yīng)。1.方法級別注解@RequestMapping(value="/index/login")publicStringlogin(){

return"login";}2.類級別注解@RequestMapping("/index")publicclassIndexController{

@RequestMapping("/login") publicStringlogin(){ return"login"; }《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.3.2RequestMapping注解類型為方便程序維護,建議開發(fā)者采用類級別注解,將相關(guān)處理放在同一個控制器類中,例如,對商品的增、刪、改、查處理方法都可以放在GoodsOperate控制類中。@RequestMapping注解的value屬性表示請求路徑;method屬性表示請求方式。如果方法上的@RequestMapping注解沒有設(shè)置method屬性,則get和post請求都可以訪問;如果方法上的@RequestMapping注解設(shè)置了method屬性,則只能是相應(yīng)的請求方式可以訪問。@RequestMapping還有特定于HTTP請求方式的組合注解?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(1)@GetMapping相當于@RequestMapping(method=RequestMethod.GET),處理get請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.GET);使用@GetMapping可簡寫為@GetMapping("requestpath")。通常在查詢數(shù)據(jù)時使用?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(2)@PostMapping相當于@RequestMapping(method=HttpMethod.POST),處理post請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.POST);使用@PostMapping可簡寫為@PostMapping("requestpath")。通常在新增數(shù)據(jù)時使用。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(3)@PutMapping、@PatchMapping相當于@RequestMapping(method=RequestMethod.PUT/PATCH),處理put和patch請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.PUT/PATCH);使用@PutMapping可簡寫為@PutMapping("requestpath")。兩者都是更新,@PutMapping為全局更新,@PatchMapping是對put方式的一種補充,put是對整體的更新,patch是對局部的更新。通常在更新數(shù)據(jù)時使用?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(4)@DeleteMapping相當于@RequestMapping(method=RequestMethod.DELETE),處理delete請求。使用@RequestMapping編寫是@RequestMapping(value="requestpath",method=RequestMethod.DELETE);使用@PutMapping可簡寫為@DeleteMapping("requestpath")。通常在刪除數(shù)據(jù)時使用。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.3.3編寫請求處理方法在控制器類中每個請求處理方法可以有多個不同類型的參數(shù),以及一個多種類型的返回結(jié)果。如果需要在請求處理方法中使用ServletAPI類型,那么可以將這些類型作為請求處理方法的參數(shù)類型。除了ServletAPI參數(shù)類型外,還有輸入輸出流、表單實體類、注解類型、與Spring框架相關(guān)的類型等等。但特別重要的類型是org.springframework.ui.Model類型,該類型是一個包含Map的Spring框架類型。每次調(diào)用請求處理方法時,SpringMVC都將創(chuàng)建org.springframework.ui.Model對象。最常見的返回類型,就是代表邏輯視圖名稱的String類型。除了String類型外,還有Model、View以及其他任意的Java類型。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.3.4Controller接收請求參數(shù)的常見方式Controller接收請求參數(shù)的方式有很多種,有的適合get請求方式,有的適合post請求方式,有的兩者都適合。下面介紹幾個常用的方式,讀者可根據(jù)實際情況選擇合適的接收方式。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

1.通過實體bean接收請求參數(shù)通過一個實體bean來接收請求參數(shù),適用于get和post提交請求方式。需要注意的是,bean的屬性名稱必須與請求參數(shù)名稱相同。下面通過完善應(yīng)用ch12_1,講解“通過實體bean接收請求參數(shù)”?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(1)完善視圖文件<formaction="user/register"method="post"name="registForm"> <inputtype="text"name="uname"value="${user.uname}"/> <inputtype="password"name="upass"/> <inputtype="password"name="reupass"/> <inputtype="submit"value="注冊"/></form>《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(2)創(chuàng)建POJO實體類publicclassUserForm{ privateStringuname;//與請求參數(shù)名稱相同

privateStringupass; privateStringreupass; //省略getter和setter方法}《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

(3)創(chuàng)建控制器類@RequestMapping("/user")publicclassUserController{ @PostMapping("/register") publicStringregister(UserFormuser,Modelmodel){ if("zhangsan".equals(user.getUname()) &&"123456".equals(user.getUpass())){

return"login";//注冊成功,跳轉(zhuǎn)到login.jsp }else{

model.addAttribute("uname",user.getUname()); return"register";//返回register.jsp } }}《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

2.通過處理方法的形參接收請求參數(shù)通過處理方法的形參接收請求參數(shù),也就是直接把表單參數(shù)寫在控制器類相應(yīng)方法的形參中,即形參名稱與請求參數(shù)名稱完全相同。該接收參數(shù)方式適用于get和post提交請求方式。@PostMapping("/register")publicStringregister(Stringuname,Stringupass,Modelmodel){

if("zhangsan".equals(uname)

&&"123456".equals(upass)){

}}《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

3.通過@RequestParam接收請求參數(shù)通過@RequestParam接收請求參數(shù),適用于get和post提交請求方式。@PostMapping("/register")publicStringregister(@RequestParamStringuname,@RequestParamStringupass,Modelmodel){

if("zhangsan".equals(uname)

&&"123456".equals(upass)){}}通過@RequestParam接收請求參數(shù)與“通過處理方法的形參接收請求參數(shù)”的區(qū)別是:當請求參數(shù)與接收參數(shù)名不一致時,“通過處理方法的形參接收請求參數(shù)”不會報400錯誤,而“通過@RequestParam接收請求參數(shù)”會400錯誤?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

4.通過@ModelAttribute接收請求參數(shù)@ModelAttribute注解放在處理方法的形參上時,用于將多個請求參數(shù)封裝到一個實體對象,從而簡化數(shù)據(jù)綁定流程,而且自動暴露為模型數(shù)據(jù)用于視圖頁面展示時使用。而“通過實體bean接收請求參數(shù)”只是將多個請求參數(shù)封裝到一個實體對象,并不能暴露為模型數(shù)據(jù)。通過@ModelAttribute注解接收請求參數(shù),適用于get和post提交請求方式。@RequestMapping("/register")publicStringregister(@ModelAttribute("user")UserFormuser){

if("zhangsan".equals(user.getUname())

&&"123456".equals(user.getUpass())){}}使用@ModelAttribute(“user”)與model.addAttribute(“user”,user)功能相同,在頁面上可以使用EL表達式${user.uname}取出ModelAttribute的uname值?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.3.5重定向與轉(zhuǎn)發(fā)《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

重定向是將用戶從當前處理請求定向到另一個視圖(如JSP)或處理請求,以前的請求(request)中存放的信息全部失效,并進入一個新的request作用域;轉(zhuǎn)發(fā)是將用戶對當前處理的請求轉(zhuǎn)發(fā)給另一個視圖或處理請求,以前的request中存放的信息不會失效。轉(zhuǎn)發(fā)是服務(wù)器行為,重定向是客戶端行為。在SpringMVC框架中,控制器類中處理方法的return語句默認就是轉(zhuǎn)發(fā)實現(xiàn),只不過實現(xiàn)的是轉(zhuǎn)發(fā)到視圖。12.3.5重定向與轉(zhuǎn)發(fā)《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

//轉(zhuǎn)發(fā)到一個請求方法(同一個控制器類中,可省略/index/)return"forward:/index/isLogin";//重定向到一個請求方法(同一個控制器類中,可省略/index/)return"redirect:/index/isRegister";//轉(zhuǎn)發(fā)到一個視圖return"register";在SpringMVC框架中,不管重定向或轉(zhuǎn)發(fā),都需要符合視圖解析器的配置,如果直接轉(zhuǎn)發(fā)到一個不需要DispatcherServlet的資源,如:return"redirect:/html/my.html";需要使用mvc:resources配置,示例代碼如下。<mvc:resourceslocation="/html/"mapping="/html/**"></mvc:resources>12.3.6應(yīng)用@Autowired進行依賴注入《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

在前面學習的控制器中,并沒有體現(xiàn)MVC的M層,這是因為控制器即充當C層,又充當M層。這樣設(shè)計程序的系統(tǒng)結(jié)構(gòu)很不合理,應(yīng)該將M層從控制器中分離出來。SpringMVC框架本身就是一個非常優(yōu)秀的MVC框架,它具有一個依賴注入的優(yōu)點??梢酝ㄟ^Autowired注解類型將依賴注入到一個屬性(成員變量)或方法,示例如下。@AutowiredpublicUserServiceuserService;在SpringMVC中,為了能被作為依賴注入,Service類可以使用Service注解類型注明為@Service(一個服務(wù))。另外,還需要在配置文件中使用<context:component-scanbase-package="基本包"/>元素來掃描依賴基本包。12.3.7@ModelAttribute《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

通過ModelAttribute注解類型,可實現(xiàn)如下兩個功能。1.綁定請求參數(shù)到實體對象(表單的命令對象)綁定請求參數(shù)到實體對象,該用法如12.3.4節(jié)內(nèi)容。publicStringregister(@ModelAttribute("user")UserFormuser)上述代碼中“@ModelAttribute("user")UserFormuser”語句的功能有兩個,一是將請求參數(shù)的輸入封裝到user對象中;一是創(chuàng)建UserForm實例,以“user”為鍵值存儲在Model對象中,與“model.addAttribute("user",user)”語句功能一樣。如果沒有指定鍵值,即“@ModelAttributeUserFormuser”,那么創(chuàng)建UserForm實例時,以“userForm”為鍵值存儲在Model對象中,與“model.addAttribute("userForm",user)”語句功能一樣。

2.注解一個非請求處理方法被@ModelAttribute注解的方法,將在每次調(diào)用該控制器類的請求處理方法前被調(diào)用。這種特性可以用來控制登錄權(quán)限,當然控制登錄權(quán)限的方法很多,例如攔截器、過濾器等。publicclassBaseController{

@ModelAttributepublicvoidisLogin(HttpSessionsession)throwsException{if(session.getAttribute("user")==null){}}}@Controller@RequestMapping("/admin")publicclassModelAttributeControllerextendsBaseController{ @RequestMapping("/add") publicStringadd(){} @RequestMapping("/update") publicStringupdate(){} @RequestMapping("/delete") publicStringdelete(){}}上述ModelAttributeController類中的add、update、delete請求處理方法執(zhí)行時,首先執(zhí)行父類BaseController中的isLogin方法判斷登錄權(quán)限。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

目錄《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.1SpringMVC的工作原理12.2SpringMVC的工作環(huán)境12.3基于注解的控制器12.4Spring的數(shù)據(jù)庫編程12.5基于SpringMVC框架的注冊與登錄12.4Spring的數(shù)據(jù)庫編程數(shù)據(jù)庫編程是互聯(lián)網(wǎng)編程的基礎(chǔ),Spring框架為開發(fā)者提供了JDBC模板模式,即jdbcTemplate,它可以簡化許多代碼,但在實際應(yīng)用中jdbcTemplate并不常用。工作更多的時候,用的是Hibernate框架和MyBatis框架進行數(shù)據(jù)庫編程。本節(jié)僅簡要介紹Spring

jdbcTemplate的使用方法,而MyBatis框架的相關(guān)內(nèi)容,讀者可學習作者的另一本教程《Java

EE框架整合開發(fā)入門到實戰(zhàn)——Spring+Spring

MVC+MyBatis》?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.4.1SpringJDBC的配置《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

本節(jié)Spring數(shù)據(jù)庫編程主要使用SpringJDBC模塊的core和dataSource包。core包是JDBC的核心功能包,包括常用的JdbcTemplate類;dataSource包是訪問數(shù)據(jù)源的工具類包。使用SpringJDBC操作數(shù)據(jù)庫,需要對其進行配置。12.4.1SpringJDBC的配置《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

<!--配置數(shù)據(jù)源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL數(shù)據(jù)庫驅(qū)動--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--連接數(shù)據(jù)庫的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--連接數(shù)據(jù)庫的用戶名--> <propertyname="username"value="root"/> <!--連接數(shù)據(jù)庫的密碼--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>12.4.1SpringJDBC的配置《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

上述示例代碼中,配置JDBC模板時,需要將dataSource注入到j(luò)dbcTemplate,而在數(shù)據(jù)訪問層(Dao類)需要使用jdbcTemplate時,也需要將jdbcTemplate注入到對應(yīng)的bean中?!瑻Repository("testDao")publicclassTestDaoImplimplementsTestDao{ @Autowired //使用配置文件中的JDBC模板

privateJdbcTemplatejdbcTemplate; ……}12.4.2SpringJdbcTemplate的常用方法《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

publicintupdate(Stringsql,Objectargs[])該方法可以對數(shù)據(jù)表進行增加、修改、刪除等操作。使用args[]設(shè)置SQL語句中的參數(shù),并返回更新的行數(shù)。示例代碼如下:StringinsertSql="insertintouservalues(null,?,?)";Objectparam1[]={"chenheng1","男"};jdbcTemplate.update(insertSql,param1);

publicList<T>query(Stringsql,RowMapper<T>rowMapper,Objectargs[])該方法可以對數(shù)據(jù)表進行查詢操作。rowMapper將結(jié)果集映射到用戶自定義的類中(前提是自定義類中的屬性與數(shù)據(jù)表的字段對應(yīng))。示例代碼如下:StringselectSql="select*fromuser";RowMapper<MyUser>rowMapper=newBeanPropertyRowMapper<MyUser>(MyUser.class);List<MyUser>list=jdbcTemplate.query(selectSql,rowMapper,null);通過一個實例演示SpringJDBC的使用過程。1.導入JAR包將MySQL數(shù)據(jù)庫的驅(qū)動JAR包mysql-connector-java-8.0.29.jar、Spring

JDBC的JAR包spring-jdbc-6.0.0.jar以及Spring事務(wù)處理的JAR包spring-tx-6.0.0.jar復制到ch12_1應(yīng)用的/WEB-INF/lib目錄。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

2.完善配置文件ch12_1的配置文件中,添加如下配置代碼:<!--配置數(shù)據(jù)源--><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL數(shù)據(jù)庫驅(qū)動--> <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/> <!--連接數(shù)據(jù)庫的URL--> <propertyname="url"value="jdbc:mysql://:3306/springtest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8"/> <!--連接數(shù)據(jù)庫的用戶名--> <propertyname="username"value="root"/> <!--連接數(shù)據(jù)庫的密碼--> <propertyname="password"value="root"/></bean><!--配置JDBC模板--><beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"/></bean>《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

3.創(chuàng)建實體類在應(yīng)用ch12_1的包pojo中創(chuàng)建實體類MyUser。該類的屬性與數(shù)據(jù)表usertable的字段一致。packagepojo;publicclassMyUser{ privateStringuname; privateStringupwd; //此處省略setter和getter方法

publicStringtoString(){ return"myUser[uname="+uname+",upwd="+upwd+"]"; }}《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

4.創(chuàng)建數(shù)據(jù)訪問層Dao在應(yīng)用ch12_1的src目錄中,創(chuàng)建一個名為dao的包,并在該包中創(chuàng)建TestDao接口和TestDaoImpl實現(xiàn)類。在實現(xiàn)類TestDaoImpl中使用JDBC模塊JdbcTemplate訪問數(shù)據(jù)庫,并將該類注解為@Repository("testDao")。在配置文件中添加<context:component-scanbase-package="dao"/>語句使注解生效?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

5.創(chuàng)建測試類在應(yīng)用ch12_1的controller包中,創(chuàng)建控制器類TestSpringJDBC。@ControllerpublicclassTestSpringJDBC{

@Autowired privateTestDaotestDao; @RequestMapping("/jdbcTest") publicStringtest(){ StringinsertSql="insertintousertablevalues(?,?)";《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.4.3基于@Transactional注解的聲明式事務(wù)管理@Transactional注解可以作用于接口、接口方法、類以及類方法上。當作用于類上時,該類的所有public方法將都具有該類型的事務(wù)屬性,同時,也可以在方法級別使用該注解來覆蓋類級別的定義。雖然@Transactional注解可以作用于接口、接口方法、類以及類方法上,但是Spring小組建議不要在接口或者接口方法上使用該注解,因為這只有在使用基于接口的代理時它才會生效。@Transactional注解使用步驟如下:《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

1.為數(shù)據(jù)源添加事務(wù)管理器<!--為數(shù)據(jù)源添加事務(wù)管理器--><beanid="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"/></bean><!--為事務(wù)管理器注冊注解驅(qū)動--><tx:annotation-driventransaction-manager="txManager"/>《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

2.為Service層添加@Transactional注解在SpringMVC中,通常通過Service層進行事務(wù)管理,因此需要為Service層添加@Transactional注解。添加@Transactional注解的示例代碼如下:......@Service("testService")@Transactional//加上注解@Transactional,就可以指定這個類需要受Spring的事務(wù)管理//注意@Transactional只能針對public屬性范圍內(nèi)的方法添加publicclassTestServiceImplimplementsTestService{}......《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

目錄《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.1SpringMVC的工作原理12.2SpringMVC的工作環(huán)境12.3基于注解的控制器12.4Spring的數(shù)據(jù)庫編程12.5基于SpringMVC框架的注冊與登錄12.5.1JSON數(shù)據(jù)轉(zhuǎn)換為實現(xiàn)瀏覽器與控制器類之間的JSON數(shù)據(jù)交互,Spring

MVC提供了MappingJackson2HttpMessageConverter實現(xiàn)類默認處理JSON格式請求響應(yīng)。該實現(xiàn)類利用Jackson開源包讀寫JSON數(shù)據(jù),將Java對象轉(zhuǎn)換為JSON對象和XML文檔,同時也可以將JSON對象和XML文檔轉(zhuǎn)換為Java對象。Jackson開源包及其描述如下所示。

jackson-annotations.jar:JSON轉(zhuǎn)換注解包。

jackson-core.jar:JSON轉(zhuǎn)換核心包。

jackson-databind.jar:JSON轉(zhuǎn)換的數(shù)據(jù)綁定包。以上3個Jackson的開源包在編寫本書時,最新版本是2.14.1,讀者可通過地址“http:///artifact/com.fasterxml.jackson.core”下載得到。在使用注解開發(fā)時,需要用到兩個重要的JSON格式轉(zhuǎn)換注解,分別是@RequestBody和@ResponseBody。

@RequestBody:用于將請求體中的數(shù)據(jù)綁定到方法的形參中,該注解應(yīng)用在方法的形參上。

@ResponseBody:用于直接返回JSON對象,該注解應(yīng)用在方法上?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

12.5.2注冊與登錄創(chuàng)建SpringMVC應(yīng)用ch12_2,實現(xiàn)以下功能:1.未注冊用戶請運行注冊頁面進行注冊,注冊時檢查用戶名是否已注冊(要求使用Ajax異步提交檢查);2.已注冊的用戶運行登錄頁面進行登錄,登錄成功的用戶,可以查看所有用戶姓名?!禞avaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

1.創(chuàng)建應(yīng)用ch12_2,并導入相關(guān)JAR文件除了導入ch12_1應(yīng)用所需要的JAR文件,還需要導入JSTL和JSON需要的JAR文件。《JavaWeb開發(fā)從入門到實戰(zhàn)(微課視頻版)(IntelliJIDEA版)》陳恒

主編,清華大學出版社,2024

2.創(chuàng)建相關(guān)JSP文件應(yīng)用中需要的js和圖片,請參見提供的源代碼,這里只說明JSP相關(guān)代碼。在應(yīng)用ch12_2的web目錄下,創(chuàng)建jsp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論