[Java Web]HTTPTomcatServlet
创始人
2024-05-30 17:49:05
0

今天太晚了,还有Tomcat和Servlet明天再更新,hxdm见谅😉😀

目录

1、Web概述

1.1、 Web和JavaWeb的概念

1.2、JavaWeb技术栈介绍

1.2.1、B/S架构

1.2.2、静态资源

1.2.3、动态资源

1.2.4、数据库

1.2.5、HTTP协议

1.2.6、Web服务器

1.3、Web核心学习内容

2、HTTP

2.1、简介

2.2、HTTP协议特点

2.3、请求数据格式

2.3.1、格式介绍

2.3.2、GET&POST实例演示

2.4、响应数据格式

2.4.1、格式介绍

2.4.2、响应状态码

2.4.3、自定义服务器


文章学习目标:

  • 了解JavaWeb开发的技术栈
  • 理解HTTP协议和HTTP请求与响应数据的格式
  • 掌握Tomcat的使用
  • 掌握在IDEA中使用Tomcat插件
  • 理解Servlet的执行流程和生命周期
  • 掌握Servlet的使用和相关配置

1、Web概述

1.1、 Web和JavaWeb的概念

Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。
在我们日常的生活中,经常会使用浏览器去访问百度、京东等这些网站,这些网站统称为Web网站。
我们知道了什么是Web,那么JavaWeb又是什么呢?顾名思义JavaWeb就是用Java技术来解决相关web互联网领域的技术栈。


学习完JavaWeb之后,就可以使用Java语言开发上述所说的网站。

而国内很多大型网站公司也是首选Java语言来解决web互联网相关的问题。

如下的公司的系统是使用Java语言编写:

8c9143b8ae452b6585a4160b4412aad3.png


使用Java语言开发互联网系统是有很多技术栈,下面详细介绍

1.2、JavaWeb技术栈介绍

深入了解JavaWeb技术栈之前,有一个很重要的概念:B/S架构

1.2.1、B/S架构

什么是B/S架构?
B/S 架构:Browser/Server,浏览器/服务器 架构模式

它的特点是:客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。

浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。

可以通过下面这张图来回想我们的上网过程:

d8e37c5abe3f2e7d7c2b51601d8259db.png

  • 打开浏览器访问百度首页,输入要搜索的内容,点击回车或百度一下,就可以获取和搜索相关的内容
  • 搜索的内容并不在我们自己的点上,那么这些内容从何而来?答案很明显是从百度服务器返回给我们的
  • 日常百度的小细节,逢年过节百度的logo会更换不同的图片,服务端发生变化,客户端不需做任务事情就能获取最新内容
  • 所以说B/S架构的好处:易于维护升级。服务器端升级后,客户端无需任何部署就可以使用到新的版本。
    了解了什么是B/S架构后,作为后台Java开发工程师的我们将来主要关注的是服务端的开发和维护工作。
  • 在服务端将来会放很多资源,主要分为静态资源和动态资源。下面详细介绍这些资源。

1.2.2、静态资源

  • 静态资源主要包含HTML、CSS、JavaScript、图片(image)等,主要负责页面的展示。
  • 在之前已经学过前端网页制三剑客(HTML+CSS+JavaScript),使用这些技术就可以制作出效果比较丰富的网页,将来可以展现给用户。
  • 但是由于做出来的这些内容都是静态的,这就会导致所有的人看到的内容将是一模一样,这在有些应用场景显然是不行的。在日常上网的过程中,我们除了看到这些好看的页面以外,还会碰到很多动态内容,比如我们常见的网站登录效果,某个用户A登录了B网站,那么在这个网站展示的信息里面,就一定会展示A相关的信息;同理C登录B网站,也需要展示C的信息。
  • 要想实现这样的效果,光靠静态资源是无法实现的,所以动态资源相关技术就显得十分必要。

1.2.3、动态资源

  • 动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理。
  • 动态资源处理完逻辑后会把得到的结果交给静态资源来进行展示,动态资源和静态资源要结合一起使用。

动态资源虽然可以处理逻辑,但是当用户来登录的时候,就需要输入用户名和密码等相关的信息,

这个时候又需要解决的一个问题是,用户在注册的时候填入的用户名和密码、以及我们经常会访问到一些数据列表的内容展示。

这些数据都存储在哪里?我们需要的时候又是从哪里来取呢?很明显这些是需要存储在数据库的。

以后数据库是部署在服务器上面的,可以存储大量的数据,以及快速的存取数据。

下面介绍数据库的处理逻辑。

1.2.4、数据库

数据库主要负责存储数据。

整个Web的访问过程就如下所示:
1、浏览器发送一个请求到服务端,去请求所需要的相关资源;
2、资源分为动态资源和静态资源,动态资源可以是使用Java代码按照Servlet和JSP的规范编写的内容
3、在Java代码中可以进行业务处理也可以从数据库中读取数据;
4、拿到数据后,把数据交给HTML页面进行展示,再结合CSS和JavaScript使其展示效果更好;
5、服务端将静态资源响应给浏览器;
6、浏览器将这些资源进行解析;
7、解析后将效果展示在浏览器,用户就可以看到最终的结果。

