Tomcat & Http

128 阅读4分钟

1⃣️Tomcat简介

安装Tomcat

请参考另一篇文章juejin.cn/post/714283…

❗️ 最好下载tomcat9版本,这样IDEA里面不会报错

Tomcat概述

Tomcat是一个免费的Web应用服务器,用来发布web项目

启动Tomcat:

image.png

验证启动:

http://localhost:8080/

Tomcat目录结构

image.png

动态WEB资源目录结构

website
    |----静态页面(HTML、CSS、JS、图片等)
    |----JSP页面
    |----WEB-INF(目录,必须存在)
        |----web.xml(文件,必须存在)
        |----classes(可选)
        |----lib(第三方jar包,可选)

2⃣️Tomcat项目发布方式

方式1

直接将项目复制到 tomcat目录/webapps

然后访问项目地址: http://localhost:8080/test/aaa/hello.html

image.png image.png

方式2(不推荐)

在 tomcat/conf/server.xml 里配置tomcat的虚拟路径

这种方式需要修改server.xml,是属于核心配置文件

image.png

方式3(推荐)

首先要去 tomcat/conf/Catalina/localhost/ 路径下配置tomcat的虚拟路径

如:test.xml,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Context docBase="/Users/xxx/demo/test"></Context>

其中Context里面放置的是项目路径

如,我放了一个hello3.html

最后使用 http://localhost:8080/test/hello3.html 进行访问

image.png

3⃣️ IDEA创建Tomcat项目

点击IDEA左上角的File-->new-->Project,或者小窗口里直接点击Create New Project:

image.png

选择Java Enterprise,在Application Server里添加Tomcat Server:

image.png

选择Web Application,并勾选Create web.xml,点击Next:

image.png

第一项是你的工程名字随便取,第二个是你的工程路径,选择好之后点击finish:

image.png

完成之后,点击WEF-INF-->右键-->NEW-->Directory,创建两个文件夹,classes和lib,这个名字不要改!!!

image.png

再点击File ,选择Project Structure,点击Modules ,选择Paths,选中Use module compile output path ,把路径改成刚刚创建的classes文件夹:

image.png

再点旁边的Dependencies,点击"+"号,选择1 JARs or directories

image.png

选择你刚刚创建的lib文件夹,点击OK。选第3个,jar Directory。 一路OK 到底!

image.png

回到主界面后,点击Run ,选择Edit Configurations

image.png

点击Deployment:

image.png

点击运行:

image.png

去浏览器里查看效果:

image.png

4⃣️ Http协议

规定了浏览器和服务器端的数据交互的格式

特点:基于请求和响应模型(成对出现,先有请求,后有响应)、简单快捷(请求只需要发送请求方式和请求路径)

GET请求

GET /web_test2/demo2.html?name=zhangsan&name=qqq222 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
sec-ch-ua: "Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 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.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/web_test2/demo.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: Idea-a610e0bc=10b95e24-4b65-4216-ba5b-bac507d4488b

POST请求

POST /web_test2/demo2.html HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 20
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 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.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/web_test2/demo.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: Idea-a610e0bc=10b95e24-4b65-4216-ba5b-bac507d4488b

入参:

image.png

请求部分解析

请求行

  • 常用请求方式(get/post)
    • GET请求:请求参数会显示在地址栏;有大小限制;
    • POST请求:请求参数不显示在地址栏,在请求体中;没有大小限制;
  • 请求路径(如:/web_test2/demo2.html)
  • 协议版本(HTTP/1.1)

请求头

请求体

  • POST请求方式的请求参数

Get响应部分

HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"126-1612425416000"
Last-Modified: Thu, 04 Feb 2021 07:56:56 GMT
Content-Type: text/html
Content-Length: 126
Date: Thu, 04 Feb 2021 08:00:45 GMT
Keep-Alive: timeout=20
Connection: keep-alive

响应部分解析

响应行

  • 协议版本(如:HTTP/1.1)
  • 状态码
    • 200:响应成功
    • 302:需要进行重定向操作
    • 304:需要查找本地缓存
    • 404:请求资源不存在
    • 500:服务器内部错误
  • 状态码描述

响应头

  • 一般是一个key对应一个value,或一个key对应多个value
  • Location:重定向的路径
  • Refresh:定时刷新
  • Content-Disposition:文件下载时使用

响应体

  • 显示到浏览器页面上的代码