1. 程式人生 > >2018年個人總結

2018年個人總結

2018年個人總結:

18年馬上就要過去了,回首這一年間自己究竟學習了哪些東西,自己又會了哪些東西讓我回想起來真是另自己擔憂啊,不知道學習這些東西時熱情是很十足的自己也通過上手練習了一些專案,但是現在回想起來還是有些失望,因為好多東西都遺忘了。我是跟著黑馬32期的視訊進行學習的其中自己學了JAVA基礎知識,自認為還是學的可以的,但是真正的用到實際時像io流的用法,用有時遺忘的速度還真是挺快的,有時感覺自己有點笨了,現在想想,如果離開了瀏覽器自己真的能做出一些實際的東西嗎,想到這裡真是另自己十分的擔憂,但是同樣18年自己也有一部分的收穫,18年我主要學習了哪些知識吧這裡進行簡單的歸納下:

JAVAWeb基礎:web,tomcat的使用,http協議,request,response,jsp,jsp的九大隱式物件,四大作用域(request域,session域,pagecontext域,servlertContext域)cookie,el表示式,jstl,自定義標籤,檔案上傳,下載,servlert的使用,JAVAMail的使用

然後就是解析xml和xml的格式,ajax,jquery,bootstrap,jqueryEasyUi,ubuntu伺服器專案的部署,json,

接著就是進入了框架的行列:框架來說是封裝了一些基本的使用從而簡化了程式碼的使用,主要學習的struts,spring,hibernate,聯絡了ssh專案,接著學習了springmvc,mybatis,maven,POI,pinyin4j,shiro許可權控制,webService,ehcache快取,quartz,jpa,springboot。

這些一系列的知識雖說自己能夠把他給串起來,但是有的知識還是在遺忘,這個遺忘週期令人是很煩惱的。

最初我學習這個東西只知道這個是做什麼的,到最後回過頭才發現,他為什麼可以這樣做,這是一個需要很大的過程的,比如剛開始使用struts時感覺他把資料自動封裝到model中感覺很厲害,但是等到學習spring時依賴注入的方式感覺更加的方便,這樣一來就感覺他們的使用相差不太大,但是又是很有區別的, 

        ①. Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
        ②. Spring MVC 會稍微比 Struts2 快些. Spring MVC 是基 於方法設計, 而 Sturts2 是基於類, 每次發一次請求都會實 例一個 Action.
        ③. Spring MVC 使用更加簡潔, 開發效率Spring MVC確實 比 struts2 高: 支援 JSR303, 處理 ajax 的請求更方便
        ④. Struts2 的 OGNL 表示式使頁面的開發效率相比Spring MVC 更高些. 

但是後來學習了springboot又把spring的繁瑣的配置給省略了,這樣一來感覺到為什麼會有後面的新的技術的出現呢,這樣都是為了消除前面的繁瑣的功能,都是為了簡化前面的實現。

那麼我有時會提出寫問題:

同樣都是使用mvc模式為了是軟體分層那麼問題來了:

1.為什麼我要使用struts2:

2.為什麼dao層我選擇hibernate或者mybatis而不是使用jdbc或者DButils呢:

3.為什麼我要使用spring(包括springmvc)

4.為什麼我要使用springboot:

5.對於團隊協作開發:我為什麼要使用 maven分模組開發:

6.為什麼ssh(springMVC,spring,hibernate|| struts2,spring,hibernate)專案不是那麼受歡迎:

7.為什麼很多都在使用ssm(spring,springMVC,Mybatis)

解答1:Struts2 是目前較為普及和成熟的基於MVC設計模式的web應用程式框架,它不僅僅是Struts1 的升級版本,更是一個全新的Struts架構。最初,是以WebWork框架和Struts框架為基礎,通過提供增強和改進的Struts框架,進而實現簡化web技術人員開發工作的目標。 不久之後,Webwork框架和Struts社群聯合創造了現在流行的Struts2框架。是實現MVC設計模式的第二代web應用程式的框架,新的特性:攔截器,註解代替XML配置,支援物件導航語言OGNL,可重用可變更的uI元件API.

主要流程:呼叫動作-------攔截器(OGNL)----->動作-------->結果---------ActionContext(oGNL操作,(valueStack,請求,會話。。。))----->結果
為了滿足對框架的職責任何類都可以成為動作,給定請求封裝,從請求到檢視框架自動資料傳輸作為資料的攜帶者,動作必須幫助  框架決定那個結果應該呈現請求響應返回的檢視。1.動作封裝工作單元,2,動作為資料提供場所。須把每一個數據實現為javabean屬性 3.動作為結果路由選擇返回控制字串返回到A檢視中
    第一:Action是用來完成動作需要繼承ActionSupport來和實現模型驅動就是action在將資料從請求傳遞到檢視(無論是JSP還是其他型別的結果)方面起著重要作用。 第二,action必須協助框架確定哪個結果應該呈現在響應請求的檢視中。他可以通過web.xml的配置和struts.xml的配置決定是否使用過濾器,動作的請求路徑,以及返回的檢視(結果型別),

