Servlet入门 MVC实战项目 仓储管理系统

  • JavaWeb入门介绍
  • Http协议
  • Http请求数据格式
  • Http响应数据格式
  • Web实战Demo:自定义服务器
  • 对比Https协议
  • 总结

Redis章节复习已经过去,新的章节JavaWeb开始了,这个章节中将会回顾JavaWeb实战项目 仓储管理
代码会同步在我的gitee中去,觉得不错的同学记得一键三连求关注,感谢:
JavaWeb优化-链接: JavaWebProject

JavaWeb入门介绍

Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。
对我们而言:JavaWeb就是用Java技术来解决相关web互联网领域的技术。

  • 我们平时都是通过浏览器向服务器发起请求,比如:登录,购买,注册等请求
  • 获取服务器给我们的响应数据和资源展示;
    1. 静态web资源(如html 页面、css):指web页面中供人们浏览的数据始终是不变。
    2. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。常用动态web资源开发技术:JSP/Servlet、ASP、PHP等,在Java中,动态web资源开发技术统称为Javaweb。

我们对Web的操作都是基于HTTP协议来进行传输数据的。
HTTP(超文本传送协议)是在客户程序(如浏览器)与服务器程序之间进行交互所使用的协议。
HTTP是面向事务的应用层协议,它使用TCP连接进行可靠传输,服务器默认监听在80端口。
简单来说,HTTP协议就是客户端和服务器交互的一种通迅的协议(格式)。HTTP的诞生主要是为了能够让文档之间相互关联,形成超文本可以互相传阅。
Http就是Web通信的基础。

引进一个新的概念:
B/S 架构:Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。

Http协议

  • HTTP协议:主要定义通信规则
  • HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
  • 浏览器发送请求给服务器,服务器响应数据给浏览器,这整个过程都需要遵守一定的规则,之前大家学习过TCP、UDP,这些都属于规则,这里我们需要使用的是HTTP协议,这也是一种规则。
  • 需要注意的是:在Web通信的过程中,不仅仅是需要HTTP协议的,还会涉及到其他的协议的。比如:DNS、FTP等等;

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1)建立TCP连接、2)Web浏览器向Web服务器发送请求行、3)发送请求头、4)(服务器)发送状态行、5)发送响应头、6)发送响应数据->7)断TCP连接

web服务器解析协议,得到请求数据,发送响应;我们最常用的web服务器就是tomcat;

我们给出一个基本的请求与响应展示(F12快捷键)

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

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

  • 基于TCP协议: 面向连接,安全

    TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。

  • 基于请求-响应模型的:一次请求对应一次响应

    请求和响应是一一对应关系

  • HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的

    无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点,

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

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

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

    具体使用的时候,我们发现京东是可以正常展示数据的,原因是Java早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。具体如何来做,我们后面会详细讲到。刚才提到HTTP协议是规定了请求和响应数据的格式,那具体的格式是什么呢?

Http请求数据格式

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

Http响应数据格式

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

Web实战Demo:自定义服务器

package com.itheima;import sun.misc.IOUtils;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){//ServerSocket的accept()方法从连接请求队列中取出一个客户的连接请求,然后创建与客户连接的Socket对象,并将它返回。如果队列中没有连接请求,accept()方法就会一直等待,直到接收到了连接请求才返回。Socket sock = ss.accept();System.out.println("connected from " + sock.getRemoteSocketAddress());Thread t = new Handler(sock);t.start();}}
}

在客户/服务器通信模式中,服务器端需要创建监听特定端口的ServerSocket,ServerSocket负责接收客户连接请求,并生成与客户端连接的Socket。

我们通过ServerSocket创建服务器服务,监听指定端口,线程Handler请求过来,进行处理;

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.");}}

定义 基本线程Handler,处理请求
handle方法中,请求拿到一个静态资源网页,解析并返回,这里是通过输入输出流的方式实现的

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 {// 发送成功响应:

BufferedReader 读取资源

            //读取html文件,转换为字符串BufferedReader br = new BufferedReader(new FileReader("D:/Java-Sum/JavaWebHM/hmBook/day08-HTTP&Tomcat&Servlet/代码/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();}}
}

对比Https协议

HTTP在安全上是不足的:

  • 通信使用明文【没有加密过内容的】
  • 不验证通信方身份,无论是客户端和服务器,都是随意通信的
  • 无法证明报文的完整性【别人监听后,可以篡改】
      其实HTTPS就是披着SSL的HTTP。HTTPS 需要CA机构的颁发的SSL证书,HTTPS 的标准端口是443,而HTTP 标准端口是80。

