1.SpringBoot整合Web资源
1.1 创立我的项目
1.1.1 利用工具创立我的项目
1.1.2 编辑POM.xml文件
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jt</groupId> <artifactId>springboot_jsp</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <!--parent标签作用: 定义了SpringBoot中所有关联我的项目的版本号信息.--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> <!--我的项目打包时,跳过测试类打包--> <skipTests>true</skipTests> </properties> <!--开箱即用:SpringBoot我的项目只须要引入大量的jar包及配置,即可领有其性能. spring-boot-starter 领有开箱即用的能力. maven我的项目中依赖具备传递性. A 依赖 B 依赖 C我的项目 导入A bc会主动依赖 --> <dependencies> <!--间接依赖web springMVC配置--> <dependency> <groupId>org.springframework.boot</groupId> <!--springBoot-start SpringBoot启动项 --> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SpringBoot重构了测试形式 能够在测试类中 间接引入依赖对象--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </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> </dependency> <!--springBoot数据库连贯 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--spring整合mybatis-plus 只导入MP包,删除mybatis包 --> <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,则程序公布时不然会报 我的项目中没有main办法. --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
1.2 SpringBoot整合web
1.2.1 编辑YML配置文件
server: port: 8090 servlet: context-path: /spring: datasource: #driver-class-name: com.mysql.cj.jdbc.Driver #驱动正文,采纳默认的形式 url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true username: root password: root #引入mvc配置 mvc: #引入mvn配置 view: prefix: /WEB-INF/ # /默认代表根目录 src/main/webapp suffix: .jsp#Mybatisplus整合mybatis-plus: #定义别名包 将实体对象的包门路进行封装. type-aliases-package: com.jt.pojo #增加xml文件的依赖 mapper-locations: classpath:/mybatis/mappers/*.xml #开启驼峰映射 configuration: map-underscore-to-camel-case: true# 配置数据库日志logging: level: #打印哪个包下的日志信息. com.jt.mapper: debug
1.2.2 对于IDEA页面资源加载404问题
阐明:因为IDEA加载动静web资源时,默认的运行环境可能配置有误,则导致页面资源无奈加载!!!
1.2.3 编辑userList.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>您好Springboot</title></head><body> <table border="1px" width="65%" align="center"> <tr> <td colspan="6" align="center"><h3>学生信息</h3></td> </tr> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th></th> </tr> <!-- ${userList}示意从域中取值. request域 Session域 --> <c:forEach items="${userList}" var="u"> <tr> <th>${u.id}</th> <th>${u.name}</th> <th>${u.age}</th> <th>${u.sex}</th> </tr> </c:forEach> </table></body></html>
1.2.4 编辑UserController
package com.jt.controller;import com.jt.mapper.UserMapper;import com.jt.pojo.User;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import java.util.List;@Controller //执行视图解析器代理.//@RestController //个别实用于ajax 不走视图解析器. 并且返回JSON数据.public class UserController { @Autowired private UserMapper userMapper; /** * 需要1: 申请门路localhost:8090/findAll 跳转到userList.jsp页面中 * 页面取值形式: ${userList} */ @RequestMapping("/findAll") public String findAll(Model model){ //model是SpringMVC中提供操作request对象的API //1.从数据库中获取的数据 List<User> userList = userMapper.selectList(null); //2.将userList汇合保留到域中,之后页面取值 model.addAttribute("userList",userList); //model调用的是request对象 //返回页面逻辑名称 return "userList"; }}
1.2.4 页面成果展示
1.3 Ajax温习
1.3.1 Ajax特点
特点:部分刷新,异步拜访.
问题: Ajax如何做到异步的?? 答:因为有ajax引擎参加,使得申请由一个变为多个
1.3.2 跳转ajax页面
//跳转ajax页面 @RequestMapping("/ajax") public String toAjax(){ return "userAjax"; }
1.3.3 编辑UserAjax.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><!-- 引入JS函数类库 --><script type="text/javascript" src="/js/jquery-3.4.1.min.js"></script><script type="text/javascript"> //让页面加载实现之后执行 $(function(){ //1.$.get("url地址","增加参数","回调函数","返回值后果类型 text/html/json....个别ajax会主动匹配."); $.get("/findAjax",function(data){ alert("ajax执行胜利!!!!"); //将数据封装到页面中!!! }); //2.$.post(); //3.$.getJSON(); //4.$.getScript(); //5.$.ajax(); })</script><title>您好Springboot</title></head><body> <table border="1px" width="65%" align="center"> <tr> <td colspan="6" align="center"><h3>学生信息</h3></td> </tr> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th></th> </tr> </table></body></html>
1.3.4 实现Ajax数据拜访
//实现ajax业务调用,返回页面列表数据. @RequestMapping("/findAjax") @ResponseBody public List<User> findAjax(){ return userMapper.selectList(null); }
1.3.4 编辑页面JS
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><!-- 引入JS函数类库 --><script type="text/javascript" src="/js/jquery-3.4.1.min.js"></script><script type="text/javascript"> //让页面加载实现之后执行 $(function(){ //1.$.get("url地址","增加参数","回调函数","返回值后果类型 text/html/json....个别ajax会主动匹配."); $.get("/findAjax",function(data){ //data = [{user},{user},{user}] es6~jsp中抵触 //需要: 将userList汇合信息动静的增加到table中. var trs = null; $(data).each(function(index){ //index代表循环遍历的下标从0开始 var user = data[index]; var id = user.id; var name = user.name; var age = user.age; var sex = user.sex; //最终须要在table中展示 trs += "<tr align='center'><td>"+id+"</td><td>"+name+"</td><td>"+age+"</td><td>"+sex+"</td></tr>" }); //将后果追加到table中即可. $("#tab1").append(trs); }); //2.$.post(); //3.$.getJSON(); //4.$.getScript(); //5.$.ajax(); 阐明 $.ajax({ type: "get", url: "/findAjax2", //data: {"id":"1","name":"tomcat"}, data: "id=1&name=tomcat", success: function(data){ alert("ajax调用胜利!!!"); alert(data); }, async : true, error : function(data){ alert("服务器异样,请稍后重试!!!!"); } }); })</script><title>您好Springboot</title></head><body> <table id="tab1" border="1px" width="65%" align="center"> <tr> <td colspan="6" align="center"><h3>学生信息</h3></td> </tr> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> <th></th> </tr> </table></body></html>
2. 京淘我的项目架构图设计
2.1 分布式思维
2.1.1 概念
阐明:将大型项目依照特定的规定进行拆分.目标:缩小我的项目架构的耦合性. (化整为零 拆)
2.1.2单体我的项目存在的问题
阐明:如果作为大型项目,将所有的功能模块都写到一起,如果未来其中的一个模块呈现问题,则间接影响整个我的项目的运行.
2.1.3 依照性能业务拆分
阐明:依照特定的模块进行拆分,之后各自独立的运行.相互之间不受影响.
2.1.3 依照层级拆分
2.2 分布式应用中的问题阐明
问题:因为引入分布式思维.然而同时带来了一些问题,须要解决???