解答2:使用hibernate:物件關係對映框架 主要完成資料的持久化,輕量級的ORM(物件關係對映)工具。
        是一個高效能的物件關係型持久化儲存和查詢的服務,其遵循開源的 GNU Lesser General Public License (LGPL) 而且可以免費下載。
        Hibernate 不僅關注於從 Java 類到資料庫表的對映,也有 Java 資料型別到 SQL 資料型別的對映,另外也提供了資料查詢和檢索服務。
        Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,它將POJO與資料庫表建立對映關係, 是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 將 Java 類對映到資料庫表中,從 Java 資料型別中對映到 SQL 資料型別中,並把開發人員從 95% 的公共資料持續性程式設計工作中解放出來。
        Hibernate 是傳統 Java 物件和資料庫伺服器之間的橋樑,用來處理基於 O/R 對映機制和模式的那些物件。
        Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,
        Hibernate可以在應用EJB的J2EE架構中取代CMP,完成資料持久化的重任。主要封裝了資料庫的訪問細節,通過配置檔案連結關係資料庫和程式中的實體類

hibernate對於JDBC的優勢:
            Hibernate 使用 XML 檔案來處理對映 Java 類別到資料庫表格中,並且不用編寫任何程式碼。
            為在資料庫中直接儲存和檢索 Java 物件提供簡單的 APIs。
            如果在資料庫中或任何其它表格中出現變化,那麼僅需要改變 XML 檔案屬性。
            抽象不熟悉的 SQL 型別,併為我們提供工作中所熟悉的 Java 物件。
            Hibernate 不需要應用程式伺服器來操作。
            操控你資料庫中物件複雜的關聯。
            最小化與訪問資料庫的智慧提取策略。
            提供簡單的資料詢問。
            **支援大多數主流的資料庫管理系統。**支援技術:XDOCLet Spring J2EE,Eclipse plug-ins,Maven

使用Mybatis:MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。
        MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
         Mybatis通過xml或註解的方式將要執行的各種statement(statement、preparedStatemnt、CallableStatement)配置起來,並通過java物件和statement中的sql進行對映生成最終執行的sql語句,最後由mybatis框架執行sql並將結果對映成java物件並返回

mybatis解決jdbc的程式設計問題:
                1.使用連線池連線
                2.將SQL語句配置到對映xml檔案與Java程式碼分離
                3.自動將java物件對映置sql語句通過parameterType定義輸入的引數的型別
                4.自動將結果對映到java物件中,而且可以通過resultType定義輸出的結果型別
mybatis與hibernate 的區別:

               1.mybatis通過xml或註解的形式書寫sql語句需要自己編寫sql語句,並將sql語句和java物件對映成最終執行的sq  hibernate幾乎不用自己書寫sql語句,都直接操作封裝好的物件即可
                2。mybatis可以控制sql的執行效能可以用於對關係模型要求不高的軟體的開發嗎,mybatis無法做到與資料庫的無關性,如果需要實現多種的資料庫的
                軟體的型別需要定義多套sql的對映檔案工作量大
                3.hibernate 物件/關係對映能力極強,與資料庫無關性好