https流程介绍
 在tcp建立之后,在正式http请求(发送url)之前,会有一个ssl的握手过程。

  1. 客户端发起请求:首先client(客户端)会发送其支持的加密算法,并生成一个随机数C1给server(服务端);
  2. 服务器回应:server收到请求后,会确定加密协议算法,也会生成自己的一个随机数S1,然后随同证书一起发送给client;
  3. 客户端验证证书:此时客户端对证书的有效期、合法性、证书的公钥(RSA加密)等进行校验;验证完毕后会再次产生一个随机数C2,此随机数使用证书中的公钥加密(RSA加密);消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名,并通知服务端;
  4. 生成密钥:server收到加密后的随机数后,使用私钥(申请证书时,server生成的)将其解密并保存;得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。此时双方已经持有安全通信的必要信息(对称加密算法、随机数密钥),可以进行安全通信了。

总结

javaweb有三大组件:Servlet、Filter、Listener

我们后面将会围绕这三大组件进行学习

JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器相关推荐

  1. Java Web(day05) —— 请求和响应

    一.Java web之请求和响应 Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequ ...

  2. Java 技术篇 - 启动web服务接收浏览器请求并响应实例演示,解决socket响应浏览器显示中文乱码问题,web服务response响应设置浏览器显示字体方法

    先看下效果图: 我通过 127.0.0.1:10010 访问我启用服务的效果图. 后台接收到的前台请求如下: GET / HTTP/1.1 Host: 127.0.0.1:10010 Connecti ...

  3. post入门篇:请求头/响应头、cookie、URL结构/编码、数据编码、winHttpRequest、post分析技巧、伪装IP

    目录 http URL URL编码 协议头 get请求头 post请求头.响应头 提交数据的类型(Content-Type) 编码 Base64编码 易语言处理302的包 cookie 浏览器是如何设 ...

  4. HTTP请求和响应格式介绍

    1.HTTP请求 HTTP请求由请求行.消息报头.及请求正文组成: 2.请求行格式 Method Request-URI HTTP-Version CRLF 其中Method为请求方法,Request ...

  5. php 追查框架生命周期,ThinkPHP5框架的生命周期:从发出请求到响应完成

    URL请求的生命周期 客户端通过URL发送访问请求 服务器端返回请求数据 TP5的生命周期 入口文件-->引导文件-->注册自动加载-->注册错误和异常机制-->应用初始化-- ...

  6. WEB入门实践-张晨光-专题视频课程

    WEB入门实践-256人已学习 课程介绍         WEB开发入门编程,从各种开发工具的讲解到html标签,css元素讲解,js课程系列. 课程收益     培养web开发技术人才 讲师介绍   ...

  7. Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门

    Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...

  8. sts java配置tomcat_Java Web入门学习(一) STS与Tomcat配置

    Java Web学习(一) STS与Tomcat配置 一.IDE的选择 使用基于Eclipse的STS Ide ,个人感觉挺好用的. 根据以上两张图片,将STS 下载下来.然后解压缩. 用编辑器打开S ...

  9. 【N1BOOK】[第一章 web入门] wp

    第一章 web入门]常见的搜集 wp [N1BOOK][第一章 web入门]常见的搜集 wp [N1BOOK][第一章 web入门]粗心的小李 wp [N1BOOK][第一章 web入门]afr_1 ...

最新文章

  1. 如何用windows系统访问Linux系统的web网站
  2. 关卡设计快速入门_6. 执行构建过程
  3. python浅拷贝 深拷贝
  4. MSM8974 fastboot烧写软件
  5. Eratosthenes筛选法(C++版)
  6. 转发技术风雨三十年,你经历过……
  7. 自动跑程序vbs脚本
  8. PHP仿金蝶云ERP进销存网络多仓版源码
  9. 基于opencv 的OCR小票识别(1)
  10. 扫描仪 无线 打印服务器,树莓派搭建网络打印机 扫描仪服务器
  11. 计算机论文外文翻译,计算机专业毕业论文外文翻译2篇
  12. 电力物联网大数据平台架构及应用
  13. 局部线性嵌入 (Locally linear embedding-LLE)原理总结
  14. 行人重识别综述学习笔记
  15. [弹幕词云姬]硬核b站up主一周撸出来的小工具,根据b站弹幕生成词云(一)
  16. 自考本科计算机安全,计算机网络系统安全搭建与防护-自考本科毕业论文.doc
  17. oracle查询视图时慢,oracle视图查询速度慢
  18. java straem 过滤_Java Stream 过滤器
  19. liunx下如何使用unzip 如何压缩文件
  20. 中国区域地图叠加绘制

热门文章

  1. 遥信、遥测、遥脉和数字量的区别
  2. cnn 句向量_快速理解句向量模型,深度好文,一定要看
  3. 心态-《不抱怨的世界》书中的精髓:通过4个步骤,成为一个不抱怨、每天都快乐的人。
  4. PowerMock简介及常见注解解释
  5. 微信小程序之发送通知消息(通过openid推送消息给用户)
  6. Android进程保活(黑白手段让APP活下去)
  7. Java 扫描识别条形码图片
  8. linux下文件复制、重命名
  9. 合肥工业大学宣城校区计算机大赛,合工大宣城校区学子!全国冠军!
  10. 背光模块市场现状研究分析与发展前景预测报告