javaweb【初识】
JAVAWEB
1 基础概念
1.1 静态web和动态web简介
- web开发:
- web,网页的意思,www.baidu.com
- 静态web
- html,css
- 提供给所有人看的数据始终不会发生变化!
- 动态web
- 淘宝,几乎是所有的网站
- 提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同!
- 技术栈:Servlet/SP,ASP,PHP 在lava中,动态web资源开发的技术统称为lavaweb
1.2web应用程序
web应用程序:可以提供浏览器访问的程序。
- a.html、b.html......多个web资源,这些web资源可以被外界访问,对外界提供服务;
- 你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上
- URL
- 这个统一的web资源会被放在同一个文件夹下,web应用程序-->Tomcat:服务器
一个web应用由多部分组成(静态web,动态web)
- html,css,is
- jsp,servlet
- Java程序
- jar包
- 配置文件(Properties) web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理。
1.3 静态web
-
.htm,.html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。通络;
-
静态web存在的缺点
- Web页面无法动态更新,所有用户看到都是同一个页面
- 轮播图,点击特效:伪动态
- Javascript[实际开发中,它用的最多]
- VBScript
-
它无法和数据库交互(数据无法持久化,用户无法交互)
1.4、动态web
页面会动态展示:“Web的页面展示的效果因人而异”
缺点:
- 加入服务器的动态web资源出现了错误,我们需要重新编写我们的**后台程序”
2 web服务器
2.1 web服务器开发脚本类型
- ASP:
- 微软:国内最早流行的就是ASP
- 在HTML中嵌入了VB的脚本,ASP+COM;
- 在ASP开发中,基本一个页面都有几干行的业务代码,页面极其换乱
- 维护成本高!
- C# php:
- PHP开发速度很快,功能很强大,跨平台,代码很简单(70%,WP)
- 无法承载大访问量的情况(局限性 Jsp/servlet
- B/S:浏览和服务器
- C/S:客户端和服务器
- sun公司主推的B/S架构
- 基于Java语言的(所有的大公司,或者一些开源的组件,都是用lava写的)
- 可以承载三高【高并发、高可用、高性能】问题带来的影响
2.2 web服务器
- 服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息: 微软的:ASP...Windows中自带的
- 面向百度编程
- Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的lakarta项目中的一个核心项目,最新的Servlet和SP规范总是能在Tomcat中得到体现,因为Tomcat技术先进、性能稳定,而且免费,因而深受ava爱好者的喜爱并得到了部分软件开发商的认可,成为自前比较流行的Web应用服务器。
- Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试ISP程序的首选。对于一个ava初学web的人来说,它是最佳的选择
- Tomcat实际上运行SP页面和Servlet。
3 Tomcat
3.1 安装tomcat
3.2 tomcat的启动和配置
下载完成后解压,打开
启动、关闭Tomcat
- 可以配置启动的端口号
- tomcat的默认端口号为:8080
- mysql:3306
- http:80
- https:443
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- 可以配置主机的名称:
- 默认的主机名为:localhost->127.0.01
- 默认网站应用存放的位置为:webapps
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
提到的面试题
- 请你谈谈网站是如何进行访问的?
- 参考答案:
-
- 输入一个域名,回车
-
- 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
-
- 有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
-
- 没有:去DNS服务器找,找到的话就返回,找不到就返回找不到
- 没有:去DNS服务器找,找到的话就返回,找不到就返回找不到
-
- 交换机的本质就是去找域名
3.4 发布一个web网站
不会就先模仿
- 将自己写的网站,放到服务器(Tomcat)中指定的web应用的文件夹(webapps)下,就可以访问了网站应该有的结构
--webapps:Tomcat服务器的web日录
-ROOT
-kuangstudy:网站的目录名
- WEB-INF
- classes:java程序
-1ib:web应用所依赖的jar包
-web.xml:网站配置文件
-index.html默认的首页
-static
-CSS
-style.css
-js
-img
-.....
4 Http
4.1 什么是HTTP
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上
- 文本:html,字符串,~
- 超文本:图片,音乐,视频,定位,地图....
- 80 Https:安全的
- 443
4.2 两个时代
- http1.0
- oHTTP/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
- http2.0
- HTTP/1.1:客户端可以与web服务器连接后,可以获得多个web资源
4.3 Http请求
- 客户端--发请求(Requwst)--服务器
- 以百度为例:
Request URL: https://www.baidu.com/ 请求地址
Request Method: GET get/post方法
Status Code: 200 OK 状态码:200
Remote(远程) Address: 14.215.177.38:443
Referrer Policy: origin-when-cross-origin
Accept:text/html...
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9 语言
Cache-Control: max-age=0
Connection: keep-alive
- 请求行
- 请求行中请求方式:GET
- 请求方式:Get、Post
- get:请求能够携带的参数比较少,大小受限制,会在浏览器url地址栏显示数据内容,不安全,但高效
- post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器RUL地址栏显示数据内容,安全,但不高效
- 消息头
Accept:告诉浏览器,他所支持的数据类型
Accept-Encoding: 支持哪种编码格式 GBK UTF-8 GB2312
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持连接
Host: 主机..../...
4.4 Http相应
- 服务器--响应--客户端
Cache-Control: private 缓存控制
Connection: keep-alive 连接
Content-Encoding: gzip 编码
Content-Type: text/html;charset=utf-8 类型
4.4.1 响应体
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 告诉浏览器,他所支持的数据类型
Accept-Encoding: gzip, deflate, br 支持哪种编码格式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 告诉浏览器,他的语言环境
Cache-Control: max-age=0 缓存控制
Connection: keep-alive 告诉浏览器,请求完成是断开还是保持可连接
Host: www.baidu.com 让网页重新定位
4.4.2 响应状态码
- 200:请求相应成功
- 3xx:请求重定向
- 重定向:重新到指定的位置去
- 4xx:找不到资源
- 资源不存在
- 5xx:服务器代码错误
- 502:网关错误
常见面试题:
当你的浏览器中地址栏输入地址回车的一瞬间到页面能够展示回来,经历了什么?
- (域名解析)在客户端,浏览器输入地址后,首先会在windows系统文件的hosts中查找是否有对应的ip地址,如果没有则需要向DNS域名解析服务器询问该域名对应的ip地址。
- (TCP三次握手)获取相应的ip地址后,客户端与服务器端建立TCP连接(三次握手),(网络层,数据链路层,物理层)
- 三次握手: - 第一次握手:客户端向服务器端发送一个SYN段,该段中包含客户端的初始序列号。 - 第二次握手:服务器端返回客户端SYN+ACK,该端中包含服务器端的初始序列号,ACK表示,已经确定收到客户端的SYN段。 - 第三次握手:客户端向服务器端响应一个ACK端,ACK表示,已经确定接受到服务器端的SYN段。
- (建立起TCP连接后发起http请求)客户端向服务器端发送请求,包含请求行,请求头。主要的两种请求方式(GET与POST) - GET:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据的内容,不安全,但高效。 - POST:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
- (服务器响应http请求)服务器处理请求,并返回响应,包含状态码,响应头,响应体。
- (浏览器解析http代码)浏览器收到响应,解析http代码渲染页面,并在浏览器页面展示出来。
- (断开连接)http1.0短连接,http1.1长连接。
Maven
- 我为什么要学习这个技术?
- 1.在lavaweb开发中,需要使用大量的iar包,我们手动去导入;
- 2.如何能够让一个东西自动帮我导入和配置这个iar包 由此,Maven诞生了!
5.1 Maven项目架构管理工具
我们目前用来就是方便导入iar包的!
5.2 下载安装Maven
maven官网
下载解压
建议:所有的环境放在一个目录下。
5.3 配置环境变量
配置如下配置:
- M2_HOME maven目录下的bin目录
- MAVEN_HOME maven的目录
- 在系统的pat中配置%MAVEN_HOME%\bin
测试Maven是否安装成功,保证必须配置完毕!
5.4 阿里云镜像
- 镜像:mirrors
- 作用:加速我们的下载
- 国内建议使用阿里云的镜像
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
5.5 本地仓库
建立一个本地仓库:localRepository 没有这个文件夹,提前创建。然后将地址粘到文件中
<localRepository>C:\environment\apache-maven-3.8.6\maven-repo</localRepository>
5.6 在IDEA中使用Maven
- 启动IDEA
- 创建一个Maven项目
- 创建Maven项目
注意版本的差别:IDEA2021以下,使用maven3.6.3兼容
- 等待创建完成,查看maven-repo文件夹
- 至于这个报错:这个警告对使用maven命令创建项目没有任何影响。
- IDEA中Maven设置
注意:IDEA项目创建成功后,看一眼Maven的配置
5.7 创建一个普通Maven项目
正在下载中,等了很长时间,最总发现:IDEA使用了默认的MAVEN配置下载插件
对比我们使用模板创建的项目
这个是web应用才有的配置
添加java和resources文件夹
但是我们发现在新建的文件右键时,没有新建class的选项
解决方法:标记文件夹功能
5.8 在IDEA中配置Tomcat
解决警告问题:
【必须配置】为什么,我们访问一个网站,需要指定一个文件夹的名字
- 最后点击确定就成功了。
5.9 点击运行,查看成果
5.10 pom文件
- pom.xml是maven的核心配置文件
- maven侧边栏的使用
- maven的高级之处在于,它会帮你导入这个jar包所依赖的其他jar包
5.11 以后可能遇到的问题
- 由于maven约定大于配置,可能我们写的配置文件,会无法导出或生效
- 解决方法: 参考代码的博客地址
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
可能的错误:duplicated Tag:"build"
Duplicated tag: 'build' (position: START_TAG seen ...<!--\u9879\u76ee\u6784\……
原因是:只能有一个build双目标签存在于pom.xml
解决方法:把resources目录下的标签通通放入到一个build双目标签中,删除多余的build标签。
5.12 查看目录树【maven中jar包的联系关联】
- 方法一:Maven侧边栏
- 方法二:命令行【较慢】
mvn dependency:tree
转载自:https://juejin.cn/post/7166155820818759710