JavaWeb
前后端分离:
路线
传统
-> HTML、CSS、JS
-> Ajax
-> jQuery
-> MySQL -> JDBC
-> Servlet -> JSP -> EL & JSTL
-> Cookie、Session
-> Filter
-> Servlet案例
-> Mybatis
-> Spring -> SpringMVC -> SpringBoot
新型
-> HTML、CSS、JS
-> Ajax、Axios
-> Vue、Element
-> 前端工程化、Vue脚手架
-> Maven
-> SpringBoot
-> SpringMVC
-> MySQL -> JDBC、Mybatis
-> Web案例(SpringBoot+SpringMVC)
-> 会话跟踪技术(Cookie、Session、JWT令牌技术)
-> Filter、Interceptor(令牌的统一拦截校验)
-> AOP
-> SpringBoot原理
Maven
Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。
开源项目:Welcome to The Apache Software Foundation
简介
Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。
作用:
- 方便的依赖管理:jar 包
- 统一的项目结构
- 标准的项目构建流程
仓库:用于存储资源,管理各种jar包。
本地仓库:自己计算机上的一个目录。
中央仓库:由Maven团队维护的全球唯一的。 仓库地址:https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库。
安装
下载
apache-maven-3.6.1-bin.zip
解压到D盘配置本地仓库:
创建本地仓库:在 maven 目录下创建
mvn_repo
修改 conf/settings.xml 中的
<localRepository>
为一个指定目录<localRepository>D:\Program Files\apache-maven-3.6.1\mvn_repo</localRepository>
配置阿里云私服:修改 conf/settings.xml 中的
<mirrors>
标签,为其添加如下子标签1
2
3
4
5
6<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>配置环境变量:系统变量中
- 添加
MAVEN_HOME
为maven的解压目录 - 将其bin目录加入PATH环境变量:
%MAVEN_HOME%\bin
- 添加
测试安装成功:命令行输入
mvn -v
显示maven版本和jdk版本
PS:如果需要切换JDK:
- 安装JDK,配置
JAVA_HOME
为新jdk目录 - 将其bin目录加入PATH环境变量:
%JAVA_HOME%\bin
,并移到最上面(JDK23比JDK11优先级要高)
IDEA 集成
JDK现在改为17了
配置 Maven
new project -> empty project 创建一个空项目 Name:itheima_web_project
File -> Project Strcuture:
- Project:
- SDK:选11
- language level:选11
当前工程:
选择 IDEA中 File –> Settings
Build,Executions,Deployment设置 ->Build Tools -> Maven:
- Maven home path:maven的解压目录
- User setting file:(Override)maven目录中的conf/settings.xml
- Local repository:(Override)maven目录下的 mvn_repo 仓库 -> Apply
进入Maven -> Runner:
配置JRE:JDK11
Build,Executions,Deployment设置 -> Compiler:
Project bytecode version:11
全局:
File -> cloes project 退出到IDEA初识页面 -> Customize -> All settings
接下来3步和上面的一样
**注意:**每次配置完都到Settings和Project Strcuture看看是否正确
创建 Maven 项目
在 itheima_web_project
中创建一个模块
- File -> new -> module…
- 选择 Java -> Build sysem 选择 Maven
- 点击Advanced Settings
- Name:
maven-project01
(即ArtifactId) - GroupId:
com.itheima
- Location:自己选择一个项目目录
- Name:
导入 Maven 项目
方式一:选择右侧Maven面板,点击 +
号,选中对应项目的pom.xml文件,双击
方式二:File -> Project Structure -> Modules -> 中间列的左上角 +
号 -> import module -> 选中对应项目的pom.xml文件 -> Apply, OK
Maven 坐标
Maven 中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置。
使用坐标来定义项目或引入项目中需要的依赖。
组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
- version:定义当前项目版本号
依赖管理
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
依赖配置
配置:
- 在 pom.xml 中编写
<dependencies>
标签 - 在
<dependencies>
标签中 使用<dependency>
引入坐标 - 定义坐标的 groupId,artifactId,version
- 点击刷新按钮,引入最新加入的坐标
注意:
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。(这个过程会比较耗时,耐心等待)
如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索。
依赖传递
依赖具有传递性:
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
排除依赖:主动断开依赖的资源,被排除的资源无需指定版本
1 | <dependency> |
依赖范围
依赖的jar包,默认情况下,可以在任何地方使用。可以通过 <scope>…</ scope >
设置其作用范围
作用范围:
主程序范围有效。(main文件夹范围内)
测试程序范围有效。(test文件夹范围内)
是否参与打包运行。(package指令范围内)
生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
Maven中有3套相互独立的生命周期:
- clean:清理工作
- default:核心工作,如:编译、测试、打包、安装、部署等
- site:生成报告、发布站点等
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段
在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行
常用生命周期阶段:
clean:移除上一次构建生成的文件
compile:编译项目源代码
test:使用合适的单元测试框架运行测试(junit)
package:将编译后的文件打包,如:jar、war等
install:安装项目到本地仓库
执行:
- IDEA:右侧Maven工具栏,选中双击
- 命令行:进入项目目录
mvn clean
、mvn compile
HTTP
概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则
特点:
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型的:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
- 缺点:多次请求间不能共享数据。
- 优点:速度快
请求协议
请求数据格式:
响应协议
响应数据格式:
HTTP响应格式:
常用响应状态码:
状态码 | 英文描述 | 解释 |
---|---|---|
==200== | OK |
客户端请求成功,即处理成功,这是我们最想看到的状态码 |
302 | Found |
指示所请求的资源已移动到由Location 响应头给定的 URL,浏览器会自动重新访问到这个页面 |
304 | Not Modified |
告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |
400 | Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
403 | Forbidden |
服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源 |
==404== | Not Found |
请求资源不存在,一般是URL输入有误,或者网站资源被删除了 |
405 | Method Not Allowed |
请求方式有误,比如应该用GET请求方式的资源,用了POST |
428 | Precondition Required |
服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头 |
429 | Too Many Requests |
指示用户在给定时间内发送了太多请求(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用 |
431 | Request Header Fields Too Large |
请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |
==500== | Internal Server Error |
服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧 |
503 | Service Unavailable |
服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好 |
状态码大全:https://cloud.tencent.com/developer/chapter/13553
协议解析
一套可复用的软件,可以解析请求、响应协议,转化为响应数据格式返回给我们的Java程序
–> Tomcat
Tomcat
Web服务器:
对HTTP协议操作进行封装,简化web程序开发。
部署web项目,对外提供网上信息浏览服务。
Tomcat:
- Tomcat是Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范
- Tomcat 也被称为 Web容器、Servlet容器。Servlet程序需要依赖于 Tomcat才能运行
JavaEE:Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF
基本使用
下载:Apache Tomcat® - Apache Tomcat 11 Software Downloads
安装:直接解压
卸载:直接删除目录
启动:双击 bin\startup.bat
控制台中文乱码:修改conf/ logging.properties
1 | java.util.logging.ConsoleHandler.level = FINE |
关闭:
- Ctrl+C
- 直接关闭窗口
- 双击bin\shutdown.bat
更改端口号:conf/server.xml 更改port
1 | <Connector port="8080" protocol="HTTP/1.1" |
部署项目:将项目部署到 webapps 目录下
SpringBoot 内嵌
基于Springboot开发的web应用程序,内置了tomcat服务器,当启动类运行时,会自动启动内嵌的tomcat服务器。
请求
Postman:一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
作用:常用于进行接口测试
简单参数
**原始方式:**在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取
1 |
|
**SpringBoot 方式:**参数名与形参变量名相同,定义形参即可接收参数
1 |
|
**形参名称与请求参数名称不匹配:**使用 @RequestParam 完成映射
1 |
|
@RequestParam
中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。 如果该参数是可选的,可以将required属性设置为false。
实体参数
**简单实体对象:**请求参数名与形参对象属性名相同,定义POJO接收即可
**复杂实体对象:**请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
注意:pojo/User,pojo/Address 中都要 ctrl+insert
定义 Getter(),Setter(),toString() 方法
数组集合参数
**数组参数:**请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
**集合参数:**请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
日期参数
使用 @DateTimeFormat
注解完成日期参数格式转换
JSON 参数
JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody
标识
路径参数
通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable
获取路径参数
响应
ResponseBody: 原始,不推荐
**统一响应:**推荐
分层解耦
三层架构
分层、解耦
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则:高内聚低耦合。
IOC、DI
Service层 及 Dao层的实现类,交给IOC容器管理。
为Controller及Service注入运行时,依赖的对象
运行测试。
IOC
Bean 的声明:
Bean 组件扫描:
- 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
- @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解
- @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包。
DI
Bean 注入
依赖注入的注解:
- @Autowired:默认按照类型自动装配。
- 如果同类型的bean存在多个:
- @Primary
- @Autowired + @Qualifier(“bean的名称”)
- @Resource(name=”bean的名称”)
@Resource 与 @Autowired区别:
- @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解。
- @Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。