906fcd7e3225f0a3c83b153003206504.png

1.2.5、HTTP协议

HTTP协议:主要定义通信规则

浏览器发送请求给服务器,服务器响应数据给浏览器,这整个过程都需要遵守一定的规则,之前学习过的TCP和UDP,这些都属于规则,这里我们需要使用的是HTTP协议,这也是一种规则。

1.2.6、Web服务器

  • Web服务器:负责解析 HTTP 协议,解析请求数据,并发送响应数据
  • 浏览器按照HTTP协议发送请求和数据,后台就需要一个Web服务器软件来根据HTTP协议解析请求和数据,然后把处理结果再按照HTTP协议发送给浏览器
  • Web服务器软件有很多,在文章中使用的是目前最为常用的Tomcat服务器

到这为止,关于JavaWeb中用到的技术栈就介绍完了,这里面就只有HTTP协议、Servlet、JSP以及Tomcat这些知识是之前没有学习过的,所以整个Web核心主要就是来学习这些技术

1.3、Web核心学习内容

7fd255b6ac269f0d95f373bd41c1f2e6.png

整个Web核心,学习内容如下:

  1. HTTP、Tomcat、Servlet
  2. Request(请求)、Response(响应)
  3. JSP、会话技术(Cookie、Session)
  4. Filter(过滤器)、Listener(监听器)
  5. Ajax、Vue、ElementUI
  6. 综合案例

在此篇文章中,暂时先介绍HTTP、Tomcat、Servlet。

学习内容简介:

  1. Request是从客户端向服务端发出的请求对象,
  2. Response是从服务端响应给客户端的结果对象,
  3. JSP是动态网页技术,
  4. 会话技术是用来存储客户端和服务端交互所产生的数据,
  5. 过滤器是用来拦截客户端的请求,
  6. 监听器是用来监听特定事件,
  7. Ajax、Vue、ElementUI都是属于前端技术

2、HTTP

2.1、简介

HTTP概念:HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

  • 数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。
  • 如果想知道具体的格式,可以打开浏览器,点击F12打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容,如下图所示:

b8b9426101d2927e591a08851ae0f169.png

注意:在浏览器中如果看不到上述内容,需要清除浏览器的浏览数据。chrome浏览器可以使用ctrl+shift+Del进行清除。

所以学习HTTP主要就是学习请求和响应数据的具体格式内容。

2.2、HTTP协议特点

HTTP协议有它自己的一些特点,分别是:

  1. 基于TCP协议:面向连接,安全。
    TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。
  2. 基于请求-响应模型的:一次请求对应一次响应。请求和响应是一一对应关系
  3. HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求和响应都是独立的

无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。

这种特性有优点也有缺点:

  1. 缺点:多次请求间不能共享数据
  2. 优点:速度快

请求之间无法共享数据会引发的问题,如:

  1. 在网站购物中,加入购物车和去购物车结算是两次请求,
  2. HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品
  3. 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据

其实是Java早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。

刚才提到HTTP协议是规定了请求和响应数据的格式,下面介绍具体格式:

2.3、请求数据格式

2.3.1、格式介绍

请求数据总共分为三部分内容,分别是请求行、请求头、请求体:

d8f90f6b6067004e3eb086b92a4c35f0.png

  1. 请求行:HTTP请求中的第一行数据,请求行包含三块内容,

分别是GET[请求方式] /[请求URL路径] HTTP/1.1[HTTP协议及版本]
请求方式有七种,最常用的是GET和POST

     2.请求头:第二行开始,格式为key: value形式

请求头中会包含若干个属性,常见的HTTP请求头有:

  1. Host: 表示请求的主机名
  2. User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko;
  3. Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
  4. Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
  5. Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。


这些数据有什么用处?
服务端可以根据请求头中的内容来获取客户端的相关信息,有了这些信息服务端就可以处理不同业务需求,如:

  • 不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果
  • 服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果。这就是我们常说的浏览器兼容问题

3.请求体: POST请求的最后一部分,存储请求参数

ad1ae39fd24891f85c0fd20ee8cbcfd6.png


如上图红线框的内容就是请求体的内容,请求体和请求头之间是有一个空行隔开。此时浏览器发送的是POST请求,为什么不能使用GET呢?这时就需要回顾GET和POST两个请求之间的区别了:

  • GET请求请求参数在请求行中,没有请求体,POST请求请求参数在请求体中
  • GET请求请求参数大小有限制,POST没有

2.3.2、GET&POST实例演示

这个部分请查看我的另外一篇文章的"4.2、"部分:

HTML | 一文带你了解并上手前端三件套之HTML_︶ㄣ释然的博客-CSDN博客https://blog.csdn.net/qq_60735796/article/details/128956983?app_version=5.14.3&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128956983%22%2C%22source%22%3A%22qq_60735796%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app

