1.SpringMVC
1.1 框架的作用
接收前端传递的数据,与用户进行交互.
1.2 SpringMVC参数传递的格式
1.2.1 简单参数传值
<input type="text" name="username" value="admin" /><input type="text" name="age" value="18" />
前提: servlet 是一种参数传递的机制 要求:所有的参数类型都是String 数据类型
说明: 数据类型的转化是框架帮助完成的!!!
public xxxx getUser(String username,Integer age)
1.2.2 对象的方式接收参数
html <input type="text" name="username" value="admin" /><input type="text" name="age" value="18" />
要求: 1.属性的名称必须与name属性名称一致.
2. 要求对象中必须有set/get方法 对象的属性都是private
public xxxx getUser(User user)
1.2.3 同名提交问题
<input name="hobby" type="text" value="吃1"><input name="hobby" type="text" value="吃2"><input name="hobby" type="text" value="吃3">
说明: 有时页面中会出现同名的提交问题 name属性都是一致的. 问 SpringMVC如何接收
原理: 当页面进行同名提交. 会将参数使用","号进行拼接 hobby = 吃1,吃2,吃3 String数据类型
mvc参数接收:
public xxxx getUser(String[] hobby){//hobby 按照,号拆分为数组 之后循环变量 取值操作......}...的本质 就是数组public xxxx getUser(String... hobby){//hobby 按照,号拆分为数组 之后循环变量 取值操作......}
1.2.4 为对象的引用赋值
原则: SpringMVC中页面的name属性名称 不能重复, 除非同名提交问题
实际需求: 使用对象的引用解决 实际需求中的同名提交问题
<input name="name" type="text" value="二郎神"> user(name) 二郎神,啸天<input name="dog.name" type="text" value="啸天"> dog(name) 二郎神,啸天
public class User{private String name; //二郎神private Dog dog; //dog对象}public class Dog{private String name; //啸天}public xxxx getUser(User user){}
1.2.5 restFul风格
get请求案例: http://localhost:8080/getUser?id=100
restFul: 可以简化get请求的结构 简化key 使用/进行分隔,请求路径中不能有动词,要求restFul的请求是无状态的.
http://localhost:8080/user/100/tom
参数接收:
@RequestMapping("/user/{id}/{name}")public xxx getUser(@Pathvariable Integer id,@Pathvariable String name){}//要求: {属性名称} 必须与对象的属性名称一致 get/set方法支持@RequestMapping("/getUser/{id}/{name}")public xxx getUser(User user){}
请求类型与业务逻辑的关系:
请求路径: http://localhost:8080/user/100/tom type=“put”
RestFul中要求: 通过请求的类型控制业务逻辑的执行.
1.Get 查询操作
2.Post 登录/注册时使用(增)
3.Put 修改操作
4.Delete 删除操作
@GetMapping("/user/{id}/{name}")public xxx getUser(@Pathvariable Integer id,@Pathvariable String name){}@PutMapping("/user/{id}/{name}")public xxx getUser(User user){}
1.2.6 restFul面试题
考题: 什么是restFul?
答:
1.restFul其实可以简化之前的get请求的类型,将参数使用/的方式进行分隔,减少了url参数的传递的字节信息.
2.restFul规定,可以通过一个url请求的地址,通过不同的请求的类型,控制业务逻辑. restFul中 要求路径中不能出现动词.
1.2.7 SpringMVC调用流程图(扩展)
2. 京淘项目环境搭建
程序员操作: 路径不能有中文/空格/特殊字符 /不要放到C盘的系统文件中
2.1 选择根目录
1).在本地磁盘中 指定根目录
2).利用IDEA打开目录
2.2 IDEA环境调试
2.2.1 安装lombok
说明: 使用lombok插件 可以简化用户编辑get/set/toString/构造等常规方法.
2.2.2 控制字体大小/参数提示
2.2.3 开启编译
2.2.4 自动保存
2.3 Maven配置
2.3.1 settings文件
1).本地库的配置
2).远程仓库地址
<mirror><id>aliyun</id><name>aliyun for maven</name><mirrorOf>*</mirrorOf><url>https://maven.aliyun.com/repository/public</url></mirror>
3).指定JDK版本
<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile>
2.3.2 IDEA配置
2.4 创建SpringBoot项目
2.4.1 创建项目
2.4.2 选择jar包依赖
3. SpringBoot框架
3.1 SpringBoot框架作用
SpringBoot项目可以理解为框架的框架(工具API). (Spring/SpringMVC/Mybatis),简化框架的调用.
核心思想: 开箱即用!!!
SpringBoot内部与Spring无缝集成.
Spring的作用: 整合其他的第三方框架,使得业务调用变得浑然一体.
Spring IOC机制 控制反转: 将对象创建的权利交给Spring容器管理,由容器管理对象的生命周期.
Spring优势: 解决了框架之间的耦合性问题.
框架之间的结构(了解)
3.2 pom.xml文件说明
3.2.1 parent标签作用
<!--1.parent标签作用parent标签中规定了Springboot与其他框架整合时候所用到的jar包的版本的定义!!!. 这些jar包的版本都是经过官方测试的.几乎不会出现版本冲突.总结: 版本的定义!!!--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.0</version><relativePath/> <!-- lookup parent from repository --></parent>
3.2.2 maven坐标的作用
说明: 通过坐标 可以在本地仓库/远程镜像服务器中,准确查找需要的jar包文件
<!--2.maven的坐标--><!--项目的组ID--><groupId>com.jt</groupId><!--项目名称 一般都是英文--><artifactId>springboot_demo_1</artifactId><!--版本控制--><version>0.0.1-SNAPSHOT</version><name>springboot_demo_1</name><description>Demo project for Spring Boot</description>
3.2.3 项目依赖
<!--jar包文件的依赖 如果需要某些功能,则使用依赖进行导入按需导入.大部分都进了定义,但是个别的需要手动导入(需要自定版本) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
3.2.4 build标签作用
<!--maven通过插件对maven版本的springboot进行管理体现: 项目打包/发布/测试等相关操作.--><build><plugins><!--springboot专门为springboot的工程开发了一款项目管理插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
3.2.5 项目打包相关知识
1).打包命令
2).打包成功之后的效果
3).clean 表示删除target中的目录
4).一般项目的打包顺序 1.build 2.clean 3.install
3.3 SpringBoot执行流程(内部结构)
3.3.1 元注解
说明: 修饰注解的注解 称为元注解.
用法:
@Target(ElementType.TYPE) 注解对谁有效(类/方法/属性)
@Retention(RetentionPolicy.RUNTIME) 什么时期有效 整合运行期间有效
@Documented 是否需要生成文档.
@Inherited 该注解是否可以被继承 可以被继承
3.3.2 SpringBootConfiguration注解
说明: 该注解标识了main方法的类.相当于告诉程序 主启动类就是一个大的配置类.
将来主启动类执行时,会去扫描所有的小的配置类, 小的配置类由主启动类负责执行并且加载.
统一将对象交给spring容器管理.
3.3.3 @ComponentScan
说明: SpringBoot启动时需要加载很多事先准备好的配置类,但是由于个别导入之后,会导致整个程序运行异常.,所以需要排除个别启动项 例如
深入说明: jar包具有依赖的传递性,通常都会进行引入,如果某些类影响程序,则需要手动排除,而不是排除整个jar包文件.
A.jar -----> B.jar ------> C(xxxx.class).jar
3.3.4 EnableAutoConfiguration
说明: 该注解表示自动化的配置.
包含:
1.@AutoConfigurationPackage 动态扫描主启动类的包路径.
注意事项: 以后写代码 在主启动类的同包及子包中编辑.
2.@Import(AutoConfigurationImportSelector.class)
自动化配置: 添加自动化的启动项 等待程序调用
<dependency><groupId>org.springframework.boot</groupId><!--spring-boot-starter: springboot启动项SpringBoot官网针对于该框架已经完成了"配置" 用户只需要简单的配置既可以使用该功能.--><artifactId>spring-boot-starter-web</artifactId></dependency>
SpringBoot程序启动的流程:
根据选择器 执行pom.xml文件中的启动项
3.3.5 SpringBoot所有的启动项输出:
Positive matches:
-----------------AopAutoConfiguration matched:- @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)AopAutoConfiguration.ClassProxyingConfiguration matched:- @ConditionalOnMissingClass did not find unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)- @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)DispatcherServletAutoConfiguration matched:- @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)- found 'session' scope (OnWebApplicationCondition)