JavaWeb
整体介绍
- Web:全球广域网::www::,也称为万维网,能够通过浏览器访问的网站
- JavaWeb:用Java开发网站的技术栈
- 网页——JavaWeb程序——数据库
- 网页:展示数据
- 数据库:存储管理数据
- JavaWeb程序:
逻辑处理
- JDBC(
Java DataBase Connectivity
):用java语言操作关系型数据库 的API
- JDBC制定了Java语言操作所有关系型数据库的规则++没有JDBC时,Java代码不能一口气应用于所有的DBMS。需要不断修改匹配,JDBC提供了Java代码与DBMS的接口++
- 而每一个DBMS会定义自己对于JDBC的实现类,这个实现类的学名就叫驱动!!!::所以以后说什么MySQL驱动,其实就是MySQL对于JDBC的实现类::
- 数据库厂商提供数据库驱动jar包,我们真正执行的代码就是驱动jar包中的实现类
- 用哪个数据库,就把那个数据库对应的jar包导入过来
- 面向接口的编程
- Maven:方便构建项目
- MyBatis:简化JDBC的框架
Maven
%% Maven是专门用于管理和构建 Java项目的工具,提供了标准化的项目结构、构建流程(编译、测试、打包、发布…)、依赖管理机制
- 不同IDE之间的项目结构不同,会造成不通用的问题,eclipse写的项目无法直接导入IDEAintellj中
- 项目结构:
- 项目名称
src
(放置java代码)
- 源代码目录
main
,源代码分为java代码、配置文件等。 - 测试类目录
test
,测试类也有java代码和配置文件 - 后面会学
web
的目录
pom.xml
::放置maven项目核心配置文件::
- 这种项目结构就是maven标准化的结构
- 构建流程:编译生成字节码文件——测试代码是否正确——打jar包——发布
- ++maven提供了一套简单的命令完成项目构建 package打包等,目前来看,可以用cmd命令,在IDEA中配置Maven后可以有更好的页面化功能选项++
- 依赖管理:管理项目所依赖的第三方资源,比如一些jar包和插件 maven使用标准的坐标配置来管理各种依赖,只需要写一些标签就可以把jar包加入项目中
- Apache Maven 阿帕奇项目 基于项目对象模型
POM:project object model
常用命令
- compile编译
- clean清理
- test测试
- package打包
- install安装
生命周期
Maven构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven对项目构建的生命周期划分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,安装等
- site:产生报告,发布站点等
同一生命周期内,执行后边的命令,前边的所有命令会自动执行::执行install,则compile test package都会自动执行::
Maven坐标
%% Maven中的坐标是资源的唯一标识,使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成:
groupld
:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)artifactld
:定义当前Maven项目名称(通常是模块名称,例如order-service、goods-service)version
:定义当前项目版本号
Mybatis
%% MyBatis是一款优秀的特久层框架,用于简化JDBC开发,MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
持久层
- 负责将数据到保存到数据库的那一层代码
- JavaEE三层架构:表现层、业务层、持久层
- 表现层:前端页面
- 业务层:业务逻辑处理
- 持久层:数据持久化
JDBC的缺点
- 硬编码:在注册驱动、获取链接、定义sql语句时会出现硬编码的情况。也就是说,我们的这些操作的各种信息都是通过固定的字符串显示的,灵活性不高。
- 操作繁琐:手动设置?参数、手动封装结果集
改善方案
- 关于硬编码:字符串不要写到代码里去了,写到一个单独的配置文件去
- 自动完成繁琐的代码
再次介绍
服务器资源
-
静态资源:HTML、CSS、JS、图片等,负责页面展现
-
动态资源::根据用户的信息动态设置页面的信息,也就是个人的专属页面信息:::在Java技术中有Servlet JSP等技术,负责逻辑处理
-
数据库,三者需要相互配合使用
++BS框架的具体流程:浏览器会发送请求给服务端,请求相关的资源。资源分为动态资源和静态资源。动态资源负责逻辑处理并且访问数据库,再把数据给到静态资源,页面美化之后传递给浏览器一个完整的页面++
-
服务器和浏览器之间要进行数据的通信,通信要遵循一定的规则:TCP、UDP等。::在这里,我们要学习HTTP这一浏览器-服务器的通信规则,其本质就是定义数据传送的规则::
- 在收到HTTP请求之后,我们需要解析该协议,这里就有了Web服务器,其作用有解析HTTP协议、解析请求数据并发送响应数据等。
- 我们要学习的就是最常见的
Apache Tomcat
这一Web服务器
HTTP(Hyper Text Transfer Protocol)
%% 超文本传输协议:规定了浏览器和服务器之间数据传送的规则。在浏览器和服务器交流数据的时候,服务器需要和浏览器建立约定,浏览器按照某一格式传输数据,服务器就按照这种格式解析数据这时请求数据已经完成使命了,接下来服务器处理后的响应数据还需要通过HTTP协议返回给网页
- 总而言之,HTTP就是请求数据和响应数据他们要按照一定的格式书写
TCP、IP
- TCP/IP体系结构则将网络分为四层,自下而上分别是网络接口层、网络层、传输层、应用层
- 发送端发送数据到接收端:
- 首先应用层准备好要发送的数据,然后给了传输层
- 传输层的主要作用就是为发送端和接收端提供可靠的连接服务,传输层将数据处理完后就给了网络层。
- 网络层的功能就是管理网络,其中一个核心的功能就是路径的选择(路由)::从发送端到接收端有很多条路,网络层就负责管理下一步数据应该到哪个路由器::
- 选择好了路径之后,数据就来到了数据链路层,这一层就是负责将数据从一个路由器送到另一个路由器。然后就是物理层了,可以简单的理解,物理层就是网线一类的最基础的设备,而网络接口层就是数据链路层和物理层的组合。
- 类比物流:京东在接到小米的订单后,工作人员从仓库中找到一部小米10Pro(应用层)。工作人员将手机打包好, 交给了京东物流(传输层),此时京东物流与小明建立了联系,显示本订单已发货(传输层的作用)。接下来手机就到了转运中心(路由器),**转运中心根据时间,成本等一系列因素决定下一步该发往哪一个转运中心(
网络层
)**决定好接下来发往哪一个转运中心后就开始用货车运输了,那么运输的过程就是数据链路层
了,链路层负责将数据从一个端点送到另一个端点。那么货车行驶的道路就是物理层
。几经周转,手机安全地送到了小明手上。
特点:
- 基于TCP协议::面向连接的协议,可靠、基于字节流::,TCP每一次请求之前都要进行三次握手的连接,连接之后再来传输数据
- 面向连接指的是先建立连接再发送数据,也就是先确认路可以走得通再发货。
- 可靠就是如果货物在运输过程中有损坏或者丢失就让京东重新发货,确保小明收到的手机是没有任何问题的。
- 基于字节流的意思就是比如小明买了手机又买了手机配件,分开发货几件物品不是在一个包裹里,一个一个发。在这个例子中,京东的工作人员和小明充当了TCP协议的角色,他们两个共同确保了货物的完整性。
请求数据:
1.请求行:请求数据的第一行。其中GET表示请求方式,/
表示请求资源路径,HTTP/1.1表示协议版本
2.请求头:第二行开始,格式为key:value形式。
3.请求体:POST请求的最后一部分,存放请求参数
GET /HTTP/1.1
Host:www.itcast.cn //主机名
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 Chrome/91.0.4472.106
`` 如果是POST,则请求体位于最后空一行,里面都是参数
GET请求和POST请求区别:
1.GET请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
2.GET请求请求参数大小有限制,POST没有
响应数据:
1.响应行:响应数据的第一行。其中HTTP/1.1表示协议版
本,200表示响应状态码,OK表示状态码描述
2.响应头:第二行开始,格式为key:value形式
3.响应体:最后一部分。存放响应数据
HTTP/1.1 200 OK
Server:Tengine
Content-Type:text/html
Transfer-Encoding:chunked…
<head>
</head>
``
常见的HTTP响应头:
Content-Type:表示该响应内容的类型,例如text/html,
image/jpeg;
Content-Length:表示该响应内容的长度(字节数);
Content–Encoding:表示该响应压缩算法,例如gzip;
Cache-Control:指示客户端应如何缓存,例如max-age=O0
表示可以最多缓存300秒
状态码
- 100+:响应中++临时状态码,不常用++
- 200+:成功
- 300+:重定向——当前客户端浏览器访问的资源已经被移动到别的地方让客户端再发一个请求
- 400+:客户端错误——处理发生错误,责任在客户端
- 500+:服务器端错误——服务端抛出异常、路由错误等
常见的响应状态码
- 200:OK
- 302:重定向,浏览器会自动重新访问新的地址
- 404:请求资源不存在一般是URL输入有误或网站资源已被删除
- 500:服务器异常,赶紧解决Java代码
Socket(套接字)
- 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据可对其进行像对文件一样的打开、读写和关闭等操作。
- 套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合
%% 我们将一个小区比作一台计算机,一台计算机里面跑了很多程序,怎么区分程序呢,用的是端口,就好像小区用门牌号区分每一户人家一样。手机送到小明家了,怎么进去呢?从大门进啊,怎么找到大门呢?门牌号呀。就相当于从互联网来的数据找到接收端计算机后再根据端口判断应该给哪一个程序,小明家的入口就可以用小区地址+门牌号进行唯一表示,那么同样的道理,程序也可以用IP+端口号进行唯一标识,那么这个程序的入口就被称作Socket - Socket编程就是对TCP协议的具体实现,封装了ip+port端口,作为一个方法供实例调用
- 总而言之,Socket就相当于网络和进程直接数据传递的门户Socket支持TCP协议并且唯一标识程序进程。
Web服务器:Tomcat
- Web服务器是一个应该程序(软件)对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。主要功能是提供网上信息浏览服务
- 也就是说我们要在服务器端安装这样的一个软件,然后把web项目放到服务器软件中,等待服务器软件启动
- 轻量级Web服务器,支持
Servlet/JSP
少量JavaEE规范::JavaEE就是指Java企业级开发的技术规范总和,包含13项技术规范,有JDBC/JSP/XML/Servlet等技术::
- 而像其他的服务器,都是支持全部JavaEE技术的重量级服务器,内容庞大,不方便
- 也被称为Web容器、Servlet容器
部署项目
把项目打包成.war
包,然后将war包放到webapps目录之下,Tomcat会自动解压缩war文件