小结

  1. 请求数据中包含三部分内容,分别是请求行、请求头和请求体
  2. POST请求数据在请求体中,GET请求数据在请求行上

2.4、响应数据格式

2.4.1、格式介绍

响应数据总共分为三部分内容,分别是响应行、响应头、响应体

  1. 响应行:响应数据的第一行,响应行包含三块内容,分别是 HTTP/1.1[HTTP协议及版本] 200[响应状态码] ok[状态码的描述]
  2. 响应头:第二行开始,格式为key:value形式

响应头中会包含若干个属性,常见的HTTP响应头有:

  • Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
  • Content-Length:表示该响应内容的长度(字节数);
  • Content-Encoding:表示该响应压缩算法,例如gzip;
  • Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒

3、响应体: 最后一部分。存放响应数据下图中.....这部分内容就是响应体,它和响应头之间有一个空行隔开。

d7acc8b130740a59a7f43a84fa6363b7.png

2.4.2、响应状态码

2.4.2.1、状态码大类

状态码分类

说明

1xx

响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它

2xx

成功——表示请求已经被成功接收,处理已完成

3xx

重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。

4xx

客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等

5xx

服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

状态码大全:状态 | Status - HTTP 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云

2.4.2.2、常见的响应状态码

状态码

英文描述

解释

200

OK

客户端请求成功,即处理成功,这是我们最想看到的状态码

302

Found

指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面

304

Not Modified

告诉客户端,你请求的资源至上次取得后,服务端并未更改,直接用本地缓存。隐式重定向。

400

Bad Request

客户端请求有语法错误,不能被服务器所理解

403

Forbidden

服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源

404

Not Found

请求资源不存在,一般是URL输入有误,或者网站资源被删除了

428

Precondition Required

服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头

429

Too Many

Requests

太多请求,可以限制客户端请求某个资源的数量,配合 Retry-After(多长时间后可以请求)响应头一起使用

431

Request Header

Fields Too Large

请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。

405

Method Not

Allowed

请求方式有误,比如应该用GET请求方式的资源,用了POST

500

Internal Server

Error

服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧

503

Service

Unavailable

服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

511

Network

Authentication

Required

客户端需要进行身份验证才能获得网络访问权限

关于响应状态码,先主要认识三个状态码,其余的等后期用到了再去掌握:

  • 200:ok 客户端请求成功
  • 404:Not Found 请求资源不存在
  • 500:Internal Server Error 服务端发生不可预期的错误

2.4.3、自定义服务器

在这里介绍一下自定义的服务器代码,主要使用到的是ServerSocketSocket

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
/*自定义服务器*/
public class Server {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(8080); // 监听指定端口System.out.println("server is running...");while (true){Socket sock = ss.accept();System.out.println("connected from " + sock.getRemoteSocketAddress());Thread t = new Handler(sock);t.start();}}
}class Handler extends Thread {Socket sock;public Handler(Socket sock) {this.sock = sock;}public void run() {try (InputStream input = this.sock.getInputStream()) {try (OutputStream output = this.sock.getOutputStream()) {handle(input, output);}} catch (Exception e) {try {this.sock.close();} catch (IOException ioe) {}System.out.println("client disconnected.");}}private void handle(InputStream input, OutputStream output) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));// 读取HTTP请求:boolean requestOk = false;String first = reader.readLine();if (first.startsWith("GET / HTTP/1.")) {requestOk = true;}for (;;) {String header = reader.readLine();if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕break;}System.out.println(header);}System.out.println(requestOk ? "Response OK" : "Response Error");if (!requestOk) {// 发送错误响应:writer.write("HTTP/1.0 404 Not Found\r\n");writer.write("Content-Length: 0\r\n");writer.write("\r\n");writer.flush();} else {// 发送成功响应://读取html文件,转换为字符串BufferedReader br = new BufferedReader(new FileReader("http/html/a.html"));StringBuilder data = new StringBuilder();String line = null;while ((line = br.readLine()) != null){data.append(line);}br.close();int length = data.toString().getBytes(StandardCharsets.UTF_8).length;writer.write("HTTP/1.1 200 OK\r\n");writer.write("Connection: keep-alive\r\n");writer.write("Content-Type: text/html\r\n");writer.write("Content-Length: " + length + "\r\n");writer.write("\r\n"); // 空行标识Header和Body的分隔writer.write(data.toString());writer.flush();}}
}

上面代码,不需要自己写,主要通过上述代码,可以了解到服务器可以使用java完成编写,是可以接受页面发送的请求和响应数据给前端浏览器的,真正用到的Web服务器,不会自己写,都是使用目前比较流行的web服务器,比如Tomcat

小结

  1. 响应数据中包含三部分内容,分别是响应行、响应头和响应体
  2. 掌握200,404,500这三个响应状态码所代表含义,分布是成功、所访问资源不存在和服务的错误

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...