解答3:當已經存在許多開放原始碼(和專有)J2EEframework時,我們為什麼還需要Spring Framework?
        因為諸多原因讓Spring變得獨特:
        它定位的領域是許多其他流行的framework沒有的。Spring致力於提供一種方法管理你的業務物件。
        Spring是全面的和模組化的。
        Spring有分層的體系結構,這意味著你能選擇使用它孤立的任何部分,它的架構仍然是內在穩定的。因此從你的學習中,你可得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務物件。
        它的設計從底部幫助你編寫易於測試的程式碼。Spring是用於測試驅動工程的理想的framework。
        Spring對你的工程來說,它不需要一個以上的framework。Spring是潛在地一站式解決方案,定位於與典型應用相關的大部分基礎結構。它也涉及到其他framework沒有考慮到的內容。
        可以降低開發企業應用的複雜程度,以IoC(控制反轉)和AOP(面向切面程式設計)兩種技術為基礎簡化了企業開發的複雜性,
        方便解耦,簡化開發 Spring 就是一個大工廠,可以將所有物件建立和依賴關係維護,交給 Spring 管理 AOP 程式設計的支援 Spring 提供面向切面程式設計,可以方便的實現對程式進行許可權攔截、執行監控等功能 宣告式事務的支援 只需要通過配置就可以完成對事務的管理,而無需手動程式設計 方便程式的測試 Spring 對 Junit4 支援,可以通過註解方便的測試 Spring 程式 方便整合各種優秀框架 Spring 不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts、Hibernate、 MyBatis、Quartz 等)的直接支援 降低 JavaEE API 的使用難度 
        Spring 對 JavaEE 開發中非常難用的一些 API(JDBC、JavaMail、遠端呼叫等),都提供了封裝, 使這些 API 應用難度大大降
        體系結構
                Spring 有可能成為所有企業應用程式的一站式服務點,然而,Spring 是模組化的,允許你挑選和選擇適用於你的模組,不必要把剩餘部分也引入。
                Spring 框架提供約 20 個模組,可以根據應用程式的要求來使用。
        核心容器
                    核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表示式語言,Spring Expression Language)等模組組成,它們的細節如下:
                    spring-core模組提供了框架的基本組成部分,包括 IoC 和依賴注入功能。
                    spring-beans 模組提供 BeanFactory,工廠模式的微妙實現,它移除了編碼式單例的需要,並且可以把配置和依賴從實際編碼邏輯中解耦。
                    context模組建立在由core和 beans 模組的基礎上建立起來的,它以一種類似於JNDI註冊的方式訪問物件。Context模組繼承自Bean模組,並且添加了國際化(比如,使用資源束)、事件傳播、資源載入和透明地建立上下文(比如,通過Servelet容器)等功能。Context模組也支援Java EE的功能,比如EJB、JMX和遠端呼叫等。ApplicationContext介面是Context模組的焦點。spring-context-support提供了對第三方庫整合到Spring上下文的支援,比如快取(EhCache, Guava, JCache)、郵件(JavaMail)、排程(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
                    spring-expression模組提供了強大的表示式語言,用於在執行時查詢和操作物件圖。它是JSP2.1規範中定義的統一表達式語言的擴充套件,支援set和get屬性值、屬性賦值、方法呼叫、訪問陣列集合及索引的內容、邏輯算術運算、命名變數、通過名字從Spring IoC容器檢索物件,還支援列表的投影、選擇以及聚合等。。
        資料訪問/整合
                    資料訪問/整合層包括 JDBC,ORM,OXM,JMS 和事務處理模組,它們的細節如下:
                    (注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)
                    JDBC 模組提供了JDBC抽象層,它消除了冗長的JDBC編碼和對資料庫供應商特定錯誤程式碼的解析。
                    ORM 模組提供了對流行的物件關係對映API的整合,包括JPA、JDO和Hibernate等。通過此模組可以讓這些ORM框架和spring的其它功能整合,比如前面提及的事務管理。
                    OXM 模組提供了對OXM實現的支援,比如JAXB、Castor、XML Beans、JiBX、XStream等。
                    JMS 模組包含生產(produce)和消費(consume)訊息的功能。從Spring 4.1開始,集成了spring-messaging模組。
                    事務模組為實現特殊介面類及所有的 POJO 支援程式設計式和宣告式事務管理。(注:程式設計式事務需要自己寫beginTransaction()、commit()、rollback()等事務管理方法,宣告式事務是通過註解或配置由spring自動處理,程式設計式事務粒度更細)
        Web
                    Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節如下:
                    Web 模組提供面向web的基本功能和麵向web的應用上下文,比如多部分(multipart)檔案上傳功能、使用Servlet監聽器初始化IoC容器等。它還包括HTTP客戶端以及Spring遠端呼叫中與web相關的部分。
                    Web-MVC 模組為web應用提供了模型檢視控制(MVC)和REST Web服務的實現。Spring的MVC框架可以使領域模型程式碼和web表單完全地分離,且可以與Spring框架的其它所有功能進行整合。
                    Web-Socket 模組為 WebSocket-based 提供了支援,而且在 web 應用程式中提供了客戶端和伺服器端之間通訊的兩種方式。
                    Web-Portlet 模組提供了用於Portlet環境的MVC實現,並反映了spring-webmvc模組的功能。
        其他
                    還有其他一些重要的模組,像 AOP,Aspects,Instrumentation,Web 和測試模組,它們的細節如下:
                    AOP 模組提供了面向方面的程式設計實現,允許你定義方法攔截器和切入點對程式碼進行乾淨地解耦,從而使實現功能的程式碼徹底的解耦出來。使用原始碼級的元資料,可以用類似於.Net屬性的方式合併行為資訊到程式碼中。
                    Aspects 模組提供了與 AspectJ 的整合,這是一個功能強大且成熟的面向切面程式設計(AOP)框架。
                    Instrumentation 模組在一定的應用伺服器中提供了類 instrumentation 的支援和類載入器的實現。
                    Messaging 模組為 STOMP 提供了支援作為在應用程式中 WebSocket 子協議的使用。它也支援一個註解程式設計模型,它是為了選路和處理來自 WebSocket 客戶端的 STOMP 資訊。
                    測試模組支援對具有 JUnit 或 TestNG 框架的 Spring 元件的測試。使用spring能夠很好的整合其他的框架,他可以為其他框架提供一些基本的服務.

springMVC:spring web MVC 提供了模型-檢視-控制體系結構來靈活的開發,鬆散耦合的web的應用的元件 。MVC 模式導致了應用程式的不同方面(輸入邏輯、業務邏輯和 UI 邏輯)的分離,同時提供了在這些元素之間的鬆散耦合。模型封裝了應用程式資料,並且通常它們由 POJO 組成。檢視主要用於呈現模型資料,並且通常它生成客戶端的瀏覽器可以解釋的 HTML 輸出。
控制器主要用於處理使用者請求,並且構建合適的模型並將其傳遞到檢視呈現。
        主要的類DispatcherServlet:
            Spring Web 模型-檢視-控制(MVC)框架是圍繞 DispatcherServlet 設計的,DispatcherServlet 用來處理所有的 HTTP 請求和響應。
            Spring Web MVC DispatcherServlet 的請求處理的工作流程如下圖所示:
                request---->dipatcherSevlet:(handlerMapping,Controller,View Resolver, View)-------->respose;
                1.收到一個 HTTP 請求後,DispatcherServlet 根據 HandlerMapping 來選擇並且呼叫適當的控制器。
                2.控制器接受請求,並基於使用的 GET 或 POST 方法來呼叫適當的 service 方法。Service 方法將設定基於定義的業務邏輯的模型資料,
並返回檢視名稱到 DispatcherServlet 中。
                3.DispatcherServlet 會從 ViewResolver 獲取幫助,為請求檢取定義檢視。
                4.一旦確定檢視,DispatcherServlet 將把模型資料傳遞給檢視,最後呈現在瀏覽器中。
                上面所提到的所有元件,即 HandlerMapping、Controller 和 ViewResolver 是 WebApplicationContext 的一部分,
                而 WebApplicationContext 是帶有一些對 web 應用程式必要的額外特性的 ApplicationContext 的擴充套件。

解答4:Spring Boot是他們最新的創新,能夠跟上不斷變化的技術需求。 開發Spring Boot的主要動機是簡化配置和部署spring應用程式的過程。 Spring Boot為開發提供一個具有最小功能的Spring應用程式,並提供了一個新的範例。
            使用Spring Boot將能夠以更靈活的方式開發Spring應用程式,並且能夠通過最小(或可能沒有)配置Spring來專注於解決應用程式的功能需求。它使用全新的開發模型,通過避免一些繁瑣的開發步驟和樣板程式碼和配置,使Java開發非常容易。
        Spring Boot的主要特點:
                建立獨立的Spring應用程式
                直接嵌入Tomcat,Jetty或Undertow(無需部署WAR檔案)
                提供“初始”的POM檔案內容,以簡化Maven配置
                儘可能時自動配置Spring
                提供生產就緒的功能,如指標,健康檢查和外部化配置
                絕對無程式碼生成,也不需要XML配置
        springboot的核心還是spring,他不是編寫應用程式的框架,他是提供應用程式伺服器功能的嵌入式servlert容器。

解答5:maven便於程式碼的管理可以使用同一的配置項,減少專案的jar包的使用衝突,可以方便團隊對於不同模組的團隊協作開發。maven的構建專案過程:
                            清理階段:clean 清理輸出的class檔案
                            編譯階段:complie,將程式碼編譯成class檔案
                            打包階段:package, java-->jar包,web包--->war包
                             執行maven工程:tomat:run
        好處:一步構建,依賴管理,跨平臺,提高團隊效率

解答6,7:在檢視請求處理搜可以用struts2,或者springmvc,這些都是可以對檢視請求做出操作,但是在dao層中去使用的是不同的框架:主要因為如下:

1.mybatis通過xml或註解的形式書寫sql語句需要自己編寫sql語句,並將sql語句和java物件對映成最終執行的sq  hibernate幾乎不用自己書寫sql語句,都直接操作封裝好的物件即可
2。mybatis可以控制sql的執行效能可以用於對關係模型要求不高的軟體的開發嗎,mybatis無法做到與資料庫的無關性,如果需要實現多種的資料庫的  軟體的型別需要定義多套sql的對映檔案工作量大
 3.hibernate 物件/關係對映能力極強,與資料庫無關性好。修改不便捷,而mybatis可以自己手動處理返回的結果的型別。

關於具體的框架的使用可以訪問部落格:https://blog.csdn.net/qq_37256896

希望可以和大佬多多學習coding經驗...

18年真的很快,感謝陪伴的每一個人。