此文档是根据上课流程整理,更多细节和图片请参考刘老师的专栏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; }