




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598知識SpringSpring 是一個開源框架,Spring 是于 2003 年興起的一個輕量級的 Java 開發框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構使用者選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。Spring 使用基本的 JavaBean 來完成以前只可能由EJB 完成的事情。然而,
2、Spring 的用途不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而Spring 是一個分層的 JavaSE/EEfull-stack(一站式)輕量級開源框架。為什么說 Spring 是一個一站式的輕量級開源框架呢?EE 開發可分成三層架構,每一層 Spring 都提供了不同的解決技術。JavaEE 的三層結構,WEB 層:SpringMVC業務層:Spring 的 IoC持久層:Spring 的 JDBCTemplate(Spring 的 JDBC 模板,ORM 模板用于整合其他的持久層框架)有兩部分:反轉。舉例來說,在之前的操作中,比方說有一個類,我們想要調用類里面的方法(不是靜
3、態方法),就要創建類的對象,使用對象調用方法實現。對于 Spring 來說,Spring 創建對象的過程,不是在代碼里面實現的, 而是交給 Spring 來進行配置實現的。AOP:面向切面編程。SpringAOP 原理AOP 編程技術什么是 AOP 編程AOP: Aspect Oriented Programming 面向切面編程。面向切面編程(也叫面向方面):Aspect Oriented Programming(AOP),是目前軟件開發中的一個熱點。 IoC:從上面的簡要介紹中,我們要知道 Spring 的言,任何 Java 應用都可以從 Spring 中受益。Spring 的是反轉(Io
4、C)和面向切面(AOP)。簡單來說,上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598利用 AOP 可以對業務邏輯的各個部分進行可重用性,同時提高了開發的效率。,從而使得業務邏輯各部分之間的耦合度降低,提高程序的AOP 是 OOP 的延續,是(Aspect Oriented Programming)的縮寫,意思是面向切面(方面)編程。主要的功能是:日志,性能統計,安全,事務處理,異常處理等等。主要的意圖是:將日志,性能統計,安全,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,通過對這些行為的分離,我們希望可以將它們行為的時候不影響業務邏輯的代碼。到非指導業務邏輯的
5、方法中,進而改 變這些可以通過預編譯方式和運行期動態實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。AOP 實際是 GoF 設計模式的延續,設計模式孜孜不倦追求的是調用者和被調用者之間的解耦,AOP 可以說也是這種目標的一種實現。假設把應用程序想成一個立體結構的話,OOP 的利刃是縱向切入系統,把系統劃分為很多個模塊(如:用戶模塊,文章模塊等等),而 AOP 的利刃是橫向切入系統,提取各個模塊可能都要重復操作的部分(如:權限檢查,日志等等)。由此可見,AOP 是 OOP 的一個有效補充。注意:AOP 不是一種技術,實際上是編程思想。凡是符合 AOP 思想的技術,都可以看成是 AOP
6、 的實現。Aop, aspect object programming 面向切面編程功能: 讓關注點代碼與業務代碼分離!關注點關注點,重復代碼就叫做關注點;切面關注點形成的類,就叫切面(類)!面向切面編程,就是指 對很多功能都有的重復的代碼抽取,再在運行的時候網業務方法上動態植入“切面類代碼”。切入點執行目標對象方法,動態植入切面代碼。可以通過切入點表達式,指定哪些類的哪些方法; 給指定的類在運行的時候植入切面類代碼。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598AOP 底層實現原理設計模式什么是模式通過對象的,可以詳細某個對象的方法,在這個方法調用處理,或調用后
7、處理。既(AOP 微實現),AOP技術面向切面編程。模式應用場景SpringAOP、事物原理、日志打印、權限、調用、安全可以隱蔽真實的分類靜態(靜態定義類)動態(動態生成類)Jdk 自帶動態Cglib 、javaassist(字節碼操作庫)靜態什么是靜態由程序員創建或工具生成類的源碼,再編譯類。所謂靜態也就是在程序運行前就已經存在類的字節碼文件,類和委托類的關系在運行前就確定了。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598靜態代碼動態什么是動態1.對象,不需要實現接口2.對象的生成,是利用 JDK 的 API,動態的在內存中構建對象(需要我們指定創建對象/目標對
8、象實現的接口的類型)3.動態也叫做:JDK,接口JDK 動態1)原理:是根據類加載器和接口創建類(此類是接口的實現類,所以必須使用接口 面向接口生成,位于 java.lang.reflect 包下)2)實現方式:1. 通過實現 InvocationHandler 接口創建自己的調用處理器 IvocationHandler handler = new InvocationHandlerImpl( );2. 通過為 Proxy 類指定 ClassLoader 對象和一組 interface 創建動態類 Class clazz = Proxy.getProxyClass(classLoader,ne
9、w Class );3. 通過反射機制獲取動態類的構造函數,其參數類型是調用處理器接口類型 Constructor constructor = clazz.getConstructor(newClassInvocationHandler.class);4. 通過構造函數創建類實例,此時需將調用處理器對象作為參數被傳入 Interface Proxy = (Interface)constructor.newInstance(newpublic interface IUserDao void save();public class UserDao implements IUserDao publi
10、c void save() System.out.println("已經保存數據.");類public class UserDaoProxy implements IUserDao private IUserDao target;public UserDaoProxy(IUserDao iuserDao) this.target = iuserDao;public void save() System.out.println("開啟事物."); target.save(); System.out.println("關閉事物.");上海
11、每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598Object (handler);缺點:jdk 動態,必須是面向接口,目標業務類必須實現接口CGLIB 動態原理:利用 asm 開源包,對對象類的 class 文件加載進來,通過修改其字節碼生成子類來處理。什么是 CGLIB 動態使用 cglibCode Generation Library實現動態,并不要求委托類必須實現接口,底層采用 asm 字節碼生成框架生成類的字節碼/ 每次生成動態類對象時,實現了InvocationHandler接口的調用處理器對象public class InvocationHandlerImp
12、l implements InvocationHandler private Object target;/ 這其實業務實現類對象,用來調用具體的業務方法/ 通過構造函數傳入目標對象public InvocationHandlerImpl(Object target) this.target = target;public Object invoke(Object proxy, Method method, Object args) throws Throwable Object result = null;System.out.println("調用開始處理");resu
13、lt = method.invoke(target, args); System.out.println("調用結束處理"); return result;public static void main(String args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException / 被對象IUserDao userDao = ne
14、w UserDao();InvocationHandlerImpl invocationHandlerImpl = new InvocationHandlerImpl(userDao); ClassLoader loader = userDao.getClass().getClassLoader();Class<?> interfaces = userDao.getClass().getInterfaces();/ 主要裝載器、一組接口及調用處理動態實例IUserDao newProxyInstance = (IUserDao) Proxy.newProxyInstance(loa
15、der, interfaces, invocationHandlerImpl); newProxyInstance.save();上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598CGLIB 動態相關代碼CGLIB 動態與 JDK 動態區別java 動態是利用反射機制生成一個實現接口的類,在調用具體方法前調用 InvokeHandler 來處理。而 cglib 動態是利用 asm 開源包,對對象類的 class 文件加載進來,通過修改其字節碼生成子類來處理。Spring 中。1、如果目標對象實現了接口,默認情況下會采用 JDK 的動態實現 AOP2、如果目標對象實現了
16、接口,可以強制使用 CGLIB 實現 AOP3、如果目標對象沒有實現了接口,必須采用 CGLIB 庫,spring 會自動在 JDK 動態和 CGLIB 之間轉換JDK 動態只能對實現了接口的類生成,而不能類 。CGLIB 是類實現,主要是對指定的類生成一個子類,覆蓋其中的方法 。因為是繼承,所以該類或方法最好不要成 final ,final 可以繼承和多態。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598AOP 編程使用注解版本實現 AOP<aop:aspectj-autoproxy></aop:aspectj-autoproxy> 開啟事
17、物注解權限Aspect指定一個類為切面類Pointcut("execution(* com.itmayiedu.service.UserService.add(.)") 指定切入點表達式Before("pointCut_()")前置通知: 目標方法之前執行After("pointCut_()")后置通知:目標方法之后執行(始終執行) AfterReturning("pointCut_()")返回后通知: 執行方法結束前執行(異常不執行) AfterThrowing("pointCut_()")異
18、常通知: 出現異常時候執行Around("pointCut_()")環繞通知: 環繞目標方法執行Component Aspectpublic class AopLog / 前置通知Before("execution(* com.itmayiedu.service.UserService.add(.)")public void begin() System.out.println("前置通知");/ 后置通知After("execution(* com.itmayiedu.service.UserService.add(.)&
19、quot;)public void commit() System.out.println("后置通知");/ 運行通知AfterReturning("execution(* com.itmayiedu.service.UserService.add(.)")public void returning() System.out.println("運行通知");/ 異常通知AfterThrowing("execution(* com.itmayiedu.service.UserService.add(.)")publ
20、ic void afterThrowing() System.out.println("異常通知");上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598XML 方式實現 AOPXml 實現 aop 編程:1) 引入 jar 文件 【aop 相關 jar, 4 個】2) 引入 aop 名稱空間3) aop 配置* 配置切面類 (重復執行代碼形成的類)* aop 配置哪些方法 /到方法后應用通知代碼<beans xmlns=""xmlns:xsi=""xmlns:p=""xmlns:co
21、ntext=""xmlns:aop=""xsi:schemaLocation=""><!- dao 實例 -><bean id="userService" class="com.itmayiedu.service.UserService"></bean><!- 切面類 ->/ 環繞通知Around("execution(* com.itmayiedu.service.UserService.add(.)")public v
22、oid around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable System.out.println("環繞通知開始");proceedingJoinPceed();System.out.println("環繞通知結束");上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598AOP 編程應用場景日志,性能統計,安全,事務處理,異常處理Spring 事務使用事務基本特性
23、 原子性(Atomicity)原子性是指事務包含的所有操作要么全部,要么全部失敗回滾,因此事務的操作如果就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。 一致性(Consistency)一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處于一致性狀態。拿轉賬來說,假設用戶A 和用戶B 兩者的錢加起來一共是 5000,那么不管 A 和 B 之間如何轉賬,轉幾次賬,事務結束后兩個用戶的錢相加起來應該還得是 5000,這就是事務的一致性。性(Isolation)性是當多個用戶并發數據庫時,比如操作同一張表時,數據庫為每一個用戶開
24、啟的事務,不上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598能被其他事務的操作所干擾,多個并發事務之間要相互。即要達到這么一種效果:對于任意兩個并發的事務 T1 和 T2,在事務 T1 看來,T2 要么在 T1 開始之前就已經結束,要么在 T1 結束之后才開始,這樣每個事務都感覺不到有其他事務在并發地執行。關于事務的性數據庫提供了多種級別,稍后會介紹到。 持久性(Durability)持久性是指一個事務一旦被提交了,那么對數據庫中的數據的改變就是性的,即便是在數據庫系統遇到故障的情況下也丟失提交事務的操作。例如我們在使用 JDBC 操作數據庫時,在提交事務方法后,提
25、示用戶事務操作完成,當我們程序執行完成直到看到提示后,就可以認定事務以及正確提交,即使這時候數據庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是數據庫因為故障而沒有執行事務的錯誤。事務分類編程式事務自己手動事務,就叫做編程式事務。Jdbc 代碼:Conn.setAutoCommite(false); / 設置手動Hibernate 代碼:事務Session.beginTransaction();/ 開啟一個事務【細粒度的事務: 可以對指定的方法、指定的方法的某幾行添加事務】(比較靈活,但開發起來比較繁瑣: 每次都要開啟、提交、回滾.)式事務Spring
26、 提供了對事務的管理, 這個就明式事務管理。Spring 提供了對事務的實現。用戶如果想用 Spring 的式事務管理,只需要在配置文件中配置即可; 不想使用時直接移除配置。這個實現了對事務的最大程度的解耦。Spring式事務管理,實現就是基于 Aop。【粗粒度的事務: 只能給整個方法應用事務,不可以對方法的某幾行應用事務。】(因為 aop的是方法。)Spring式事務管理器類:Jdbc 技術:DataSourceTransactionManagerHibernate 技術:HibernateTransactionManager上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 1162
27、95598手寫 Spring 事務框架編程事務實現概述所謂編程式事務指的是通過編碼方式實現事務, 即類似于 JDBC 編程實現事務管理。管理使用TransactionTemplate 或者直接使用底層的 PlatformTransactionManager。對于編程式事務管理,spring推薦使用 TransactionTemplate。案例使用編程事務實現手動事務使用編程事務實現,手動事務 begin、commit、rollback上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598AOP 技術封裝手動事務上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 11
28、6295598使用事務注意事項事務是程序運行如果沒有錯誤,會自動提交事物,如果程序運行發生異常,則會自動回滾。如果使用了 try 捕獲異常時.一定要在 catch 里面手動回滾。事務手動回滾代碼TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();事務實現概述管理建立在 AOP 之上的。其本質是對方法前后進行,然后在目標方法開始之前創建或者加入一個事務,在執行完目標方法之后根據執行情況提交或者回滾事務。式事務最大的優點就是不需要通過編程的方式管理事務,這樣就不需要在業務邏輯代碼中摻雜事務管理的代碼,只需在配置
29、文件中做相關的事務規則(或通過基于Transactional 注解的方式),便可以將事務規則應用到業務邏輯中。顯然式事務管理要優于編程式事務管理,這正是 spring 倡導的非侵入式的開發方式。式事務管理使業務代碼不受污染,一個普通的 POJO 對象,只要加上注解就可以獲得完全的事務支持。和編程式事務相比,式事務唯一不足地方是,后者的最細粒度只能作用到方法級別,無法做到像編程式事務那樣可以作用到代碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的代碼塊為方法等等。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598XML 實現注解版本上
30、海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598用法手寫 Spring 注解版本事務注解Jdk1.5 新增新技術,注解。很多框架為了簡化代碼,都會提供有些注解。可以理解為插件,是代碼級別的插件,在類的方法上寫:,就是在代碼上了一個插件。注解也不能影響代碼的實際邏輯,僅僅起到輔助性的作用。注解分類:內置注解(也成為元注解 jdk 自帶注解)、自定義注解(Spring 框架)什么是內置注解(1) SuppressWarnings 再程序前面加上可以在 javac 編譯中去除警告-階段是 SOURCE(2) Deprecated 帶有標記的包,方法,字段說明其過時階段是 S
31、OURCE(3) Overricle 打上這個標記說明該方法是將父類的方法重寫-階段是 SOURCEOverricle 案例演示Deprecated 案例演示上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598SuppressWarnings 案例演示實現自定義注解元注解的作用就是負責注解其他注解。Java5.0 定義了 4 個標準的 meta-annotation 類型,它們被用來提供對其它 annotation 類型作說明。Java5.0 定義的元注解:TargetTarget 說明了 Annotation 所修飾的對象范圍:Annotation 可被用于 pack
32、ages、types(類、接口、枚舉、Annotation 類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch 參數)。在 Annotation 類型的中使用了 target 可更加明晰其修飾的目標。.5.6.7.CONSTRUCTOR:用于描述構造器FIELD:用于描述域 LOCAL_VARIABLE:用于描述局部變量METHOD:用于描述方法PACKAGE:用于描述包PARAMETER:用于描述參數TYPE:用于描述類、接口(包括注解類型) 或 enum2.Retention表示需要在什么級別保存該注釋信息,用于描述注解的生命周期
33、(即:被描述的注解在什么范圍內有效)3. Documented4. Inherited使用interface 定義注解。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598自定義事務注解上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598Spring 事物行為Spring 中事務的定義:Propagation(key 屬性確定有以下選項可供使用:應該給哪個方法增加事務行為。這樣的屬性最重要的部份是
34、行為。)PROPAGATION_REQUIRED如果當前有事務,就用當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。PROPAGATION_SUPPORTS-支持當前事務,如果當前沒有事務,就以非事務方式執行。/如果外層方法沒有事務,就會以非事務進行執行。PROPAGATION_MANDATORY-支持當前事務,如果當前沒有事務,就拋出異常。PROPAGATION_REQUIRES_NEW-新建事務,如果當前存在事務,把當前事務掛起。PROPAGATION_NOT_SUPPORTED-以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。- 如果當前有事務,就是以非事務進行執
35、行PROPAGATION_NEVER-以非事務方式執行,如果當前存在事務,則拋出異常。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598默認行為為 REQUIREDSpringIOC 原理XML 技術什么是 XML它是可擴展標記語言(Extensible Markup Language,簡稱 XML),是一種標記語言。XML 全稱為可擴展的標記語言。主要用于描述數據和用作配置文件。XML 文檔在邏輯上主要由一下 5 個部分組成:XML:指明所用 XML 的版本、文檔的編碼、文檔的性信息文檔類型:指出 XML 文檔所用的 DTD元素:由開始、元素內容和結束注釋:以結束,
36、用于對文檔中的內容起一個說明作用處理指令:通過處理指令來通知其他應用程序來處理非 XML 格式的數據,格式為XML 文檔的根元素被稱為文檔元素,它和在其外部出現的處理指令、注釋等作為文檔實體的子節點,根元素本身和其內部的子元素也是一棵樹。XML 樣例<?xml version="1.0" encoding="UTF-8"?>作用 xml 文件頭部要寫的話,說明了 xml 的版本和編碼,utf-8 一般是網絡傳輸用的編碼上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598方式?XMLDom4j、Sax、PullDom4j
37、 與 Sax 區別dom4j 不適合大文件的,因為它是一下子將文件加載到內存中,所以有可能出現內存溢出,sax 是基于來對 xml 進行的,所以他可以大文件的 xml,也正是因為如此,所以 dom4j 可以對 xml 進行靈活的增刪改查和導航,而 sax 沒有這么強的靈活性,所以 sax 經常是用來大型 xml 文件,而要對 xml 文件進行一些靈活(crud)操作就用 dom4j。使用 dom4jxmlXML 過程是通過獲取 Document 對象,然后繼續獲取各個節點以及屬性等操作,因此獲取 Document 對象是第一步,大體說來,有三種方式:1.自己創建 Document 對象其中 s
38、tudents 是根節點,可以繼續添加其他節點等操作。2.自己創建 Document 對象3.XML 文本內容獲取 Document 對象xml 代碼Xml 配置:上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598Java 代碼注意:上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598this.getClass().getClassLoader().getResourceAsStream(xmlPath) 獲取當前項目路徑 xmlfsfsXML 與 JSON 區別Xml 是重量級格式,占寬帶比較大。JSON 是輕量級交換格式,xml 占寬帶小。
39、所有很多互聯網公司都會使用 json 作為格式很多項目,大多數還是在使用 xml。什么是 SpringIOCspring ioc 指的是反轉,IOC 容器負責實例化、配置應用程序中的對象及建立這些對象間的依賴。交由 Spring 來管理這些,實現解耦SpringIOC 原理使用反射機制+XML 技術手寫 SpringIOCXML 版本上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598手寫 SpringIOC 注解版本上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上
40、海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598常用反射工具類上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598Maven 相關依賴上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598SpringIOC 容器接口上海每特
41、教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598SpringMVC 原理SpringMVC 的運行流程用戶請求至前端器 DispatcherServletDispatcherServlet 收到請求調用 HandlerMapping 處理器器。處理器器根據請求 url 找到具體的處理器,生成處理器對象及處理器器(如果有則生成)一并返回給 DispatcherServlet。DispatcherServlet 通過 HandlerAdapter 處理器適配器調用處理器執行處理器(Controller,也叫后端器)。Controller 執行完成返回 MAndViewHandl
42、erAdapter 將 controller 執行結果 MAndView 返回給 DispatcherServletDispatcherServlet 將 MAndView 傳給 ViewReslover 視圖器ViewReslover后返回具體 ViewDispatcherServlet 對 View 進行渲染視圖(即將模型數據填充至視圖中)。DispatcherServlet 響應用戶。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598回顧 Servet 知識什么是 ServletJava Servlet 是運行在 Web服務器或應用服務器上的程序,它是作為來自
43、Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。使用 Servlet,您可以收集來自網頁表單的用戶輸入,呈現來自數據庫或者其他源的還可以動態創建網頁。,Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共網關接口)實現的程序可以達到異曲同工的效果。但是相比于 CGI,Servlet 有以下幾點優勢:性能明顯更好。Servlet 在 Web 服務器的地址空間內執行。這樣它就沒有必要再創建一個單獨的進程來處理每個客戶端請求。Servlet 是服務器上的Servlet 是于平臺的,因為它們是用 J
44、ava 編寫的。Java 安全管理器執行了一系列限制,以保護服務器計算機上的的。因此,Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和applets、數據庫或其他軟件進行交互。RMI 機制與什么是 Servlet 生命周期Servlet 生命周期:Servlet 加載>實例化>服務>銷毀。init():在 Servlet 的生命周期中,僅執行一次 init()方法。它是在服務器裝入 Servlet 時執行的,負責初始化 Servlet 對象。可以配置服務器,以在啟動服務器或客戶機首次Servlet 時裝入Servlet。無論有多少客戶
45、機service():Servlet,都重復執行 init()。它是 Servlet 的,負責響應客戶的請求。每當一個客戶請求一個 HttpServlet 對象,該對象的 Service()方法就要調用,而且傳遞給這個方法一個“請求”(ServletRequest)對象和一個“響應”(ServletResponse)對象作為參數。在 HttpServlet 中已存在 Service()方法。默認的服務功能是調用與 HTTP 請求的方法相應的 do 功能。destroy():僅執行一次,在服務器端停止且卸載 Servlet 時執行該方法。當 Servlet 對象生命周期時,負責占用的。一個 Se
46、rvlet 在運行 service()方法時可能會產生其他的線程,因此需要確認在調用 destroy()方法時,這些線程已經終止或完成。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598手寫 SpringMVC 思路1.web.xml 加載為了web.xml 中的配置,我們用到 ServletConfig 這個類,它代表當前Servlet 在 web.xml 中的配置信息。通過 web.xml 中加載我們自己寫的MyDispatcherServlet 和配置文件。2、初始化階段在前面我們提到 DispatcherServlet 的 initStrategies 方初始
47、化 9 大組件,但是這里將實現一些 SpringMVC 的最基本的組件而不是全部,按順序包括:···加載配置文件掃描用戶配置包下面所有的類拿到掃描到的類,通過反射機制,實例化。并且放到 ioc 容器中(Map 的鍵值對beanName-bean) beanName 默認是首字母小寫初始化 HandlerMapping,這里其實就是把 url 和 method 對應起來放在一個 k-v 的Map 中,在運行階段取出·3、運行階段每一次請求將會調用 doGet 或 doPost 方法,所以統一運行階段都放在doDispatch 方法里處理,它會根據 url
48、請求去 HandlerMapping 中匹配到對應的Method,然后利用反射機制調用 Controller 中的 url 對應的方法,并得到結果返回。按順序包括以下功能:···異常的獲取請求傳入的參數并處理參數通過初始化好的 handlerMapping 中拿出 url 對應的方法名,反射調用手寫 SpringMVC 基本實現/* 手寫SpringMVC框架 作者:每特教育-余勝軍<br>上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598數據庫連接池原理基本原理在內部對象池中,維護一定數量的數據庫連接,并對外數據庫連接的獲取和返回方法。如外部使用者可通過 getConnection 方法獲取數據庫連接, 使用完
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中音樂課堂多聲部合唱教學策略與音樂教育改革研究論文
- 校本課程開發中的課程內容設計論文
- 繪畫課程對學生視覺思維的影響論文
- 基于虛擬現實技術的初中地理教學情境創設與教學效果評價論文
- 艾伯森財務管理制度
- 苗圃地員工管理制度
- 茶牌坊人員管理制度
- 融資合同:流動資金貸款合同
- 評估指標體系和評估機制構建支撐工作競爭性磋商文件
- 財政學 期末考試復習重點總結
- (2025)入黨積極分子培訓考試試題及答案
- 2025年計算機網絡技術考試試卷及答案
- 2025年天津市河西區中考二模語文試題
- 教育事業十五五(2026-2030)發展規劃
- 2025年中醫基礎理論考試試題及答案
- 2025中國鐵路濟南局集團限公司招聘116人(七)易考易錯模擬試題(共500題)試卷后附參考答案-1
- 酒店入股合同協議書范本
- 河南省南陽市2025年七年級英語第二學期期末學業水平測試模擬試題含答案
- T/CNESA 1003-2020電力儲能系統用電池連接電纜
- 2025年高考軍隊院校征集和招錄人員政治考核表(原表)
- TCCEAS001-2022建設項目工程總承包計價規范
評論
0/150
提交評論