1. 基本概念
1.1 Web
web:网络,网页
静态 web
- html,css
- 提供给所有人看的数据始终不会变化
动态 web
- 淘宝
- 提供给每个人看的数据会有所不同
- 技术栈:Servlet/JSP,ASP,PHP
Java 中,动态 web 资源开发的技术统称为 JavaWeb
1.2 Web 应用程序
Web 应用程序:可以提供浏览器访问的程序
- Web 应用程序由多个 Web 资源组成,这些资源可以被外界访问,对外界提供服务。
- Web 资源统一放在一个文件夹下。
- 一个 Web 应用程序由多部分组成 - html,css,js
- jsp,servlet
- java 程序,jar 包
- 配置文件
 
Web 程序编写完毕后,若想提供给外界访问,需要一个服务器来统一管理。
1.3 静态 Web
-  客户端可通过网络直接读取服务器上的网页(*.html, *.htm)。 
-  静态 Web 无法动态更新,所有用户看到的都是同一个页面。 
-  无法与数据库交互,数据无法持久化。 
-  无法与用户进行交互。 
1.4 动态 Web
-  Web 页面可动态更新,内容因人而异。 
-  可以与数据库进行交互,数据可以持久化。 
-  可以与用户进行交互。 
-  Web 资源出现错误需重新编写后台程序,重新发布。 
2. Web 服务器
2.1 JSP/Servlet
sun 公司基于 Java 语言和 B/S 架构研发的技术,可承载三高(高并发,高可用,高性能)问题。
-  B/S:浏览器和服务器 
-  C/S:客户端和服务器 
2.2 Tomcat
Web 服务器可处理请求及响应信息,目前最流行的 Web 服务器是 Tomcat 服务器。
2.2.1 安装 Tomcat
-  官网:https://tomcat.apache.org/  下载完毕后解压即可使用。 
2.2.2 目录介绍

2.2.3 启动和关闭

双击启动程序
访问:localhost:8080

2.2.4 配置

