《Java輕量級框架技術與應用》 課件全套 王永強 項目1-7 Spring入門 -Spring Boot安全機制_第1頁
《Java輕量級框架技術與應用》 課件全套 王永強 項目1-7 Spring入門 -Spring Boot安全機制_第2頁
《Java輕量級框架技術與應用》 課件全套 王永強 項目1-7 Spring入門 -Spring Boot安全機制_第3頁
《Java輕量級框架技術與應用》 課件全套 王永強 項目1-7 Spring入門 -Spring Boot安全機制_第4頁
《Java輕量級框架技術與應用》 課件全套 王永強 項目1-7 Spring入門 -Spring Boot安全機制_第5頁
已閱讀5頁,還剩181頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目一初識Spring認識Spring目錄Content1Spring依賴注入2需求的不斷變化項目導言零面臨新的挑戰最主流開發框架Spring入門學習目標零知識目標了解Spring的優點;熟悉Spring的下載安裝與結構目錄;熟悉Spring的控制反轉與bean的注入方式;了解Spring中AOP的概念;熟悉Spring中AOP的使用方法。能力目標具備Spring相關依賴的下載的能力;具備創建Spring項目的能力;具備使用Spring中bean注入方式的能力;具備使用Spring進行面向切面編程的能力;具備基于XML配置方式的能力。素質目標具備精益求精、堅持不懈的精神;具有獨立解決問題的能力;具備靈活的思維和處理分析問題的能力;具有責任心。任務1:認識Spring壹Spring概述任務技能Spring是開源應用程序框架。Spring的依賴注入容器、AOP實現和對持久化層的支持。來解決企業應用程序開發復雜性。Spring加載方式Spring的依賴管理,使用Maven或者Gradle等構建工具來管理依賴關系。管理Spring的依賴關系使用定位并下載大量的jar包來使用Spring。對于基本的依賴注入那只需要一個必須的外部依賴--日志任務1-1:Spring概述壹1什么是SpringSpring是一款流行的開源應用程序框架,可以幫助開發者構建高效的企業級應用程序。Spring框架的核心是IoC(inversionofcontrol)和AOP(aspect-orientedprogramming)容器,IOC-控制反轉避免對象之間的耦合避免應用程序依賴于容器的功能AOP-面向切片編程它們可以幫助開發者實現松散耦合和面向切面的編程,從而使得應用程序更加易于測試和維護。Spring是一個全面的解決方案。但它堅持一個原則:不重新造輪子。任務1-1:Spring概述壹2Spring模塊下圖描述了SpringFramework包含的內容。組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。任務1-1:Spring概述壹3Spring的優點提供了一個一致的編程模型。旨在促進代碼重用。旨在促進面向對象的設計。致力于推動好的編程習慣,如用接口編程。Spring改進了從Java代碼中提取配置值到XML或者屬性文件中的方法。32145任務1-1:Spring概述壹在項目中引入Spring可以帶來的好處如下所示:降低組件之間的耦合度,實現軟件各層之間的解耦。可以使用容器提供的眾多服務,如:事務管理服務、消息服務等等。當使用容器管理事務時,開發人員就不再需要手工控制事務。也不需處理復雜的事務傳播。容器提供單例模式支持,開發人員不再需要自己編寫實現代碼。容器提供了AOP技術,利用它很容易實現如權限攔截、運行期監控等功能。容器提供的眾多輔助類,使用這些類能夠加快應用的開發,如:JdbcTemplate、HibernateTemplate。Spring對于主流的應用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,這樣更便于應用的開發。321456任務1-2:Spring加載方式壹Spring的依賴管理,可以幫助我們更好地管理應用程序中的依賴關系。

