此文檔是根據上課流程整理,更多細節和圖片請參考劉老師的專欄javascript
《cgb2008-京淘day03》html
建立webapp目錄,將WEB-INF文件夾粘貼進來java
添加jar包mysql
<!--springBoot整合JSP添加依賴 --> <!--servlet依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!--jstl依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--使jsp頁面生效 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>
編輯yml文件jquery
mvc: #引入mvn配置 view: prefix: /WEB-INF/ # /默認表明根目錄 src/main/webapp suffix: .jsp
需求:用戶經過http://localhost:8090/findAll獲取所有UerList集合,並在userList.jsp頁面中進行表格化地展示。web
編輯UserControllerajax
第三階段:pojo --> Mapper --> service --> controller -->頁面及js 自下而上spring
第四階段:pojo --> controller --> service --> Mapper 自上而下sql
//@RestController //程序將不會執行視圖解析器的方法 @Controller public class UserController { //HandlerMapping --> Map<K,Method> //HandlerAdaptor --> controller --> service --> dao //ViewResolver --> ModelAndView //View --> Model 視圖渲染 @Autowired private UserService userService; @RequestMapping("/findAll") /*public ModelAndView findAll(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("userList"); modelAndView.addObject("key", "value"); return modelAndView; //ModelAndView }*/ public String findAll(Model model){ List<User> list = userService.findAll(); model.addAttribute("userList",list); return "userList"; } }
IDEA默認條件下工做目錄的選擇是不正確的,須要手動配置一下。注意工做目錄的編輯。數據庫
http協議規範:一次請求,一次響應
同步請求:用戶發起了一個請求,服務器處理後將結果返回給用戶。若是後端服務器正忙,用戶須要等待,體驗很差。
異步請求:用戶發起了一個請求,先把請求交給Ajax引擎(代理),代理經過回調函數和用戶保持聯繫,用戶不須要等待服務器的響應。代理向服務器發起請求,等待後端服務器處理後第一時間經過回調函數將結果返回給用戶。
說明:1) Ajax中間有代理的參與,實際上是代理的思想;2) ajax發起屢次請求,屢次響應
=== ajax.html === <!-- 引入函數類庫 --> <script src="../js/jquery-3.4.1.min.js"></script> <script type="text/javascript">//1.讓頁面所有加載完成 函數式編程 $(function(){ alert("ajax調用成功!"); //1.$.get(url地址,傳遞的參數,回調函數,返回值類型) //關於參數的寫法 1.JSON格式 {id:1,name:"tomacat"}2.字符串拼接 id=1&name=tomacat $.get("/findAjax",{id:1},function(data){ //console.log(data); //循環遍歷的方式1 /* for(let i=0;i<data.length;i++){ let user = data[i]; let id = user.id; let name = user.name; console.log(id+":"+name); } */ //循環遍歷的方式2. in /* for(let index in data){ let user = data[index]; console.log(user); } */ //循環遍歷方式3. of for(let user of data){ //console.log(user); let id = user.id; let name = user.name; let age = user.age; let sex = user.sex; let $tr = "<tr align='center'><td>"+id+"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>"; $("#table1").append($tr); } },"json") //$.post() $.getJson() $.ajax }) </script>
ajax請求流程
若是須要發起ajax請求時,通常須要發起兩個請求,一個("toAjax")是用來跳轉頁面的,另外一個("findAjax")是用來請求數據的。
/* 測試轉到ajax.html */ @RequestMapping("/toAjax") public String toAjax(Model model){ List<User> list = userService.findAll(); model.addAttribute("userList",list); return "ajax"; } /* 接收ajax請求:/findAjax */ @RequestMapping("/findAjax") @ResponseBody //1.將返回值的結果轉化爲JSON的數據;2.表明ajax請求結束 public List<User> findAjax(){ return userService.findAll(); }
$.ajax()的使用
//$.ajax() $.ajax({ url:"/findAjax", //url地址 method:"get", //請求類型"post","put","delete" data:{id:1,name:"tomcat"}, success:function(data){ for(let user of data){ //console.log(user); let id = user.id; let name = user.name; let age = user.age; let sex = user.sex; let $tr = "<tr align='center'><td>"+id+"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>"; $("#table1").append($tr); } }, error: function(data){ alert("請求失敗!") }, cache: false, //默認值爲true 開啓緩存 async: true, //默認值爲true 異步 })
單體項目架構:對於外層,tomcat服務器只有一個,暴露的端口號爲80。
將菜單管理 用戶管理 角色管理 ... 數以百計的模塊寫在了一塊兒
常常性的操做會致使錯誤,一個模塊出錯就會致使整個程序沒法運行
1) 能夠將程序按照業務拆分紅不一樣的功能模塊:菜單管理系統 用戶管理系統 角色管理系統,若是其中一個出了問題,不會影響其餘系統的正常運行
www.jd.com miaosha.jd.com item.jd.com
2) 若是業務功能足夠複雜則還須要按照層級拆分:以菜單管理爲例:
web層 js/html vo層 controller層 service層
按照模塊拆分是一種粗粒度的拆分方式,按照層級拆分是一種細粒度的拆分方式。
使用分佈式架構設計,能夠有效地下降架構中的耦合性,提升程序開發的速度及運維速度。
1) 在分佈式架構中如何保證jar包文件的統一? pom.xml文件 -- 繼承
2) 在分佈式架構中如何保證工具API的統一? 工具類 -- 依賴
解決方法:
=== 聚合項目 ===
父級項目:管理公共jar包 工具項目common.jar:xxx.java
用戶管理系統:端口號8080 pom.xml 商品管理系統:端口號8081 pom.xml --> 繼承/依賴
繼承的最小單位是.jar,工具類的單位是.java,不能被繼承。
建立父級工程
做用:管理jar包文件,打包方式爲pom,只有pom項目能夠被繼承
i. 建立項目jingtao
ii. 修改pom.xml文件
<!-- 打包的類型爲pom 只有pom才能被其餘項目繼承 --> <packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <!-- 指定JDK版本 --> <java.version>1.8</java.version> <!-- 跳過測試類打包 --> <skipTests>true</skipTests> </properties> <!-- 2.依賴的做用:依賴須要的jar包文件 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <!-- spring-boot-starter-xxx 啓動項 開箱即用 只須要引入特定的jar包,進行簡單的配置,便可以使用該功能--> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--支持熱部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--引入插件lombok 自動的set/get/構造方法插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--引入數據庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.32</version> </dependency> <!--springBoot數據庫鏈接 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--spring整合mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--springBoot整合JSP添加依賴 --> <!--servlet依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!--jstl依賴 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--使jsp頁面生效 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> </dependencies> <!-- 不要添加build標籤,須要發佈的模塊才須要 -->
i. 建立子級工程jingtao _common
ii. 導入工具API
爲何將pojo對象放到工具項目中? 由於用戶項目和商品項目都須要使用
建立後臺管理項目
i. 建立子級工程jingtao _manage
ii. 導入工具API
iii. 添加依賴
<!-- 動態web資源,jar包 --> <packaging>war</packaging> <!-- 添加jar包文件的依賴 --> <dependencies> <dependency> <groupId>com.jt</groupId> <artifactId>jingtao_common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <!-- 全部的業務系統必須添加build標籤 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
iv. 導入靜態資源文件
頁面的相關說明
i. 默認的首頁如何跳轉
/WEB-INF/views/index.jsp
當SpringBoot程序添加了springmvc的jar包以後,開啓自動化配置,生成一個/index的請求,在yml文件中配置了視圖解析器的前綴和後綴,會自動地拼接成首頁所在的路徑,實現跳轉。
注意:默認頁面的名稱必須是index
ii. 如何實現通用的頁面跳轉
@Controller public class IndexController { //動態獲取url中的地址做爲參數,能夠實現自動跳轉 /* restFul語法: 1.參數與參數之間用/分割 2.參數用{}包裹 3.參數使用指定註解獲取 restFul風格2: 按照不一樣的業務邏輯,採用不一樣的請求方式 1.查詢業務 GET 2.提交操做 POST 3.更新操做 PUT 4.刪除操做 DELETE */ //@RequestMapping(value = "/page/{moduleName}",method = RequestMethod.GET) @GetMapping("/page/{moduleName}") public String module(@PathVariable String moduleName) { return moduleName; }