<!--协议及端口配置-->
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
<!--IP 及网站目录配置-->
<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">
2.2.5 发布应用
-  将应用放到 Tomcat 的 webapps 目录下 -- webapps|-- Root|-- app (网站根目录)|-- WEB-INF| |-- classes (java 程序)| |-- lib (jar 依赖)| |-- web.xml (网站配置文件)|-- index.html (默认的首页)
2.3 浏览器网址访问过程
(1)在浏览器中输入www.google.cn域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
 (2)如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
 (3)如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
 (4)如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
 (5)如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(google.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找google.com域服务器,重复上面的动作,进行查询,直至找到www.google.com主机。
 (6)如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
3. Http
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。
http/1.0:规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,每次仅传输一个资源,上一次和下一次请求完全分离。
http/1.1:支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,因此每次连接可传输多个资源。
3.1 Http 请求
// 请求 URL
Request URL: https://www.baidu.com/ 	
// 请求方法
Request Method: GET		
// 状态代码
Status Code: 200 OK		
// 远程地址
Remote Address: 182.61.200.7:443	
// 引用站点策略
Referrer Policy: strict-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
// 请求的主机名
Host: www.baidu.com
请求方法
GET:请求参数携带较少,大小有限制,会在 URL 地址栏显示数据内容,不安全,但高效。
POST:请求携带参数无限制,大小无限制,不会在 URL 地址栏显示数据内容,安全,但不高效。
3.2 Http 响应
// 缓存控制
Cache-Control: private
// 连接状态
Connection: keep-alive
// 编码
Content-Encoding: gzip
// 格式
Content-Type: text/html;charset=utf-8
// 网页刷新频率
Refresh:
// 网页重新定位
Location:
响应状态码
1xx:信息
| 消息 | 描述 | 
|---|---|
| 100 Continue | 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 | 
| 101 Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 | 
2xx:成功
| 消息 | 描述 | 
|---|---|
| 200 OK | 请求成功(其后是对GET和POST请求的应答文档。) | 
| 201 Created | 请求被创建完成,同时新的资源被创建。 | 
| 202 Accepted | 供处理的请求已被接受,但是处理未完成。 | 
| 203 Non-authoritative Information | 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。 | 
| 204 No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 | 
| 205 Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。 | 
| 206 Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它。 | 
3xx:重定向
| 消息 | 描述 | 
|---|---|
| 300 Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。 | 
| 301 Moved Permanently | 所请求的页面已经转移至新的url。 | 
| 302 Found | 所请求的页面已经临时转移至新的url。 | 
| 303 See Other | 所请求的页面可在别的url下被找到。 | 
| 304 Not Modified | 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。 | 
| 305 Use Proxy | 客户请求的文档应该通过Location头所指明的代理服务器提取。 | 
| 306 Unused | 此代码被用于前一版本。目前已不再使用,但是代码依然被保留。 | 
| 307 Temporary Redirect | 被请求的页面已经临时移至新的url。 | 
4xx:客户端错误
| 消息 | 描述 | 
|---|---|
| 400 Bad Request | 服务器未能理解请求。 | 
| 401 Unauthorized | 被请求的页面需要用户名和密码。 | 
| 401.1 | 登录失败。 | 
| 401.2 | 服务器配置导致登录失败。 | 
| 401.3 | 由于ACL对资源的限制而未获得授权。 | 
| 401.4 | 筛选器授权失败。 | 
| 401.5 | ISAPI/CGI应用程序授权失败。 | 
| 401.7 | 访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS 6.0所专用。 | 
| 402 Payment Required | 此代码尚无法使用。 | 
| 403 Forbidden | 对被请求页面的访问被禁止。 | 
| 403.1 | 执行访问被禁止。 | 
| 403.2 | 读访问被禁止。 | 
| 403.3 | 写访问被禁止。 | 
| 403.4 | 要求SSL。 | 
| 403.5 | 要求SSL 128。 | 
| 403.6 | IP地址被拒绝。 | 
| 403.7 | 要求客户端证书。 | 
| 403.8 | 站点访问被拒绝。 | 
| 403.9 | 用户数过多。 | 
| 403.10 | 配置无效。 | 
| 403.11 | 密码更改。 | 
| 403.12 | 拒绝访问映射表。 | 
| 403.13 | 客户端证书被吊销。 | 
| 403.14 | 拒绝目录列表。 | 
| 403.15 | 超出客户端访问许可。 | 
| 403.16 | 客户端证书不受信任或无效。 | 
| 403.17 | 客户端证书已过期或尚未生效。 | 
| 403.18 | 在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS 6.0所专用。 | 
| 403.19 | 不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS 6.0所专用。 | 
| 403.20 | Passport登录失败。这个错误代码为IIS 6.0所专用。 | 
| 404 Not Found | 服务器无法找到被请求的页面。 | 
| 404.0 | (无)–没有找到文件或目录。 | 
| 404.1 | 无法在所请求的端口上访问Web站点。 | 
| 404.2 | Web服务扩展锁定策略阻止本请求。 | 
| 404.3 | MIME映射策略阻止本请求。 | 
| 405 Method Not Allowed | 请求中指定的方法不被允许。 | 
| 406 Not Acceptable | 服务器生成的响应无法被客户端所接受。 | 
| 407 Proxy Authentication Required | 用户必须首先使用代理服务器进行验证,这样请求才会被处理。 | 
| 408 Request Timeout | 请求超出了服务器的等待时间。 | 
| 409 Conflict | 由于冲突,请求无法被完成。 | 
| 410 Gone | 被请求的页面不可用。 | 
| 411 Length Required | "Content-Length"未被定义。如果无此内容,服务器不会接受请求。 | 
| 412 Precondition Failed | 请求中的前提条件被服务器评估为失败。 | 
| 413 Request Entity Too Large | 由于所请求的实体的太大,服务器不会接受请求。 | 
| 414 Request-url Too Long | 由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。 | 
| 415 Unsupported Media Type | 由于媒介类型不被支持,服务器不会接受请求。 | 
| 416 Requested Range Not Satisfiable | 服务器不能满足客户在请求中指定的Range头。 | 
| 417 Expectation Failed | 执行失败。 | 
| 423 | 锁定的错误。 | 
5xx:服务器错误
| 消息 | 描述 | 
|---|---|
| 500 Internal Server Error | 请求未完成。服务器遇到不可预知的情况。 | 
| 500.12 | 应用程序正忙于在Web服务器上重新启动。 | 
| 500.13 | Web服务器太忙。 | 
| 500.15 | 不允许直接请求Global.asa。 | 
| 500.16 | UNC授权凭据不正确。这个错误代码为IIS 6.0所专用。 | 
| 500.18 | URL授权存储不能打开。这个错误代码为IIS 6.0所专用。 | 
| 500.100 | 内部ASP错误。 | 
| 501 Not Implemented | 请求未完成。服务器不支持所请求的功能。 | 
| 502 Bad Gateway | 请求未完成。服务器从上游服务器收到一个无效的响应。 | 
| 502.1 | CGI应用程序超时。 | 
| 502.2 | CGI应用程序出错。 | 
| 503 Service Unavailable | 请求未完成。服务器临时过载或宕机。 | 
| 504 Gateway Timeout | 网关超时。 | 
| 505 HTTP Version Not Supported | 服务器不支持请求中指明的HTTP版本。 |