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 对象的方式接收参数
<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)