Tomcat&JavaWeb&HTTP

一、Tomcat

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

1.1 版本选择及安装

版本企业用的比较广泛的是8.0和9.0,目前比较新正式发布版本是Tomcat10.0, Tomcat11仍然处于测试阶段。从 Java EE 迁移到 Jakarta EE 的结果是,所有已实现 API 的主包已从 更改 javax.*jakarta.*这几乎肯定需要更改代码以使应用程序能够从 Tomcat 9 及更早版本迁移到 Tomcat 10 及更高版本。官方有提供迁移工具。

Servlet Version EE Version
6.1 Jakarta EE ?
6.0 Jakarta EE 10
5.0 Jakarta EE 9/9.1
4.0 JAVA EE 8
3.1 JAVA EE 7
3.1 JAVA EE 7
3.0 JAVAEE 6
Servlet Version Tomcat Version JDK Version
6.1 11.0.x 17 and later
6.0 10.1.x 11 and later
5.0 10.0.x (superseded) 8 and later
4.0 9.0.x 8 and later
3.1 8.5.x 7 and later
3.1 8.0.x (superseded) 7 and later
3.0 7.0.x (archived) 6 and later (7 and later for WebSocket)

下载

在这里插入图片描述

安装

  1. 正确安装JDK并配置JAVA_HOME( https://injdk.cn中可以下载各种版本的JDK),配置了才能启动

  2. 解压tomcat到非中文无空格目录

  3. 点击bin/startup.bat启动

  4. 打开浏览器输入 http://localhost:8080访问测试

  5. 直接关闭窗口或者运行 bin/shutdown.bat关闭tomcat

  6. 处理dos窗口日志中文乱码问题: 修改 conf/logging.properties ,将所有的UTF-8修改为GBK

1.2 目录

1.3 WEB项目部署的方式

<!-- 
	path: 项目的访问路径,也是项目的上下文路径,就是在浏览器中,输入的项目名称
    docBase: 项目在磁盘中的实际路径
 -->
<Context path="/app" docBase="D:mywebappsapp" />

二、IDEA中Java Web开发部署流程

  1. idea配置应用服务器:settings -> Build, Execution, Deployment -> Application Servers

在这里插入图片描述

  1. 新建项目后,新建 Module,为 Module 添加 Tomcat 依赖

在这里插入图片描述

  1. 选择module,双击shift,添加 framework support;idea低版本选中 module 右键也有该选项。添加 Web Application 并且勾选 web.xml

在这里插入图片描述

  1. IDEA部署-运行web项目:在运行和debug旁边有编辑配置,添加tomcat Server,选择 Local,之后点击右下角 Fix的配置项目,选择带 _exploded 的(或者到该页面 Deployment 页签配置),配置完即可启动了,浏览器将打开 index 页面

在这里插入图片描述

IDEA部署并运行项目的原理

  • idea并没有直接将编译好的项目放入tomcat的webapps中
  • idea根据关联的tomcat,创建了一个tomcat副本,将项目部署到了这个副本中
  • idea的tomcat副本在C:用户当前用户AppDataLocalJetBrainsIntelliJIdea2022.2tomcat中
  • idea的tomcat副本并不是一个完整的tomcat,副本里只是准备了和当前项目相关的配置文件而已
  • idea启动tomcat时,是让本地tomcat程序按照tomcat副本里的配置文件运行
  • idea的tomcat副本部署项目的模式是通过conf/Catalina/localhost/*.xml配置文件的形式实现项目部署的

三、HTTP协议

3.1 发展历程

HTTP/1.1

  • HTTP 的第一个标准化版本 HTTP/1.1 ( RFC 2068 ) 于 1997 年初发布,支持七种请求方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE
  • 发布后15年非常稳定,但之后出现了 HTTPS(安全文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP 的安全版本

HTTP/2

HTTP/3

  • 于 2021 年 5 月 27 日发布 , HTTP/3 是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012 年开发的新协议 QUIC
  • HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器浏览器支持
  • 目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3

3.2 HTTP协议的会话方式

浏览器服务器之间的通信过程要经历四个步骤

在这里插入图片描述

3.3 请求报文

请求报文组成:

  • 请求首行(请求); GET/POST 资源路径?参数 HTTP/1.1
    • 请求方式 GET
    • 访问服务器的资源路径?参数1=值1&参数2=值2 …
    • 协议及版本 HTTP/1.1
  • 请求头信息(请求头);
  • 空行;
  • 请求体;POST请求才有请求体
- 请求行
GET http://localhost:8080/TestWeb_war_exploded/ HTTP/1.1
- 请求头
- 主机虚拟地址
Host: localhost:8080
- 长连接
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
- 请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]
Upgrade-Insecure-Requests: 1
- 用户系统信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
- 浏览器支持的文件类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
- 当前页面的上一个页面路径[当前页面通过哪个页面跳转过来的]:   可以通过此路径跳转回上一个页面, 广告计费,防止盗链
Referer: http://localhost:8080/TestWeb_war_exploded/login.html
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br
- 浏览器支持的语言
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=4A572D771E3A36F8CBCB791AB56C9D9E

3.4 响应报文

响应报文组成:

  • 响应首行(响应行); 协议/版本 状态码 状态码描述
    • 协议及版本 HTTP/1.1
    • 响应状态码 200;HTTP 状态码(英语:HTTP Status Code)是用以表示 HTTP 响应状态的 3 位数字代码
    • 状态描述 OK (缺省)
  • 响应头信息(响应头);
  • 空行;
  • 响应体;
- 响应行
HTTP/1.1 200
- 响应头
- 响应体数据的类型[浏览器根据类型解析响应体数据,如果响应的是html页面,最终响应体内容会被浏览器显示到页面中]
Content-Type: text/html;charset=UTF-8
- 响应体内容字节数
Content-Length: 111
- 响应的时间,这可能会有8小时的时区差
Date: Fri, 24 Nov 2023 08:22:39 GMT
Keep-Alive: timeout=20
Connection: keep-alive
- 下面是空行及响应体


<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  $END$
  <br />
  老铁666
  </body>
</html>

常见响应状态码:

  • 200: 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 302: 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
  • 304: 使用了本地缓存
  • 404: 请求的资源没有找到,说明客户端错误的请求了不存在的资源
  • 405: 请求的方式不允许
  • 500: 请求资源找到了,但服务器内部出现了错误

一般含义:

更多状态码:

状态码 状态码英文描述 中文含义
1** 消息
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2** 成功
200 OK 请求成功。一般用于GET与POST请求
201 Created 创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回meta信息不在原始的服务器,而是一个副本
204 No Content 内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求
3** 重定向
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
4** 客户端错误
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置“您所请求的资源无法找到”的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
5** 服务器错误
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

原文地址:https://blog.csdn.net/xxx1276063856/article/details/134602438

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_1783.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注