在Spring中,可以使用Maven或者Gradle等構建工具來管理依賴關系。如果使用Spring,需要獲得Spring的jar包,其中要包括需要使用的Spring的模塊。在社區下載點/downloads/community。Maven的中央庫,也是Maven默認檢索的資源庫企業級資源庫(EnterpriseBundleRepository,EBR),同時也提供了和Spring整合的所有類庫。在AmazonS3為開發和里程碑版本發布(最終發布的版本這里也會有)而設置的公共Maven資源庫。任務1-3:管理Spring的依賴關系壹對于基本的依賴注入那只需要一個必須的外部依賴,就是日志。如果使用的是Maven,可以在pom.xml文件中添加以下內容來管理Spring的依賴關系,代碼如下所示。<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.10</version></dependency></dependencies>如果您使用的是Gradle,可以在build.gradle文件中添加以下內容來管理Spring的依賴關系:dependencies{implementation'org.springframework:spring-context:5.3.10'}任務2:Spring依賴注入貳Spring控制反轉任務技能Spring是一個開源的控制反轉(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是簡化企業開發。bean注入方式依賴注入的作用就是在使用Spring框架創建對象時,動態的將其所依賴的對象注入到Bean組件中,bean作用域Bean的作用域定義了Bean在我們使用它的上下文中的生命周期和可見性。任務2-1:Spring控制反轉貳

Spring是一個開源的控制反轉(InversionofControl,IoC)和面向切面(AOP)的容器框架。它的主要目的是簡化企業開發。0102IOC01控制反轉模式(也稱作依賴性介入)表示不創建對象,但是描述創建它們的方式。IOC容器02Spring的一個核心特性是IOC。,它的基本思想是將對象的創建、管理和依賴關系的處理從業務邏輯中分離出來,交由IOC容器來完成。任務2-2:bean注入方式貳

依賴注入(DependencyInject,縮寫DI)就是由IoC容器在運行期間動態地將某種依賴資源注入對象之中。在Spring中,依賴注入的作用就是在使用Spring框架創建對象時,動態的將其所依賴的對象注入到Bean組件中。有三種主要的Bean注入方式:0102構造函數注入Setter方法注入字段注入任務2-2:bean注入方式貳

通過構造函數注入,需要在Bean定義時指定Bean所需的依賴關系。SpringIOC容器會在創建Bean時自動調用對應的構造函數,并將所需的依賴關系作為參數傳遞進去。示例代碼如下:0102publicclassExampleBean{privatefinalDependencydependency;publicExampleBean(Dependencydependency){this.dependency=dependency;}}<beanid="exampleBean"class="com.example.ExampleBean"><constructor-argref="dependency"/></bean>1構造函數注入任務2-2:bean注入方式貳

通過Setter方法注入,需要在Bean定義中指定Bean所需的依賴關系,并且為Bean定義對應的Setter方法。SpringIOC容器會在創建Bean后,自動調用Bean的Setter方法,并將所需的依賴關系作為方法參數傳遞進去。示例代碼如下:0102publicclassExampleBean{privateDependencydependency;publicvoidsetDependency(Dependencydependency){this.dependency=dependency;}}<beanid="exampleBean"class="com.example.ExampleBean"><propertyname="dependency"ref="dependency"/></bean>2Setter方法注入任務2-2:bean注入方式貳

通過字段注入,需要在Bean定義中指定Bean所需的依賴關系,并將依賴關系標記為@Autowired或@Resource等注解。SpringIOC容器會自動掃描Bean中所有需要注入的字段,并將所需的依賴關系自動注入進去。示例代碼如下:publicclassExampleBean{@AutowiredprivateDependencydependency;}<beanid="exampleBean"class="com.example.ExampleBean"></bean>3字段注入任務2-3:bean作用域貳bean作用域概述Bean的作用域定義了Bean在我們使用它的上下文中的生命周期和可見性。Spring框架的最新版本定義了6種作用域:singleton、prototype、request、session、application和websocket。其中,后四種作用域僅在Web感知應用程序中可用?。任務2-3:bean作用域貳Singleton作用域和Prototype作用域是Spring框架中兩種常用的Bean作用域。Singleton作用域

每次通過getBean()方法獲取該實例時,都返回同一個實例。適用于那些需要在整個應用程序中共享的對象,例如數據庫連接池、線程池等。可能存在線程安全的問題,需要注意并發訪問的情況。Prototype作用域

每次通過getBean()方法獲取該實例時,都返回一個新的實例。適用于那些需要在每次請求時都重新初始化的對象,例如請求參數封裝類、臨時計算結果等。每次獲取實例時都會創建新的對象,不會存在線程安全的問題。任務2-3:bean作用域貳【示例】演示Singleton作用域和Prototype作用域首先,創建一個名為SingletonBean的類,使用@Component注解將其標記為一個組件,并將作用域設置為Singleton。@Component@Scope("singleton")publicclassSingletonBean{privateintcount=0;publicvoidincrement(){count++;}publicvoidshowMessage(){System.out.println("SingletonBean:Count="+count);}}任務2-3:bean作用域貳然后,創建一個名為PrototypeBean的類,使用@Component注解將其標記為一個組件,并將作用域設置為Prototype。@Component@Scope("prototype")publicclassPrototypeBean{privateintcount=0;publicvoidincrement(){count++;}publicvoidshowMessage(){System.out.println("PrototypeBean:Count="+count);}}任務2-3:bean作用域貳接下來,創建一個名為Main的類,使用@Autowired注解將SingletonBean和PrototypeBean注入進來,并進行測試。@ComponentpublicclassMain{@AutowiredprivateSingletonBeansingletonBean;@AutowiredprivatePrototypeBeanprototypeBean;publicvoidrun(){//SingletonBeansingletonBean.increment();singletonBean.showMessage();

//PrototypeBeanprototypeBean.increment();prototypeBean.showMessage();

//PrototypeBeanprototypeBean.increment();prototypeBean.showMessage();//SingletonBeansingletonBean.increment();singletonBean.showMessage();}}任務2-3:bean作用域貳最后,在應用程序的入口處,創建一個ApplicationContext對象,并使用getBean()方法獲取Main實例,然后調用run()方法。publicclassApplication{publicstaticvoidmain(String[]args){ApplicationContextcontext=newAnnotationConfigApplicationContext(AppConfig.class);Mainmain=context.getBean(Main.class);main.run();}}

任務2-3:bean作用域貳運行應用程序,輸出結果如圖可以看到,SingletonBean是一個單例,每次調用increment()方法后,count的值會被保留下來。而PrototypeBean是一個原型,每次調用increment()方法后,count的值會被重新初始化。任務3:Spring中的AOP叁AOP簡介任務技能AOP模塊提供了一個符合AOP聯盟標準的面向切面編程的實現。AOP中的概念AOP中涉及很多術語,如切面、連接點、切入點、通知、目標對象、織入、引入等使用Spring進行面向切面編程要進行AOP編程,首先我們要在Spring的配置文件中引入aop命名空間。任務3-1:AOP簡介叁為什么需要AOP?人腦的“內存”也是有限的,如果把所有相關聯的事情像煮臘八粥一樣一股腦放在一塊兒,別說找出解決方案了,不會被逼瘋的就是高人!通過依賴注入,在編寫程序的時候,我們不用關心依賴的組件是怎么實現的了。任務3-1:AOP簡介叁先來看下面的程序代碼:publicvoiddoSomeBusiness(longlParam,StringsParam){ //記錄日志 ("調用doSomeBusiness方法,參數是:"+lParam); //參數合法性驗證 if(lParam<=0){ thrownewIllegalArgumentException("xx應該大于0"); } if(sParam==null||sParam.trim().equals("")){ thrownewIllegalArgumentException("xx不能為空"); } //異常處理 try{ //真正的業務邏輯代碼在這里... //事務控制 mit(); }catch(Exceptione){ //... tx.rollback(); }}1任務3-1:AOP簡介叁如果需要修改系統日志的格式,或者安全驗證的策略,為了保證系統可用,就要在每個業務方法里都反反復復地編寫這些代碼嗎?考慮復雜的業務已經讓人頭大了,再處理這些方方面面的事情,寫出來的代碼既難讀,質量又沒保障。我們怎樣才能專心在真正的業務邏輯上呢?這正是AOP要解決的問題!2什么是AOPAOP是Aspect-OrientedProgrmming的簡稱,意思是面向方面編程。在業務系統中,總有一些散落、滲透到系統各處而且不得不處理的事情,比如安全驗證。需要在頁面上判斷用戶是否登錄、當前登錄用戶是否有權限訪問該頁面,在Action代碼里還要限制用戶是否通過直接在URL輸入路徑中繞過了頁面的權限控制代碼,甚至在業務層代碼里,還要限制不同用戶訪問的不同數據。任務3-1:AOP簡介叁與此類似,日志、事務、安全驗證等這些通用的、散布在系統各處的需要,以及在實現業務系統時關注的事情就稱為“方面”,也稱為“關注點”,如圖所示。如果能把這些“方面”集中處理,那樣既能減少“方面”代碼里的錯誤,又能保證我們在編寫業務邏輯代碼時專心做事,“方面”處理策略發生改變時還能統一做出修改,這就是AOP要做的事情。從系統中分離出方面,然后集中實現。從而可以獨立編寫業務邏輯代碼和方面代碼,在系統運行的時候,再將方面代碼“織入”到系統中。任務3-1:AOP簡介叁3如何使用AOP切點是程序執行過程中的一個特定點,例如方法調用、異常處理或變量賦值等。在AOP中,切點用于確定何時應用橫切關注點。定義切點橫切關注點是一組操作,它們可以應用于切點定義的方法、類或其他程序元素。橫切關注點通常包括日志記錄、安全性檢查、性能測量等。定義橫切關注點通知是在代理對象上定義的一組橫切關注點的邏輯實現。通知可以是一個方法調用,也可以是一個切面。應用通知代理對象是應用程序的一部分,它代表了被橫切關注點影響的程序元素。在AOP中,代理對象通常是通過使用JDK動態代理或CGLIB生成的。配置代理對象任務3-1:AOP簡介叁使用SpringAOP來記錄日志示例代碼如下所示。//定義切點@Pointcut("execution(*com.example.service.*.*(..))")publicvoidserviceMethod(){}//定義橫切關注點@Before("serviceMethod()")publicvoidlogRequest(){//記錄請求信息}//在Spring配置文件中啟用AOP<aop:aspectj-autoproxy/>//在需要進行日志記錄的服務方法中調用logRequest()方法即可publicvoiddoSomething(){//...logRequest();}任務3-2:AOP中的概念叁對AOP的常用術語Aspect(切面)切面指橫切性關注點的抽象JoinPoint(連接點)指那些被攔截到的點Pointcut(切入點)是指我們要對哪些連接點進行攔截的定義Advice(通知)指攔截到連接點之后所要做的事情Target(目標對象)代理的目標對象Weave(織入)將切面應用到目標對象的過程Introduction(引入)可為目標對象添加一些屬性和方法任務3-3:使用Spring進行面向切面編程叁要進行AOP編程,首先我們要在Spring的配置文件中引入aop命名空間,示例配置文件代碼如下所示:<beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/aop/schema/aop/spring-aop.xsd"><!--其他bean定義--><aop:aspectj-autoproxy/></beans>任務3-3:使用Spring進行面向切面編程叁Spring提供了兩種切面聲明方式,注解式和XML式。1.基于XML配置方式聲明切面元素描述<aop:config>SpringAOP配置的根元素<aop:aspect>配置切面<aop:advisor>配置通知器<aop:pointcut>配置切點<aop:before>配置前置通知,在目標方法執行前實施增強,可以應用于權限管理等功能<aop:after>配置后置通知,在目標方法執行后實施增強,可以應用于關閉流、上傳文件、刪除臨時文件等功能<aop:around>配置環繞方式,在目標方法執行前后實施增強,可以應用于日志、事務管理等功能<aop:after-returning>配置返回通知,在目標方法成功執行之后調用通知<aop:after-throwing>配置異常通知,在方法拋出異常后實施增強,可以應用于處理異常記錄日志等功能任務3-3:使用Spring進行面向切面編程叁2.基于注解方式聲明切面注解式聲明方式是通過在切面類上添加@Aspect注解來聲明切面。在Spring配置文件中添加如示例代碼所示代碼的配置:@AspectpublicclassLogAspect{@Before("execution(*com.example.service.*.*(..))")publicvoidlogBefore(JoinPointjoinPoint){//...}}與您共同成長項目二

SpringMVC開發基礎初識SpringMVC目錄Content1SpringMVC進階2攔截器的使用3文件上傳和下載4項目導言零MVC(ModelViewController)是一種軟件架構思想模型Model視圖View控制器Controller學習目標零知識目標了解SpringMVC的概念熟悉SpringMVC的特點掌握SpringMVC框架核心組件的使用方式掌握SpringMVC的常用注解熟悉@Controller與@RequestMapping注解的使用方式了解SpringMVC攔截器的感念掌握SpringMVC攔截器的定義與配置方式熟悉文件的上傳和下載方法能力目標具備使用SpringMVC接受并相應瀏覽器發起的請求的能力具備使用攔截器高效編輯代碼的能力具備獨立使用SpringMVC實現文件上傳下載的能力具備SpringMVC規范注釋編寫的能力素質目標具備精益求精、堅持不懈的精神;具有獨立解決問題的能力;具備靈活的思維和處理分析問題的能力;具有責任心。任務1:初識SpringMVC壹Springmvc概述任務技能SpringMVC是Spring框架中的一個Web框架,是目前最好的實現MVC設計模式的框架。SpringMVC實現了Web層的開發規范,其底層依賴于一系列的功能組件,配合完成整個功能。SpringMVC框架的核心組件SpringMVC實現了Web層的開發規范,其底層依賴于一系列的功能組件,配合完成整個功能。任務1-1:Springmvc概述壹1SpringMVC概念在JavaEE開發中,系統經典的三層架構包括表現層、業務層和持久層。表現層(Web層)持久層(Dao層)業務層(Service層)任務1-1:Springmvc概述壹2SpringMVC特點SpringMVC框架與Spring框架其他組件模塊的無縫集成。SpringMVC框架提供強大而直接的配置方式使用SpringMVC框架能簡單的進行Web層的單元測試,提高開發效率使用SpringMVC框架便于與其他視圖技術集成SpringMVC框架提供了非常靈活的數據驗證、格式化和數據綁定機制SpringMVC框架還提供一套強大的JSP標簽庫來簡化JSP開發支持靈活的本地化、主題等解析SpringMVC框架提供了統一異常處理機制,使得異常處理更加簡單任務1-2:SpringMVC框架的核心組件壹SpringMVC實現了Web層的開發規范,其底層依賴于一系列的功能組件,配合完成整個功能。其流程如圖任務2:SpringMVC進階貳Springmvc常用注解任務技能Spring2.5引入注解式處理器支持,通過@Controller和@RequestMapping注解定義我們的處理器類。任務2-1:Springmvc常用注解貳Spring2.5引入注解式處理器支持,通過@Controller和@RequestMapping注解定義我們的處理器類。并且提供了一組強大的注解:@Controller:用于標識是處理器類;@RequestMapping:用于從客戶端到控制器的地址映射;@RequestParam:用于客戶端參數注入到控制器的數據綁定;之后的Spring版本每次升級,都會提供更多的注解幫助程序開發者進行快速開發,提高開發效率。任務2-1:Springmvc常用注解貳1@Controller注解@Controller注解是Spring框架中用來標識控制器類的注解。它的作用是將一個普通的Java類轉換為SpringMVC中的控制器,使得該類可以響應HTTP請求并返回相應的視圖模型。importorg.springframework.stereotype.Controller;...@Controller //標注@Controller注解publicclassFirstController{...}任務2-1:Springmvc常用注解貳2@RequestMapping@RequestMapping注解用于建立請求URL和Handler(處理器)之間的映射關系,該注解可以標注在方法上和類上。(1)標注在方法上@RequestMapping注解是SpringMVC中用于映射HTTP請求的注解,它可以用于控制器類的方法上,用來指定請求的URL路徑和請求方法。@ControllerpublicclassMyController{

@RequestMapping(path="/")publicStringhome(Modelmodel){model.addAttribute("message","Hello,World!");return"home";}}任務2-1:Springmvc常用注解貳2@RequestMapping(2)標注在類上當@RequestMapping注解標注在類上時,@RequestMapping的value屬性值相當于本處理器類的命名空間,即訪問該處理器類下的任意處理器都需要帶上這個命名空間。@ControllerpublicclassMyController{

@RequestMapping(value="/hello",method=RequestMethod.GET)publicStringhello(Modelmodel){model.addAttribute("message","Hello,World!");return"hello";}

}任務2-1:Springmvc常用注解貳@RequestMapping注解的屬性@RequestMapping注解是SpringMVC中用于映射HTTP請求的注解,它可以用于控制器類或處理器類上,用來指定請求的URL路徑和請求方法。屬性名類型描述nameString可選屬性,用于為映射地址指定別名。valueString[]可選屬性,也是默認屬性,用于指定請求的URL。methodRequestMethod[]可選屬性,用于指定該方法可以處理哪種類型的請求方式。可以是GET、POST、PUT、DELETE等。默認值是GET。paramsString[]可選屬性,用于指定客戶端請求中參數的值,必須包含哪些參數的值,才可以通過其標注的方法處理。headersString[]可選屬性,用于指定客戶端請求中,必須包含哪些header的值,才可以通過其標注的方法處理。consumesString[]可選屬性,用于指定處理請求的提交內容類型(Content-type)。可以是JSON、XML等。默認值是所有類型的都支持。producesString[]可選屬性,用于指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回。可以是JSON、XML等。默認值是所有類型的都支持。任務2-1:Springmvc常用注解貳3@RequestParam@RequestParam是SpringMVC中用于將HTTP請求參數綁定到控制器方法參數上的注解。它可以用于控制器類的方法參數上,用來指定請求的參數名稱和類型。@RequestParam注解有以下幾個屬性:value:name屬性的別名,這里指參數的名稱,即入參的請求參數名稱,required:表示該參數是否是必需的。defaultValue:指定了參數的默認值。如果請求中缺少該參數,則會使用默認值。type:指定了參數的類型。publicStringtest(@RequestParam(value="username",required=false)Stringusername)任務3:攔截器的使用叁攔截器概述任務技能在應用程序中對請求和響應進行處理的組件,它可以在指定的方法調用前或者調用后,執行預先設定的代碼。攔截器定義方式在SpringMVC中定義一個攔截器非常簡單,常用的攔截器定義方式有兩種。攔截器的配置自定義攔截器之后,需要在SpringMVC的配置文件中配置攔截器,攔截器需要在前端控制器中進行配置才能生效:任務3-1:攔截器概述叁SpringMVC的處理器攔截器是一種在應用程序中對請求和響應進行處理的組件,它可以在指定的方法調用前或者調用后,執行預先設定的代碼。常見的應用場景包括:安全認證日志記錄通用行為性能監控緩存對請求進行身份驗證和授權,以確保只有經過認證的用戶才能訪問受保護的資源。記錄請求和響應的詳細信息,以便進行故障排除和性能優化。監測請求的響應時間、吞吐量等指標,提供有關應用程序性能的詳細信息。對請求進行緩存,以減少對后端服務器的負載。讀取cookie得到用戶信息并將用戶對象放入請求,方便后續流程使用任務3-2:攔截器定義方式叁常用的攔截器定義方式有以下兩種。第一種方式是通過實現HandlerInterceptor接口定義攔截器。第二種方式是通過繼承HandlerInterceptor接口的實現類HandlerInterceptorAdapter,定義攔截器。實現HandlerInterceptor接口定義攔截器是最常用的方式之一。HandlerInterceptor接口定義了三個方法:preHandle():在Controller方法執行之前被調用,可以對請求進行預處理,postHandle():在Controller方法執行之后被調用,可以對響應進行后處理,afterCompletion():在Controller方法執行完成后被調用,可以進行資源清理等工作。任務3-2:攔截器定義方式叁示例代碼如下所示publicclassFirstInterceptorimplementsHandlerInterceptor{

@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{//在請求處理之前進行攔截returntrue;}@OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{//在請求處理之后進行攔截}@OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{//在請求處理完成之后進行攔截}}任務3-3:攔截器的配置叁自定義攔截器之后,需要在SpringMVC的配置文件中配置攔截器,攔截器需要在前端控制器中進行配置才能生效:<mvc:interceptors/>標簽用于配置一組攔截器,<mvc:interceptors/>標簽內部可以使用多個<mvc:interceptor/>或直接使用<bean/>標簽分別配置每個攔截器的信息。配置攔截器示例代碼如下所示。<!--配置攔截器--><mvc:interceptors><!--直接配置在mvc:interceptors內部的攔截器對所有請求有效--><beanclass="erceptor.FirstInterceptor"></bean> <mvc:interceptor> <!--配置攔截器生效的路徑--> <mvc:mappingpath="/**"/> <!--配置攔截器不生效的路徑,在生效路徑范圍內,消除不生效的路徑--> <mvc:exclude-mappingpath="/login"/> <!--攔截器的位置--> <beanclass="erceptor.SecondInterceptor"></bean></mvc:interceptor></mvc:interceptors>任務4:文件上傳和下載肆文件上傳任務技能大多數文件上傳都是通過表單形式提交給后臺服務器。文件下載文件下載就是將文件服務器中的文件傳輸到到本機上。任務4-1:文件上傳肆大多數文件上傳都是通過表單形式提交給后臺服務器,因此,要實現文件上傳功能,就需要提供一個文件上傳的表單,并且該表單必須滿足以下3個條件。分別是表單的方法設為post,enctype屬性設置為multipart/form-data和提供<inputtype="file"name="filename"/>的文件上傳輸入框。示例代碼如下所示。<formaction="uploadUrl"method="post"enctype="multipart/form-data"><inputtype="file"name="filename"/><inputtype="submit"value="文件上傳"multiple="multiple"/></form>任務4-1:文件上傳肆SpringMVC為文件上傳提供了直接的支持,這種支持是通過MultipartResolver(多部件解析器)對象實現的。MultipartResolver是一個接口,可以使用MultipartResolver的實現類CommonsMultipartResolver來完成文件上傳工作。第一步:在配置文件中定義MultipartResolver接口的Bean,具體配置方式如下。<beanid="multipartResolver"class="mons.CommonsMultipartResolver"/><!--設置請求編碼格式,必須與JSP中的pageEncoding屬性一致,默認為ISO-8859-1--><propertyname="defaultEncoding"value="UTF-8"/><!--設置允許上傳文件的最大值為2M,單位為字節--><propertyname="maxUploadSize"value="2097152"/></bean>任務4-1:文件上傳肆第二步:添加commons-fileload依賴。CommonsMultipartResolver并未自主實現文件上傳下載對應的功能,而是在內部調用了ApacheCommonsfileload的組件,所以使用SpirngMVC的文件上傳功能,需要在項目中導入ApacheCommonsfileload組件的依賴,即commons-fileload依賴和commons-io依賴。由于commons-fileload依賴會自動依賴commons-io,所以可以只在項目的pom.xml文件中引入如下依賴。<dependency> <groupId>commons-fileload</groupId> <artifactId>commons-fileload</artifactId> <version>1.4</version></dependency>任務4-1:文件上傳肆第三步:當完成文件上傳表單和文件上傳解析器的配置后,就可以在Controller中編寫上傳文件的方法,如下所示:@ControllerpublicclassfileloadController{@RequestMapping("/fileload")publicStringfileload(MultipartFilefile){if(!file.isEmpty()){//保存上傳的文件,filepath為保存的目標目錄 file.transferTo(newFile(filePath))return"uploadSuccess";}return"uploadFailure";}}任務4-2:文件下載肆文件下載就是將文件服務器中的文件傳輸到到本機上。進行文件下載時,為了不以客戶端默認的方式處理返回的文件,可以在服務器端對所下載的文件進行相關的配置。要使用ResponseEntity對象進行文件下載,需要將文件資源對象包裝在Resource對象中,然后將其返回給客戶端。以下是一個示例代碼:@GetMapping("/download")publicResponseEntity<Resource>downloadFile()throwsIOException{Filefile=newFile("/path/to/file");if(!file.exists()){thrownewFileNotFoundException();}HttpHeadersheaders=newHttpHeaders();headers.add(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename=myfile.txt");headers.add(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_OCTET_STREAM_VALUE);Resourceresource=newFileSystemResource(file);returnResponseEntity.ok().headers(headers).contentLength(resource.contentLength()).contentType(resource.contentType()).body(resource);}與您共同成長項目三

SpringBoot開發入門認識SpringBoot目錄Content1SpringBoot程序探究2項目導言零學習目標零知識目標了解SpringBoot的特點;熟悉SpringBoot的開發環境配置;了解SpringBoot工程目錄結構;掌握SpringBoot的自動配置方法;熟悉SpringBoot的執行流程;了解SpringBoot的Starter的概念與使用;掌握SpringBoot的項目熱部署方法。能力目標具備獨立搭建SpringBoot開發環境的能力具備為SpringBoot項目添加熱部署與單元測試的能力。技能目標具備精益求精、堅持不懈的精神;具有獨立解決問題的能力;具備靈活的思維和處理分析問題的能力;具有責任心。任務1:SpringBoot壹SpringBoot簡介任務技能SpringBoot的核心設計思想是“約定優于配置”。SpringBoot特點相比較傳統的Spring框架,SpringBoot優點更明顯。開發環境準備在開發入門程序之前,有必要對項日運行所需環境進行介紹,并提前準備完成。任務1-1:SpringBoot簡介壹Spring框架是一個全面的企業級應用程序開發框架,它提供了許多模塊和組件,包括依賴注入(DI)、面向切面編程(AOP)、數據訪問、Web開發、安全等。Spring框架的目標是簡化企業級應用程序的開發,提高開發效率和可維護性。SpringBoot是Spring框架的一種快速應用程序開發框架,它通過提供自動配置和快速啟動功能,簡化了Spring應用程序的開發過程。SpringBoot的目標是使開發者能夠更快地構建獨立的、生產級別的Spring應用程序。任務1-2:SpringBoot特點壹13572468面向生產自動配置易于測試獨立運行約定優于配置強大的生態系統微服務支持快速啟動任務1-3:開發環境準備壹為了方便入門程序的編寫,在開發入門程序之前,有必要對項日運行所需環境進行介紹,并提前準備完成。JDK環境根據SpringBoot官方文檔說明,SpringBoot2.1.3版本要求JDK本必須是JDK1.8以上,1項目構建工具SpringBoot2.1.3版本官方文檔聲明支持的第三方項目構建工具包括Maven(3.3+)和Gradle(4.4+)2開發工具其中IntelliJIDEA是近幾年比較流行的,且業界評價最高的一款Java開發工具3任務2:SpringBoot程序探究貳工程目錄結構任務技能springboot的目錄結構SpringBoot自動配置使得開發人員可以更加方便地構建應用程序,而不需要手動配置各種組件。SpringBoot執行流程SpringBoot常用類與接口和執行流程SpringBoot的starter將所需的依賴全部以一致的方式進行注入并進行統一管理。SpringBoot項目熱部署自動重新加載應用程序的配置文件和代碼,而無需手動重啟應用程序。任務2-1:工程目錄結構貳新建好的任務1中springboot的目錄結構如圖。0102任務2-2:SpringBoot自動配置貳SpringBoot的自動配置是其一個非常重要的功能,它使得開發人員可以更加方便地構建應用程序,而不需要手動配置各種組件。SpringBoot應用的啟動入口是@SpringBootApplication注解標注類中的main()方法,@SpringBootApplication能夠掃措Spring組件并自動配置SpringBoot,自動配置示例代碼如下所示。@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters={@Filter(type=FilterType.CUSTOM,classes=TypeExcludeFilter.class), @Filter(type=FilterType.CUSTOM,classes=AutoConfigurationExcludeFilter.class)})public@interfaceSpringBootApplication{...}任務2-2:SpringBoot自動配置貳1.注解SpringBoot支持多種注解,通過使用這些注解,開發人員可以告訴SpringBoot應該如何自動配置應用程序的各種組件。(1)@Configuration(2)@EnableAutoConfiguration(3)@ComponentScan(4)@SpringBootApplication2.類路徑掃描SpringBoot會根據應用程序的類路徑來掃描應用程序中的組件和配置信息。具體來說,它會掃描以下幾個目錄:classpath下的jar包和目錄:perties或application.yml文件所在的目錄:系統環境變量指定的目錄:在掃描過程中,SpringBoot會根據注解和配置文件來進行自動配置。任務2-3:SpringBoot執行流程貳1.SpringBoot常用類與接口(1)SpringApplicationRunListener(是SpringBoot應用程序的執行流程中不同執行時間點事件通知的監聽器)(2)ApplicationContextlnitializer(接口是Spring框架中用來初始化應用程序上下文的回調接口)(3)ApplicationRunner和CommandLineRunner(在項目開發過程中可以在容器啟動時執行一些程序處理)任務2-3:SpringBoot執行流程貳2.執行流程每個SpringBoot應用程序都有一個主程序啟動類其中的main方法即啟動人口,main方法通過調用SpringApplication.run方法執行整個SpringBoot應用程序。任務2-3:SpringBoot執行流程貳具體步驟如下所示:①創建SpringApplication實例,調用run方法,同時將啟動入口類作為參數傳遞進去;②通過SpringFactoriesLoader加載META-INF/spring.factories文件,獲取并創建SpringApplicationRunListener對象;③然后由SpringApplicationRunListener來發出starting消息;④創建參數,并配置當前SpringBoot應用需要使用的Environment實例。⑤完成之后,依然由SpringApplicationRunListener來發出environmentPrepared消息;⑥創建Spring的應用上下文實例:ApplicationContext,初始化該實例并設置應用環境配置實例:Environment,同時加載相關的配置項;⑦由SpringApplicationRunListener發出contextPrepared消息,告知SpringBoot應用當前使用的ApplicationContext已準備完畢;⑧將各種Bean組件裝載入Spring的IO容器/應用上下文:⑨重新刷新RefreshSpring的應用上下文實例:ApplicationContext,完成IOC容器可用的最后一步;⑩由SpringApplicationRunListener發出started消息,完成最終的程序的啟動;?由SpringApplicationRunListener發出running消息,告知程序已成功運行起來了。任務2-4:SpringBoot的starter貳在任何一個項目中,依賴管理都是至關重要的一部分。開發人員在使用時只需在pom文件中進行依賴注入即可,以達到快速搭建項目的目的。1.Starter概述Starter可以將需要的功能整合起來,像是一個可拔插式的插件,方便使用。任務2-4:SpringBoot的starter貳比較常用的starter見表名稱作用spring-boot-starter核心starter,包括自動化配置支持,日志以及YAMLspring-boot-starter-aopSpringAOP和AspectJ相關的切面編程starterspring-boot-starter-data-jpa使用HibernateSpringDataJPA的starterspring-boot-starter-jdbc使用HikariCP連接池JDBC的starterspring-boot-starter-security使用SpringSecurity的starterspring-boot-starter-testSpringBoot測試相關的starterspring-boot-starter-web構建restful、springMVC的web應用程序的starterspring-boot-starter-data-redis支持redis緩存。任務2-4:SpringBoot的starter貳基本上不同的Starter都會使用到兩個內容:AutoConfiguration和ConfigurationProperties。我們使用ConfigurationProperties來保存我們的配置,并且這些配置都可以有一個默認值,在沒有主動覆寫原始配置的情況下,默認值就會生效。除此之外,Starter的ConfigurationProperties還使得所有的配置屬性被聚集到一個文件中,這樣我們就告別了Spring項目中XML地獄。任務2-5:SpringBoot項目熱部署貳SpringBoot項目熱部署是指在應用程序運行過程中,可以自動重新加載應用程序的配置文件和代碼,而無需手動重啟應用程序。這對于開發人員來說非常方便,可以大大提高開發效率。SpringBoot支持熱部署的主要原因是它使用了SpringFramework的動態模塊系統,該系統允許應用程序在運行時動態加載和管理模塊。除了使用spring-boot-devtools依賴之外,還可以使用其他一些工具來實現熱部署。例如,可以使用Gradle的restart插件來重新運行應用程序,或者使用IntelliJIDEA的BuildAutomatically功能來自動重新編譯和運行應用程序。任務2-5:SpringBoot項目熱部署貳SpringBootDevTools是SpringBoot提供的一個開發工具,它可以自動重啟應用程序來實現熱部署。其原理如下所示。如果開發的是大型項目,重啟項目會非常耗時,所以使用熱部署減少重啟時間能顯著提高開發效率。啟動應用程序時,SpringBootDevTools會創建一個嵌入式的Tomcat服務器,并將其配置為支持自動重啟。當應用程序需要重新加載配置文件或類文件時,SpringBootDevTools會將這些文件打包成一個可執行的jar包,并將其放置在target/classes目錄下。SpringBootDevTools會在應用程序關閉時自動檢測到需要重新加載的文件,并將其重新打包成可執行的jar包。在重新啟動應用程序時,SpringBootDevTools會使用新的jar包替換舊的jar包,從而實現熱部署。如果應用程序在重新加載過程中發生了異常,SpringBootDevTools會捕獲異常并記錄日志,以便開發人員進行排查。與您共同成長項目四

SpringBoot原理解讀與配置只會信息管理系統的基礎配置目錄Content1智慧信息管理系統的自定義配置2項目導言零支持兩種格式的全局配置文件,屬性文件格式和YAML格式學習目標零知識目標了解SpringBoot的默認配置文件的內容;熟悉注入配置文件屬性值的方法;了解自定義配置文件的方法;掌握@ImportResource注解的使用方法;熟悉多環境配置的方法;熟悉@Profile注解的使用方法。能力目標具備獨立為SpringBoot的各種環境配置文件的能力;具備為系統自定義配置文件的能力。素質目標具備精益求精、堅持不懈的精神;具有獨立解決問題的能力;具備靈活的思維和處理分析問題的能力;具有責任心。任務1:只會信息管理系統的基礎配置壹模塊化管理任務技能在SpringBoot中,可以使用模塊化管理來組織和管理項目的各個模塊。默認配置文件對于SpringBoot項目都需要全局配置文件,目的是用來修改SpringBoot自動配置的默認值。注入配置文件屬性值SpringBoot提供了許多配置,其默認提供的配置,會自動掃描并讀取到屬性值。任務1-1:模塊化管理壹1模塊化管理概述模塊化管理可以幫助我們更好地分離和組織項目的功能,并提高代碼的可維護性和可擴展性。下面是一些常用的模塊化管理方法:01020304Gradle多項目構建Maven多模塊項目SpringBootStarter模塊化開發任務1-1:模塊化管理壹2模塊化管理項目步驟在進行模塊化管理項目中有兩種方式,一種是創建一個父項目,在項目里面添加子模塊,在IDEA軟件中具體步驟如下:第一步:先創建一個springboot項目,參照項目三中的創建方式。第二步:創建完項目之后,選擇項目,右鍵在彈出的選項中選擇“New”→“Module”。效果如圖。任務1-1:模塊化管理壹第三步:在彈出的“NewModule”中,填寫相關信息,創建springboot模塊。效果如圖。任務1-1:模塊化管理壹第四步:點擊“Next”后,在彈出的對話框中選擇SpringBoot的版本,和添加SpringWeb依賴,效果如圖。任務1-1:模塊化管理壹第五步:創建成功后,效果如圖4-4所示,此時創建的模塊在chapter040101中。任務1-2:默認配置文件壹對于SpringBoot項目都需要全局配置文件,目的是用來修改SpringBoot自動配置的默認值。一般使用Properties文件或YAML文件作為全局的配置文件。1perties(1)SpringBoot框架自動添加perties文件的目的之一是為了實現自動配置機制。自動配置機制會根據應用所引入的starter包來自動觸發實現對應功能的bean對象的創建。(2)perties文件除了可以放在resources目錄下之外,還可以放在其他幾個位置,并且存在一個加載優先級的關系,即不同位置都存在一個perties文件,則以優先級高的位置的perties文件的內容為準。任務1-2:默認配置文件壹2application.yaml(1)YAMLYAML是一種人類可讀的以數據為中心數據序列化語言,文件格式是SpringBoot支持的一種JSON超集文件格式。它的語法比較簡潔直觀,特點是使用空格來表達層次結構,其最大優勢在于數據結構方面的表達,所以YAML更多應用于編寫配置文件,其文件一般以.yml或yaml為后綴。YAML支持的數據結構有對象(通過鍵值對表示)、數組和純量(單個的不可再分的值)。在配置YAML文件時,默認放在resources中,除此之外,還可以放在classpath根路徑下,當前工程路徑下、classpath根路徑下的config目錄下和當前工程路徑下的config目錄下,效果如圖。任務1-3:注入配置文件屬性值壹SpringBoot提供了許多配置,其默認提供的配置,會自動掃描并讀取到屬性值。但通常情況我們需要在配置文件中自己定義的值,并將值應用到程序中。1@Value注入屬性@Value注解時Spring框架提供的,用來讀取配置文件中的屬性值并逐個注入Bean對象的屬性中,基于@Value注解來將perties或application.yml文件的某個鍵值對屬性賦值到Java類的某個屬性中,其中該屬性對應的鍵需要放在“${一級屬性名.二級屬性名...}”的花括號里面。支持使用SpEL(SpringExpressionLanguage)表達式進行類型轉換和驗證;支持使用默認值和自定義格式化器等。任務1-3:注入配置文件屬性值壹2@Autowired注入屬性@Autowired是Spring框架中的注解,用于自動裝配Bean對象。通過@Autowired注解,我們可以將一個Bean對象自動注入到另一個Bean對象中,而不需要手動創建和設置依賴對象。具體使用方式如下:(1)字段注入:@AutowiredprivateSomeServicesomeService;(2)構造方法注入:privateSomeServicesomeService;@AutowiredpublicSomeController(SomeServicesomeService){this.someService=someService;}(3)方法注入:privateSomeServicesomeService;@AutowiredpublicvoidsetSomeService(SomeServicesomeService){this.someService=someService;}任務1-3:注入配置文件屬性值壹3@ConfigurationProperties注入屬性@ConfigurationProperties注解是SpringBoot提供的一種用于將配置文件中的屬性值注入到Java類中的方法。它可以自動將配置文件中的屬性值映射到Java類的字段上,并提供了一些方便的特性,例如:支持嵌套屬性和數組類型的屬性;支持類型轉換和驗證;支持默認值和自定義格式化器等。任務1-3:注入配置文件屬性值壹4@ConfigurationProperties和@Value注解區別01底層框架02功能03松散語法04SpEL05JSR303數據校驗06Settrt方法07復雜類型封裝任務2:智慧信息管理系統的自定義配置貳自定義配置文件任務技能定一個或多個屬性源,這些屬性源可以是Java中的類路徑、文件系統路徑或其他資源位置。@ImportResource注解對于傳統的XML配置文件,在SpringBoot項目中同樣可以使用@ImportResource注解進行手動加載。多環境配置概述多環境配置是指在同一個應用程序中,根據不同的運行環境(如開發環境(dev)、測試環境(test)、生產環境(prod等)來加載不同的配置文件或設置不同的參數。任務2-1:自定義配置文件貳定一個或多個屬性源,這些屬性源可以是Java中的類路徑、文件系統路徑或其他資源位置。當應用程序啟動時,SpringBoot會自動加載這些屬性源,并將其中的屬性值注入到應用程序中。默認情況下,@PropertySource注解只支持讀取properties格式的配置文件,不支持讀取yml格式的配置文件。但是,可以通過添加spring-boot-configuration-processor依賴來解決這個問題。這個依賴包含了一個名為spring-boot-configuration-processor的BeanPostProcessor,它可以將yml格式的配置文件轉換為properties格式的配置文件,從而使得@PropertySource注解可以讀取yml格式的配置文件。任務2-2:@ImportResource注解貳對于傳統的XML配置文件,在SpringBoot項目中同樣可以使用@ImportResource注解進行手動加載。@ImportResource注解通常放置在啟動類上,在注解中編寫locations=“classpath:...”來標記XML文件的路徑和名稱。任務2-3:多環境配置概述貳多環境配置是指在同一個應用程序中,根據不同的運行環境(如開發環境(dev)、測試環境(test)、生產環境(prod等)來加載不同的配置文件或設置不同的參數。在實際開發中,我們通常需要根據不同的環境來調整應用程序的行為和性能。為了實現多環境配置,我們可以使用以下幾種方法:使用環境變量使用不同的參數使用不同的配置文件無論使用哪種方法,都需要注意以下幾點:確保不同環境下的配置文件或參數不會相互干擾或沖突。在修改配置文件或參數時,需要進行充分的測試和驗證,以確保應用程序的行為和性能符合預期。在發布應用程序時,需要將所有相關的配置文件和參數打包在一起,并提供給用戶進行安裝和配置。任務2-3:多環境配置概述貳第一步:定義多環境配置文件配置文件名需滿足application-{profile}.properties(.yaml/.yml)的格式appli

溫馨提示

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

評論

0/150

提交評論