主頁 > 軟體設計 > SpringMVC框架之第一篇

SpringMVC框架之第一篇

2020-09-15 12:03:09 軟體設計

2.SpringMVC介紹        2.1.SpringMVC是什么        SpringMVC是Spring組織下的一個表現層框架,和Struts2一樣,它是Spring框架組織下的一部分,我們可以從Spring的整體結構中看得出來:        2.2.SpringMVC的作用        1.接收Web請求中的引數        2.把處理好的資料回傳給頁面        2.3.為什么要學習SpringMVC        技術是要更新換代的,可以說Springmvc是對Struts2的技術更新,Struts2太老了,許多設計已經過時,效率不符合現在業務(互聯網)的需要,而且SpringMVC與Spring是一家的它們之間的銜接是無縫的,所以使用SpringMVC更方便和Spring進行整合,        更重要的一點是Struts2存在安全漏洞,之前的某些版本曾經造成過一些企業的損失,這也加速了Struts2的迅速老去,        那為什么之前還要學習Struts2呢?是因為今后作業中不一定都是從事新的系統開發,你有可能去維護一個已經上線的老系統,比如許多傳統行業里面應用的系統Struts2的使用率仍然不小,因此從學習的角度Struts2也要學習掌握,        2.4.了解SpringMVC的處理流程        要想引入SpringMVC做表現層開發,最基本的需要完成兩件事:            1. 配置好前端控制器DispatcherServlet,            2. 開發后端控制器并在SpringMVC的組態檔中加入企業級的配置,        3.SpringMVC環境搭建及入門程式        3.1.軟體環境        Jdk:jdk1.7.0_72        Eclipse:mars        Tomcat:apache-tomcat-7.0.53        Springmvc:4.1.3        說明:         作為本課練習對jdk,eclipse版本的要求不嚴格,            但在實際專案中團隊的開發版本是有嚴格要求的,最新版本不代表是最好的,實際專案都選用最穩定的版本,        3.2.環境搭建        3.2.1.第一步:創建一個java web工程(UTF-8)并匯入jar包        1.創建一個java web工程        2.匯入jar包        在web工程中拷貝到lib檔案夾下的jar包可以自動被匯入工程        spring原生jar包:        Spring常用依賴jar包:        3.2.2.第二步:配置前端控制器        【web.xml】是整個web請求的入口組態檔        <說明>        ·前端控制器:        org.springframework.web.servlet.DispatcherServlet,它是SpringMVC接收web請求的第一入口,也是唯一入口,這是一個servlet物件,因此需要在web.xml中進行配置,        ·<load-on-startup>:此項配置是控制當前servlet是否隨tomcat啟動而被加載            配置的值必須是整數                值 >= 0:表示當前servlet隨著tomcat啟動而被加載,值的大小表示加載的順序,越小越優先                值 < 0:表示當前servlet不會隨著tomcat啟動而被加載,只有當它被使用的時候才加載,            DispatcherServlet啟動后會立刻去找SpringMVC的組態檔,然后根據組態檔中的內容進行加載和掃描        ·<init-param>:        用這個標簽加載SpringMVC組態檔,意義就是在DispatcherServlet的初始化程序中加載組態檔,        <param-name>為【contextConfigLocation】        <param-value>為【classpath:SpringMVC組態檔的類目錄下的相對路徑】        ·SpringMVC默認組態檔:        如果沒有顯示的配置SpringMVC的核心組態檔,SpringMVC會去[/WEB-INF/]下找默認的核心組態檔,默認核心組態檔的命名:servlet-name的值 + -servlet.xml,在實際作業中要知道:當發現web.xml沒有配置核心組態檔時要知道去[/WEB-INF/]下找它的默認組態檔,        因為各種框架的默認組態檔的位置可能不同,所以企業很少采用默認的組態檔路徑,因此我們需要統一規劃組態檔的存放位置,通過手動配置完成組態檔的加載,        ·常用URL樣式:        [/*]: SpringMvc禁止使用,不支持,            [*.action]: 以.action為結尾的url地址請求可以進入DispatcherServlet, 放行所有資源檔案后綴的url,        [/]: 所有url地址請求均可進入DispatcherServlet, 但只放行以.jsp為結尾的url,其他資源檔案后綴的url都不放行(這個明天的RESTful的時候會具體用到, 今天先不講)        資源檔案請求url:            <link href="https://www.cnblogs.com/haizai/p/css/bootstrap.min.css" rel="stylesheet">            <script src="https://www.cnblogs.com/haizai/p/https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>        <?xml version="1.0" encoding="UTF-8"?>        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns="http://java.sun.com/xml/ns/javaee"             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"             id="WebApp_ID" version="2.5">            <display-name>springmvc</display-name>            <welcome-file-list>                <welcome-file>index.html</welcome-file>                <welcome-file>index.htm</welcome-file>                <welcome-file>index.jsp</welcome-file>                <welcome-file>default.html</welcome-file>                <welcome-file>default.htm</welcome-file>                <welcome-file>default.jsp</welcome-file>            </welcome-file-list>                      <!-- 配置springmvc前端控制器 -->            <servlet>                <servlet-name>springmvc</servlet-name>                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>                <!-- 配置SpringMVC的組態檔 -->                <init-param>                    <param-name>contextConfigLocation</param-name>                    <param-value>classpath:SpringMvc.xml</param-value>                </init-param>                <!-- 配置DispacherServlet隨tomcat啟動而被加載 -->                <load-on-startup>1</load-on-startup>            </servlet>                      <servlet-mapping>                <servlet-name>springmvc</servlet-name>                <!-- 配置什么樣的url路徑可以進入DispatcherServlet -->                <url-pattern>*.action</url-pattern>            </servlet-mapping>        </web-app>        3.2.3.第三步:創建springmvc核心組態檔        新建一個source folder: config        在config下創建一個xml檔案: SpringMvc.xml,檔案頭可以從其他地方直接拷貝過來,        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns:p="http://www.springframework.org/schema/p"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:mvc="http://www.springframework.org/schema/mvc"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd">                        </beans>        3.2.4.第四步:啟動tomcat測驗環境        到此為止SpringMvc基本框架搭建完成,啟動tomcat,日志中不報錯,就說明環境搭建成功,        下面就是入門程式的開發,        3.3.案例需求        3.3.1.需求        使用SpringMVC實作商品串列的展示,        3.3.2.需求分析        1.要展示全部商品串列,所以不需要引數,請求url: http://localhost:8080/<具體web應用的名字>/list.action        2.主要關注SpringMvc的入門程式,所以暫不考慮連接資料庫等多余功能,在業務處理中只做假的模擬資料回傳給頁面,        3.4.入門程式        3.4.1.第一步:創建jsp頁面        創建jsp頁面的目錄:        前端頁面不是本課內容,參考: 參考資料\參考案例\jsp\itemList.jsp直接拷貝到工程jsp目錄中,        問題:放在WebContent目錄下和放到WEB-INFO目錄下的區別?        WEB-INFO是受tomcat保護目錄,它里面的檔案只能由servlet去訪問,不能通過url地址欄去請求訪問,        WebContent下的檔案可以直接通過url地址欄去訪問,一般的歡迎頁和靜態資源檔案都放在這里,        3.4.2.第二步:創建和配置后端控制器        創建包:        cn.baidu.controller用于存放后端控制器,cn.baidu.pojo用于存放保存回傳資料的bean        創建后端控制器類:        <說明>        ·@Controller:表明用這個注解修飾的類需要SpringMVC掃描成SpringMVC的組件,        package cn.baidu.controller;        import org.springframework.stereotype.Controller;        // 定義一個java類,@Controller注解標注在類定義的上方表明這個類需要SpringMVC掃描,        @Controller        public class ItemsController {        }        在SpringMvc.xml中配置后端控制器類的掃描        <說明>        <context:component-scan base-package="要掃描的包路徑" />            掃描指定包及子包下的@Controller、@Service、@Repository等注解修飾的java類,        其中在SpringMVC組態檔中只掃描@Controller修飾的類所在的包,并注冊為SpringMVC的組件,        其它注解修飾的類在Spring組態檔中掃描,并注冊為Spring的組件,        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns:p="http://www.springframework.org/schema/p"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:mvc="http://www.springframework.org/schema/mvc"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd">            <!-- 配置SpringMVC下Controller類的掃描 -->            <context:component-scan base-package="cn.baidu.controller" />                        </beans>        注意:        如果想掃描多個包,可以配置多個<context:component-scan base-package="指定的包名" />        3.4.3.第三步:撰寫方法回應url請求            注解型別的Controller類中使用@RequestMapping注解修飾的方法回應url請求,一個url對應一個方法,不可能多個url同時對應一個方法,也不可能多個方法同時回應一個url請求,        <說明>        ·@RequestMapping(“具體URL”):        指明這個方法回應的具體url是什么,這里面配置的url是工程名后的具體url,以【/】開頭,如果不寫【/】也可以,推薦寫,         @RequestMapping(“具體URL”)和它修飾的方法就形成一對key/value,key就是URL,value就是由注解修飾的方法包裝在handler物件中(handler是SpringMVC內置的專門用來封裝url請求回應方法的物件),最終再把這些key/value放到一個map物件中保存,        ·Model:        模型物件,是SpringMVC默認支持的一種形參型別,        作用:負責將回傳給頁面的資料賦值給request物件(這個賦值的程序是SpringMVC底層做的,將你賦給Model物件的屬性名和值賦給request物件,這個詳細程序不需要我們掌握它的詳細邏輯,理解一下即可,)        這樣JSP就可以用EL運算式從request物件中取得這個屬性名的資料了,        ·記住:對于jsp永遠都是從request物件中通過屬性名取值,        package cn.baidu.controller;        import java.util.ArrayList;        import java.util.List;        import org.springframework.stereotype.Controller;        import org.springframework.web.bind.annotation.RequestMapping;        import org.springframework.web.servlet.ModelAndView;        import cn.baidu.pojo.Items;        // 定義一個java類,@Controller注解標注在類定義的上方表明這個類需要SpringMVC掃描,        @Controller        public class ItemsController {            // 標注url到請求方法的key/value對應關系            @RequestMapping("/list")            public String list(Model model) throws Exception {                //商品串列(臨時資料)                List<Items> itemsList = new ArrayList<Items>();                Items items1 = new Items();                items1.setName("聯想筆記本");                items1.setPrice(6000f);                items1.setDetail("ThinkPad T430 聯想筆記本電腦!");                                Items items2 = new Items();                items2.setName("蘋果手機");                items2.setPrice(5000f);                items2.setDetail("iphone6蘋果手機!");                                itemsList.add(items1);                itemsList.add(items2);                 // 1. 設定回傳給頁面的資料                // 第一個引數是屬性名稱, 第二個引數是屬性值        //model在SpringMVC底層是將它里面的屬性名和屬性值賦值給了request物件,而jsp頁面通過request域進行取值                model.addAttribute("itemList", itemsList);                //簡化完的剩余的字串叫做視圖的邏輯視圖名                //視圖的物理路徑 = 前綴 + 邏輯視圖名 + 后綴.                return "itemList";                model.addAttribute("itemsList", itemsList);                // 2. 指定回傳頁面的地址                return "/WEB-INF/jsp/itemList.jsp";            }        }            回傳的頁面是否存在、是否正確都需要先判斷一下,在SpringMVC中使用一個視圖決議器的組件來做這些處理,        配置視圖決議器:在SpringMVC.xml中配置        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns:p="http://www.springframework.org/schema/p"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:mvc="http://www.springframework.org/schema/mvc"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd">            <!-- 配置指定包下的組件掃描 -->            <context:component-scan base-package="cn.baidu.controller" />            <!-- 配置視圖決議器 -->            <bean >            </bean>        </beans>            3.4.4.第四步:啟動tomcat測驗        訪問地址: http://localhost:8080/springmvc/list.action        3.4.5.第五步:優化方法的回傳路徑        上面直接回傳jsp的路徑倒是很直接,但是每個方法都回傳一長串路徑看著有點亂,而且每個方法回傳的路徑中【/WEB-INF/jsp/】和【.jsp】都是重復的,未免顯得有些冗余,        能否將這些重復的部分提取出來放到SpringMVC的組態檔中呢?答案是肯定的——修改視圖決議器的配置:        【SpringMVC.xml】中配置視圖決議器的前綴和后綴專門用來拼接視圖檔案的路徑:        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns:p="http://www.springframework.org/schema/p"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:mvc="http://www.springframework.org/schema/mvc"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd">            <!-- 配置指定包下的組件掃描 -->            <context:component-scan base-package="cn.baidu.controller" />            <!-- 配置視圖決議器 -->            <bean >                <!-- 前綴 -->                <property name="prefix" value="https://www.cnblogs.com/WEB-INF/jsp/" />                <!-- 后綴 -->                <property name="suffix" value="https://www.cnblogs.com/haizai/p/.jsp" />            </bean>        </beans>            說明:        1.作用:        用視圖決議器中配置的前綴和后綴簡化Controller類中的編碼        2.代碼的簡化:            ······            // 2. 指定回傳頁面的地址            return "itemList";            ······        3.邏輯視圖名與視圖檔案物理路徑        簡化后Controller方法中回傳的字串叫做邏輯視圖名,        視圖檔案物理路徑=前綴 + 邏輯視圖名 + 后綴,        SpringMVC能保證每次回傳的字串都會自動走視圖決議器,然后按照上面的方式拼接,再進行后續處理,        3.5.本節總結        本單元內容主要是搭建了一個SpringMVC開發環境并學習了它的入門程式,        這個開發環境只有SpringMVC,所以不是我們正式的環境,了解即可,不重要,        入門程式中學習到的兩個注解@Controller和@RequestMapping用法以及回傳資料和回傳頁面的處理方式要掌握,          <!-- 配置后端控制器的掃描 -->                <!-- 這個標簽可以掃描的注解 :                @Controller , @Service, @Repository,這是前三個的父注解@Compontent            -->                <context:component-scan base-package="cn.baidu.controller"></context:component-scan>                      <!-- 顯示配置處理器映射器和處理器配接器 -->           <!-- 默認形式的處理器映射器和處理器配接器 : 默認的組件是不推薦使用的,因為它們是舊版                 DefaultAnnctationHandlerMapping和AnnotationMethodHandlerAdapter           -->           <!-- 配置當前版本下最新的注解形式的處理器映射器和處理器配接器  : 雖然是最新的,但是一旦版本變更可能會引起新的修改-->          <!--  <bean />           <bean />            -->           <!-- 企業中系統一勞永逸的方式 : 注解驅動方式  -->           <!--             作用 : 會加載當前版本下最新的注解形式的處理器映射器和處理器配接器,能提高執行效率            -->           <mvc:annotation-driven/>           <!-- 配置視圖決議器 -->           <!-- 這個視圖決議器就是用來決議jsp頁面的,也是springmvc默認的視圖決議器 -->           <bean >                <!-- 配置前綴和后綴為了簡化開發 -->                <property name="prefix" value="https://www.cnblogs.com/WEB-INF/jsp/"></property>                <!-- 配置后綴 -->                <property name="suffix" value="https://www.cnblogs.com/haizai/p/.jsp"></property>           </bean>        4.SpringMVC框架        4.1.框架結構(重點)        1.學習框架結構的目的: 開發不用, 但面試時會問到        2.框架結構詳細內容:(面試題)        說明:前端控制器是接收web請求的入口,地位最重要,如果還要做其他具體的作業會使它的負擔過于繁重,因此SpringMVC找來了四個幫手,叫做四個組件,來幫助前端控制器承擔一些具體的作業,這樣前端控制器就只發號司令做為集中控制調度中心,具體的作業交給四個組件來完成,        具體作業分為兩部分:        1.處理請求:兩個組件,一個來找Handler,一個來執行Handler        1)處理器映射器負責找到URL對應的Handler物件        2)處理器配接器負責執行找到的Handler物件,        2.回傳結果:兩個組件,一個來找頁面,一個來執行頁面渲染        1)視圖決議器負責找到要回傳的頁面        2)視圖物件負責渲染頁面,渲染頁面需要的資料由前端控制器傳給它,        ●啥是freemaker?        就是模版, 通過模版和資料生成輸出的文本(HTML網頁, 電子郵件等). 比如網易首頁點擊進入的一個html頁面, 這些靜態的html都是由freemarker生成的, 而struts2只支持jsp.        4.2.框架流程        1.用戶發送請求至前端控制器DispatcherServlet        2.DispatcherServlet收到請求呼叫HandlerMapping處理器映射器,        3.處理器映射器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一并回傳給DispatcherServlet        4.DispatcherServlet通過HandlerAdapter處理器配接器呼叫處理器        5.執行處理器(handler也叫后端控制器-->Service-->DAO)        6.Handler執行完成回傳ModelAndView        7.HandlerAdapter將handler執行結果ModelAndView回傳給DispatcherServlet        8.DispatcherServlet將ModelAndView傳給ViewReslover視圖決議器        9.ViewReslover根據handler中設定的頁面資訊決議成一個View視圖物件并回傳它.        10.DispatcherServlet呼叫View物件的介面方法對實際的視圖檔案(如: jsp檔案)進行渲染(即將模型資料填充至視圖檔案中)        11.DispatcherServlet回應用戶        口述 :        先掃描@Controller修飾的類        打開這個類找出里面所有由@Requestmapping修飾的方法        通過反射得到這個方法的method物件        把method物件封裝到一個handler物件中(handlder是SpringMVC內置的物件用來統一呼叫方法的)        最終把RequestMapping中配置的url作為key,把handler物件作為value放到一個map物件中        這個map物件由處理器映射器來維護        4.3.需要認識的SpringMVC組件        SpringMVC的整個控制層采用組件式的結構,        SpringMVC的組件有:        前端控制器DispatcherServlet、        處理器Handler(相對于前端控制器的后端控制器)、        處理器映射器HandlerMapping、        處理器配接器HandlerAdapter、        視圖物件View、        視圖決議器ViewResolver,        其中HandlerMapping、HandlerAdapter、ViewResolver是springmvc的三大核心組件,Handler涉及具體業務需要程式員實作,View由ViewResolver生成,負責渲染頁面,        三大組件干的事情其實都可以集中交給DispatcherServlet來干,但都交給它會使它過于臃腫,處理效率會大大降低,因此分而治之才是上策,        4.3.1.DispatcherServlet:前端控制器        DispatcherServlet負責接收用戶請求,是整個流程的控制中心,但它幾乎不做任何具體的作業,只進行任務調度,具體的作業由具體的組件來完成,這就是組件式結構的優勢,專項事情又專門的組件來做,這樣能提高專項的處理能力同時集中調度的存在降低了組件之間的耦合性,        4.3.2.Handler:處理器        在DispatcherServlet的控制下Handler對具體的用戶請求進行處理,        由于Handler涉及到具體的用戶業務請求,所以一般情況需要程式員根據業務需求開發Handler,        4.3.3.HandlerMapping: 處理器映射器        HandlerMapping負責為每個請求找到一個合適的處理器handler,其實簡單來說就是維持了一個url到handler的映射Map,springmvc提供了不同的映射器,實作不同的映射方式,例如:組態檔方式,實作介面方式,注解方式等,        比如注解方式的映射器會根據核心組態檔中配置的<context:component-scan base-package="包路徑" />指定的包路徑(包括子目錄)進行掃描,找@Controller標注的Java類,該類中所有使用@RequestMapping修飾的方法都是一個handler物件,并根據@RequestMapping的值作為key,對應的方法的handler物件作為value,形成一個url到方法的k/v鍵值對映射,而且這種掃描只要在tomcat啟動時做一次,不會影響系統的性能,        4.3.4.HandlerAdapter: 處理器配接器        1.什么是配接器:                      2.配接器的作用:統一呼叫介面,好擴展,        3.Springmvc中的處理器配接器:        處理器配接器HandlerAdapter負責執行具體的處理器,        SpringMVC有多個配接器,當HandlerMapping找到了url對應的handler物件后,前端控制器會挑選一個能夠執行這個handler的處理器配接器,然后給這個配接器發送指令,同時把這個handler物件傳給這個配接器,讓它執行handler,最終將handler的回傳值和邏輯視圖名字串回傳給前端控制器,        4.3.5.ViewResolver: 視圖決議器        視圖決議器(ViewResolver)負責決議出視圖檔案的物理路徑,并根據這個路徑生成視圖View物件,        ViewResolver首先把邏輯視圖名決議成實際的頁面位置,再生成視圖View物件并回傳給前端控制器,        4.3.6.View:視圖物件型別        1.View視圖物件        View物件負責渲染視圖檔案,將資料結果通過視圖檔案展示給用戶,前端控制器呼叫View物件的介面方法render(),引數就是后臺回傳的資料,在render方法拿資料渲染視圖檔案生成回傳給客戶端的結果,        springmvc框架提供了很多的View型別,包括:jstlView、freemarkerView、pdfView等,        2.視圖檔案        視圖檔案可以是jsp、pdf、freemaker等,最常用的就是jsp,一般情況下需要通過頁面jsp標簽或頁面模版將處理器回傳的model資料通過頁面展示給用戶,需要由程式員根據業務需求開發具體的頁面,        4.3.7.組件總結        SpringMVC的三大組件(理解記憶):處理器映射器、處理器配接器、視圖決議器        需要程式員撰寫代碼的有:處理器(包括處理器、具體業務的service和dao)、視圖檔案(jsp)        4.4.SpringMvc三大組件的配置        Springmvc三大組件配置在核心組態檔中,springmvc支持組件免配置、顯示配置和企業的配置方法        4.4.1.組件的免配置        1.何為免配置:        即什么都不配,此時SpringMVC仍然可以正常運行,全憑它自己的DispatcherServlet.properties,會從中找到合適的組件去執行,這個屬性檔案的位置:        2.DispatcherServlet.properties的作用:        如果沒有顯示配置三大組件(其中一個或者全部),依靠這個屬性檔案中的默認配置組件,springmvc也能正確的執行,        3.上面的入門程式中自動選擇的三大組件分別是:        a)處理器映射器        b)處理器配接器        c)視圖決議器        默認的視圖決議器只有一個,        4.壞處:        每次請求都要去這里去找合適的組件,所以執行效率很低,因此什么都不配置是不可取的,需要我們顯示配置來提高執行效率,        4.4.2.SpringMvc顯式配置處理器映射器和處理器配接器        1.顯式配置默認選擇的處理器映射器和處理器配接器(舊版)        2.顯式配置官方推薦的處理器映射器和處理器配接器(新版)        3.企業中的配置方法:注解驅動        作用:幫助我們顯式配置當前Spring版本的最新的注解形式的處理器映射器和處理器配接器        好處:簡化配置,一勞永逸        4.面試題: springmvc是否要配置注解驅動和注解掃描? 有什么區別?            答:        都需要配置,兩個東西的作用完全不一樣,不要混淆視聽,        注解驅動:作用就是替我們顯式的配置當前spring版本下最新版本的注解形式的處理器映射器和處理器        配接器            注解掃描:掃描指定包及子包下的@Controller、@Service、@Repository等注解修飾的java類,其        中@Controller修飾的類注冊為SpringMVC的組件,其它注解修飾的類注冊為Spring的                      組件,        4.4.3.SpringMvc顯式配置視圖決議器        前面已經學過,此處只給出配置的例子,        4.4.4.顯示配置的意義        處理器映射器、配接器:提高執行效率        視圖決議器(有前綴和后綴):簡化編碼        4.5.本節重點        掌握:            SpringMVC的框架流程,能說出來從請求到回傳頁面的處理流程;            SpringMVC三大組件的最終形態的顯示配置方法,        理解:            三大核心組件的功能,        了解:            Springmvc默認組件配置;            單獨配置新版的處理器映射器和處理器配接器,        下面是完整的springmvc核心組態檔的配置:SpringMVC.xml        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns:p="http://www.springframework.org/schema/p"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:mvc="http://www.springframework.org/schema/mvc"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd">            <!-- 配置指定包下的組件掃描 -->            <!--             作用:SpringMVC可以自動去掃描指定包以及子包下的java檔案,如果掃描到有@Controller(控制層的類)                @Service(業務層的類) @Repository(資料庫訪問層的類)這些注解修飾的類,則把這些類注冊為                SpringMVC的組件             -->            <context:component-scan base-package="cn.baidu.controller" />                        <!-- 1. SpringMVC默認的三大組件選擇(處理器映射器、處理器配接器、視圖決議器)                    如果沒有顯示的配置三大組件,SpringMVC也能正常執行,是因為會默認去找SpringMVC的默認            屬性檔案DispatcherServlet.properties,從中找到合適的三大組件去執行,但這種方式在么次            請求的時候都會去找一遍,所以效率很低,因此采用默認的三大組件選擇是不可取的,                我們應該顯示的配置它們,這樣可以提高系統的訪問效率,             -->                         <!-- 2. 顯示的配置處理器映射器和處理器配接器 -->            <!-- 默認的注解形式的處理器映射器:老版本,不推薦使用 -->            <!-- <bean  /> -->            <!-- 默認的注解形式的處理器配接器:老版本,不推薦使用 -->            <!-- <bean  /> -->            <!-- 當前最新版本的注解形式的處理器映射器 -->            <!-- <bean  /> -->            <!-- 當前最新版本的注解形式的處理器配接器 -->            <!-- <bean  /> -->                        <!-- 3. 企業中配置注解形式的處理器映射器和處理器配接器的方法:注解驅動 -->            <!--             作用:顯示的配置了當前Spring版本下最新的注解形式的處理器映射器和處理器配接器,由于它                沒有和任何class關聯,所以即使Spring版本升級,該項配置也不會發生任何改動,企業中                喜歡采用這種一勞永逸的方法,             -->            <mvc:annotation-driven />                        <!-- 配置視圖決議器 -->            <!--             作用:利用顯示配置視圖決議器中的前綴和后綴可以簡化Controller方法中的視圖資訊的設定,只需                在setViewName方法中設定邏輯視圖名稱(視圖檔案的名稱,比如jsp檔案)即可,每次視圖解                析器都會自動的進行視圖檔案物理路徑的拼接:前綴 + 邏輯視圖名稱 + 后綴,從而方便了我們的                編碼作業,             -->            <bean >                <!-- 前綴 -->                <property name="prefix" value="https://www.cnblogs.com/WEB-INF/jsp/" />                <!-- 后綴 -->                <property name="suffix" value="https://www.cnblogs.com/haizai/p/.jsp" />            </bean>                        </beans>        5.SSM整合        5.1.SSM整合包含的框架                         5.2.SSM整合思路        5.2.1.整合思路的重要性        整合的步驟是固定的, 程序是可以復制的, 人家告訴我們怎么整合就怎么來做就可以了.         具體來說, 第一是你手頭有現成的資料照著做即可; 第二如果你沒有資料, 怎么辦? 這時候如果能記住思路, 我們就可以上網去找資料. 但如果思路記不住就連資料怎么找都不知道了, 所以說思路是很重要的, 要記住.        5.2.2.具體的整合思路(重點)        首先,先劃分大層次,整合后分為三層:表現層  業務層  資料訪問層,再加上web.xml這是整體的骨架;        其次,再逐層規劃每一層具體要干什么,        ssm整合的思路如下:        Spring與MyBatis的整合在MyBatis第二天的時候已經學習過了,這里仍然沿用,SpringMVC與Spring又是一家的,所以它們之間是不需要整合配置的,即所謂的無縫整合,直接就可以用,只不過需要在web.xml中配置它們兩個,具體規劃如下:        SSM整合分三層:DAO層、Service層、Controller層            代碼目錄:                ·DAO層:                    pojo:pojo類                    dao:映射檔案、介面檔案——Mybatis逆向工程自動生成,DAO通過SM整合jar包來掃描                ·Service層:                    service:service介面和實作類——利用@Service注解修飾,讓spring來掃描                ·Controller層:                    controller:Controller類及方法——利用@Controller注解修飾,讓SpringMVC來掃描            配置目錄:                ·config:                    MyBatisConfig.xml——MyBatis配置                    ApplicationContext-dao.xml——資料源、連接池、會話工廠、mapper包掃描                    ApplicationContext-service.xml——注解掃描(service層的組件掃描)、事務管理                    (以上兩個組態檔可以配置在一個檔案中,這里為了體現分層的思路所以分開配置,)                    SpringMVC.xml——注解掃描(Controller層的組件掃描)、注解驅動、視圖決議器            web.xml                Spring監聽(管理service層和dao層)、SpringMVC前端控制器(管理Controller層)            JSP:在【/WEB-INF/】創建jsp目錄,存放jsp頁面,        面試題:事務配置在哪一層?為什么?            事務配置在service層,因為service層控制的是業務,在一個service中有可能呼叫多個DAO中的方法進行一系列的操作,這些操作要么都成功,要么都失敗,比如匯款,匯出操作成功了,但是存入給另一個人時發現卡被注銷了,這個時候要整個業務回滾,否則錢就會丟失,所以必須在service層做事務控制,        注意:            不要糾結Controller層的類域Service層的類能否放到一個目錄下,這個問題沒有意義,因為分層的意思就是強制將它們分開,Controller層的目錄就放Controller的類,Service層的目錄就放Service的類,DAO層的目錄就放Dao的類,            組態檔是否合并的問題,這個問題也不要糾結,看個人喜好,如果想讓組態檔單一化,就可以把兩個ApplicationContext檔案合并,但SpringMVC.xml與ApplicationContext不要合并,因為前者是表現層由Spring的子集框架SpringMVC專門負責,后者是業務層以及DAO層由Spring本身自己負責,        5.3.軟體環境        Jdk: jdk1.7.0_72        Eclipse: mars        Tomcat: apache-tomcat-7.0.53        Springmvc: 4.1.3        MyBatis: mybatis-3.2.7        MySql: 5.1.28        SM整合包: 1.2.2        5.4.資料庫環境        使用【資料\參考案例\sql】下的創建庫建表腳本【springmvc.sql】創建我們使用的資料庫環境,        5.5.SSM整合步驟        5.5.1.第一步: 新建一個web工程                               5.5.2.第三步: 匯入jar包        將【資料\jar\ssm整合后jar全集】下的jar包拷貝到WebContent/WEB-INF/lib下, 會自動關聯到工程中        5.5.3.第二步: 創建目錄結構        根據思路創建工程目錄:        1.代碼目錄:         cn.baidu包下創建四個子包        controller: 存放cnotroller層的代碼        service    : 存放service層的代碼        dao: 存放dao層的代碼        pojo: 存放pojo的代碼        2.組態檔目錄:         選擇工程右鍵創建source folder: config, 用于存放全部組態檔.        3.視圖目錄:        在WebContent/WEB-INF下創建jsp目錄,用于存放jsp檔案.        5.5.4.第四步: 使用mybatis逆向工程生成代碼        1.將【資料\MyBatis逆向工程】下的【MyBatisGeneration】工程匯入eclipse,        2.修改組態檔符合當前的開發環境和目錄結構,        a)資料庫名        b)Pojo包名        c)Mybatis映射檔案的包名        d)Mybatis映射介面的包名(與c相等)        e)需要生成代碼的資料庫表        3.注意:        a)執行前要把原先舊的代碼全部洗掉,        b)執行完生成程式后第一次重繪的時候表現出來的包名不對,再重繪一次就好了,這是eclipse的一個bug,        4.將生成的代碼拷貝到我們的工程中去,        5.5.5.第五步: 創建DAO層組態檔        1.在【資料\參考案例\config】下是mybatis課程中sm整合的時候需要的組態檔,整體匯入,        2.整理mybatis的組態檔:        a)MyBatisConfig.xml:清空<configuration>標簽內全部的內容,保留一個空的組態檔是為了今后對mybatis的擴展,        b)ApplicationContext.xml:保留其中的屬性檔案、資料源(連接池)、會話工廠、動態代理包掃描的配置,其他的都洗掉,根據上面的思路它應該屬于dao層的spring組態檔,改名為ApplicationContext-dao.xml        c)其他組態檔保持不變,        3.修改后的組態檔:        【MyBatisConfig.xml】        <?xml version="1.0" encoding="UTF-8"?>        <!DOCTYPE configuration          PUBLIC "-//mybatis.org//DTD Config 3.0//EN"          "http://mybatis.org/dtd/mybatis-3-config.dtd">        <configuration>            <!-- 型別別名的配置 -->        <!--     <typeAliases>                <typeAlias type="cn.baidu.pojo.UserModel" alias="UserModel"/>                <package name="cn.baidu.pojo"/>            </typeAliases> -->        </configuration>        【ApplicationContext-dao.xml】        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:p="http://www.springframework.org/schema/p"            xmlns:aop="http://www.springframework.org/schema/aop"            xmlns:tx="http://www.springframework.org/schema/tx"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd                http://www.springframework.org/schema/aop                 http://www.springframework.org/schema/aop/spring-aop-4.0.xsd                 http://www.springframework.org/schema/tx                 http://www.springframework.org/schema/tx/spring-tx-4.0.xsd                http://www.springframework.org/schema/util                 http://www.springframework.org/schema/util/spring-util-4.0.xsd">            <!-- 1 屬性檔案的配置 -->            <context:property-placeholder location="classpath:jdbc.properties"/>                        <!-- 2 資料源的配置 -->            <bean id="dataSource"  destroy-method="close">                <property name="driverClassName" value="https://www.cnblogs.com/haizai/p/${jdbc.driver}"/>                <property name="url" value="https://www.cnblogs.com/haizai/p/${jdbc.url}"/>                <property name="username" value="https://www.cnblogs.com/haizai/p/${jdbc.username}"/>                <property name="password" value="https://www.cnblogs.com/haizai/p/${jdbc.password}"/>                <property name="maxActive" value="https://www.cnblogs.com/haizai/p/10" />                <property name="maxIdle" value="https://www.cnblogs.com/haizai/p/5" />            </bean>                        <!-- 3 MyBatis的會話工廠的配置 -->            <bean id="sqlSessionFactory" >                <property name="configLocation" value="https://www.cnblogs.com/haizai/p/classpath:MyBatisConfig.xml" />                <property name="dataSource" ref="dataSource" />            </bean>                        <!-- 4 動態代理包掃描的配置 -->            <bean >                <property name="basePackage" value="https://www.cnblogs.com/haizai/p/cn.baidu.dao" />            </bean>        </beans>        5.5.6.第六步: 創建Service層組態檔        創建【ApplicationContext-service.xml】,@Service注解組件的掃描和事務管理        【ApplicationContext-service.xml】        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:p="http://www.springframework.org/schema/p"            xmlns:aop="http://www.springframework.org/schema/aop"            xmlns:tx="http://www.springframework.org/schema/tx"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd                http://www.springframework.org/schema/aop                 http://www.springframework.org/schema/aop/spring-aop-4.0.xsd                 http://www.springframework.org/schema/tx                 http://www.springframework.org/schema/tx/spring-tx-4.0.xsd                http://www.springframework.org/schema/util                 http://www.springframework.org/schema/util/spring-util-4.0.xsd">            <!-- service層的組件掃描 -->            <context:component-scan base-package="cn.baidu.service" />            <!-- 事物管理配置 -->            <bean id="transactionManager"                 >                <!-- 資料源 -->                <property name="dataSource" ref="dataSource"/>            </bean>            <!-- 通知 -->            <tx:advice id="txAdvice" transaction-manager="transactionManager">                <tx:attributes>                    <!-- 傳播行為 -->                    <tx:method name="save*" propagation="REQUIRED" />                    <tx:method name="insert*" propagation="REQUIRED" />                    <tx:method name="delete*" propagation="REQUIRED" />                    <tx:method name="update*" propagation="REQUIRED" />                    <tx:method name="find*" propagation="SUPPORTS" read-only="true" />                    <tx:method name="get*" propagation="SUPPORTS" read-only="true" />                </tx:attributes>            </tx:advice>            <!-- 切面 -->            <aop:config>                <aop:advisor advice-ref="txAdvice"                     pointcut="execution(* cn.baidu.service.*.*(..))" />            </aop:config>        </beans>        5.5.7.第七步: 創建SpringMvc.xml        創建【SpringMvc.xml】,配置@Controller注解組件掃描,注解驅動,視圖決議器        組態檔:        【SpringMvc.xml】        <?xml version="1.0" encoding="UTF-8"?>        <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             xmlns:p="http://www.springframework.org/schema/p"            xmlns:context="http://www.springframework.org/schema/context"            xmlns:mvc="http://www.springframework.org/schema/mvc"            xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                http://www.springframework.org/schema/mvc                 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd                http://www.springframework.org/schema/context                 http://www.springframework.org/schema/context/spring-context-4.0.xsd">            <!-- controller層的組件掃描 -->            <context:component-scan base-package="cn.baidu.controller" />                        <!-- 配置注解驅動 -->            <mvc:annotation-driven />                        <!-- 配置視圖決議器 -->            <bean >                <!-- 前綴 -->                <property name="prefix" value="https://www.cnblogs.com/haizai/p/WEB-INF/jsp/" />                <!-- 后綴 -->                <property name="suffix" value="https://www.cnblogs.com/haizai/p/.jsp" />            </bean>        </beans>        5.5.8.第八步: 配置web.xml        配置spring的容器監聽、springmvc前端控制器以及它可接收的url地址,        組態檔:        【web.xml】        <?xml version="1.0" encoding="UTF-8"?>        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">            <display-name>ssm</display-name>            <welcome-file-list>                <welcome-file>index.html</welcome-file>                <welcome-file>index.htm</welcome-file>                <welcome-file>index.jsp</welcome-file>                <welcome-file>default.html</welcome-file>                <welcome-file>default.htm</welcome-file>                <welcome-file>default.jsp</welcome-file>            </welcome-file-list>                        <!-- 配置spring的容器 -->            <context-param>                <param-name>contextConfigLocation</param-name>                <param-value>classpath:ApplicationContext-*.xml</param-value>            </context-param>            <listener>                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>            </listener>                        <!-- 配置springmvc的前端控制器-->            <servlet>                <servlet-name>springMvc</servlet-name>                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>                <!-- 指定springmvc核心組態檔的位置 -->                <init-param>                    <param-name>contextConfigLocation</param-name>                    <param-value>classpath:SpringMVC.xml</param-value>                </init-param>                <!-- 標記是否在tomcat啟動時就加載當前的servlet -->                <load-on-startup>1</load-on-startup>            </servlet>            <!-- 配置springmvc前端控制器能夠接收的url結尾格式 -->            <servlet-mapping>                <servlet-name>springMvc</servlet-name>                <url-pattern>*.action</url-pattern>            </servlet-mapping>        </web-app>        5.5.9.小結        本節的重點是要掌握整合的思路,有了思路就可以尋著線索進行整合了,不用死記具體的程序,        5.6.整合后的案例程式        5.6.1.需求        使用SSM從資料庫查詢資料, 實作真正的商品串列的展示.        5.6.2.需求分析        1.沿用SpringMvc入門程式.        2.在此基礎上完成service層的代碼, 定義service介面和實作類, 并用@autowired自動注入DAO介面物件.        3.完善controller層代碼, 用@autowired自動注入service介面物件.        5.6.3.第一步: 創建service層的介面和實作類        1.定義ItemsService.java介面        2.定義ItemsServiceImpl.java實作類,實作這個介面        代碼:        【ItemsService.java】        package cn.baidu.service;        import java.util.List;        import cn.baidu.pojo.Items;        public interface ItemsService {                        public List<Items> findItemsList() throws Exception;        }        【ItemsServiceImpl.java】        package cn.baidu.service;        import java.util.List;        import org.springframework.beans.factory.annotation.Autowired;        import cn.baidu.dao.ItemsMapper;        import cn.baidu.pojo.Items;        @Service        public class ItemsServiceImpl implements ItemsService {                        @Autowired            ItemsMapper itemsMapper;            @Override            public List<Items> findItemsList() throws Exception {                // 通過自動生成的介面方法查詢商品串列                List<Items> list = itemsMapper.selectByExample(null);                return list;            }        }        注意:selectByExample(null)只檢索除了大物件資料型別之外的欄位,但items表中有一個detail欄位的型別是text,為了把它也檢索出來可以使用selectByExampleWithBLOBs(null)這個方法,        package cn.baidu.service;        import java.util.List;        import org.springframework.beans.factory.annotation.Autowired;        import cn.baidu.dao.ItemsMapper;        import cn.baidu.pojo.Items;        public class ItemsServiceImpl implements ItemsService {                        @Autowired            ItemsMapper itemsMapper;            @Override            public List<Items> findItemsList() throws Exception {                /*                 * 注意:                 *     selectByExample只檢索除了大物件資料型別之外的專案                 *     selectByExampleWithBLOBs檢索包含大物件資料型別的專案                 */                // 通過自動生成的介面方法查詢商品串列                List<Items> list = itemsMapper.selectByExampleWithBLOBs(null);                return list;            }        }        5.6.4.第二步: 完善Controller層代碼        1.把入門程式中的【ItemsController.java】拷貝過來        2.修改里面的【lsit()】方法,呼叫service介面的方法完成查詢,        代碼:        【ItemsController.java】        package cn.baidu.controller;        import java.util.List;        import org.springframework.beans.factory.annotation.Autowired;        import org.springframework.stereotype.Controller;        import org.springframework.web.bind.annotation.RequestMapping;        import org.springframework.web.servlet.ModelAndView;        import cn.baidu.pojo.Items;        import cn.baidu.service.ItemsService;        @Controller        public class ItemsController {                        @Autowired            private ItemsService itemsService;                        @RequestMapping("/list")            public ModelAndView list() throws Exception {                List<Items> itemsList = itemsService.findItemsList();                                // 1. 設定回傳頁面需要的資料   2. 指定回傳頁面的地址                ModelAndView modelAndView = new ModelAndView();                // 1. 設定回傳頁面需要的資料                modelAndView.addObject("itemList", itemsList);                // 2. 指定回傳頁面的地址                modelAndView.setViewName("itemList");                            return modelAndView;            }        }        5.6.5.第三步: 匯入jsp        從【資料\參考案例\jsp】中匯入【itemList.jsp】到工程的jsp目錄下        5.6.6.第三步: 把工程加入tomcat啟動、測驗        訪問地址: http://localhost:8080/springmvc/list.action        資料庫:        5.7.本節重點        到本節為止,一個完整的ssm整合就完成了,我們從最初的springmvc入門程式,到認識三大核心組件,到最后ssm整合形成完整的web系統,這就是一個web系統的學習進化程序,        大家重點掌握:        整合的分層思路以及各層代碼的撰寫        大家主要了解:            SSM開發環境搭建,這個環境搭建不是大家掌握的重點,只是作為了解,基本會搭即可,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/46449.html

標籤:架構設計

上一篇:SpringCloud-服務注冊與實作-Eureka創建服務注冊中心(附原始碼下載)

下一篇:dubbo配置負載均衡、集群環境

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more