目录
快速浏览
一、客户端与服务器通讯过程
1、服务端
搭建Java服务器开发环境
项目创建
项目部署到服务器软件,客户端才能访问到。
部署可以理解为给服务器安装软件,只有部署了客户端才能访问到要访问的内容
2、客户端
只能由客户端发出请求
https://128.10.10.12:8080/qq
ip地址 + 端口号 + 项目
IP地址找到服务器 + 服务器软件监听端口 + 同一个端口下可以有多个项目(qq weixin wangzhe)
二、语言夸平台的原理
C语言编译成不同的格式
Java编译成中间代码跑在虚拟机上
JS浏览器的JS引擎解释执行
三、网络协议
协议是双方沟通的基础,用来约束双方按一定的格式发消息
协议需要国际化标准组织来制定
协议促进了互联网的发展
OSI网络参考模型
互联网(internet)
一、互联网
互联网的出现,彻底改变了人们的生活方式,足不出户就可以购物、聊天、看电影、买车票、上班等
思考:数据是如何从一个设备传递到另一个设备的?
这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网
二、为什么要学习网络协议
互联网、移动互联网、物联网,都离不开网络协议
最熟悉的网络协议:HTTP
为了满足各种需求,有各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP等)
随着物联网、音视频、直播等领域的发展,网络协议已经是对一个开发人员的基本要求。
作为一个开发人员你知道下面这些问题吗?
TCP和UDP的区别?
说一下它们的报文格式?
TCP的流量控制和拥塞控制?TCP如何实现可靠性传输?
为什么连接是3次握手,关闭是4次挥手?
7层模型与4层模型的区别?每一层的作用是什么?
交换机与路由器的区别?
三、需要用到的工具
客户端-服务器开发环境
客户端:浏览器(HTML+CSS+JS)
服务器:Java
网络抓包
浏览器(Chrome、Firefox)、Fiddler、Wireshark
模拟工具
Xshell(只有Windows版)、Packet Tracer(注册地址)、GNS3
搭建环境
一、客户端与服务器
客户端发出请求,服务器特定端口监听,比如http请求的默认端口80。每个端口会运行一个服务器软件比如Tomcat,服务器软件会处理对应的业务。
端口可类比为银行大厅的服务窗口。
http://ip地址:端口/项目
二、客户端环境搭建
客户端环境,我们可以使用浏览器、Android平台、iOS平台来模拟。
三、服务器环境搭建
1、Java的跨平台原理
JDK(Java Development Kit):Java 软件开发工具包
JRE(Java Runtime Environment):Java 运行环境,JRE的内部有一个Java虚拟机(JVM)
JVM(Java Virtual Machine):Java 虚拟机
Java 的跨平台:一次编译,到处运行
编译生成跟平台无关的字节码文件(class文件)
由对应平台的JVM解析字节码为机器指令(01010)
如果代码有语法错误,将编译失败,并不会生成字节码文件
那就不会去运行一个 程序。最后导致 程序运行失败
2、C/C++的跨平台原理
C/C++的跨平台:使用平台相关的编译器生成对应平台的可执行文件
3、环境搭建
3.1
JDK(必须安装)、IntelliJ IDEA Ultimate(Java IDE)、Tomcat(服务器软件)。
3.2
Tomcat 解压至本地目录(路径非中文),找到bin目录下的 startup.bat(Windows) startup.sh(Mac)文件启动服务。
打开浏览器输入 http://127.0.0.1:8080 看是否能正常加载页面
3.3
创建一个Java工程TestDemo,添加一个Moudule 01_Test,创建一个Main.java文件,添加web framework
3.4 集成Tomcat 到 IntelliJ IDEA
第一步:添加配置
第二步:找到本地Tomcat路径
第三步:部署配置
第四步:启动Tomcat
需要将startup.sh启动的服务停止
点击IntelliJ IDEA 的run按钮,服务启动。浏览器会自动打开:http://localhost:8080/test
没有指定具体的资源文件时会默认加载index文件。
可以手动在浏览器输入:http://127.0.0.1:8080/test/index.jsp效果是一样的
第五步:重新部署
我们可以在web目录创建一个login.html文件,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/test/login" method="post">
<div>用户名<input type="text" name="username"></div>
<div>密 码<input type="text" name="password"></div>
<button type="submit">登录</button>
</form>
</body>
</html>
再重新部署
在浏览器输入http://localhost:8080/test/login.html
3.5 如何处理客户端发过来的请求
处理客户端发送过来的请求需要用到jsp、serveLet,两个库,添加这两个库的步骤如下
在com.test.demo包名下创建一个loginServelet.java文件
package com.test.demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/login")
public class loginSevelet extends HttpServlet {
//处理get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doGet(req, resp);
this.doPost(req,resp);
}
//处理post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp);
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username+"_"+password);
if ("123".equals(username) && "456".equals(password)){
resp.getWriter().write("Login Success!!!");
}else{
resp.getWriter().write("Login Failure!!!");
}
}
}
重新部署后,在浏览器输入:http://localhost:8080/test/login.html,打开后输入用户名:123,密码456
点击登录
IntelliJ IDEA 控制台输出:123_456
浏览器显示服务器返回的文本 Login Success!!!
总结
最后用一张图来总结下客户端与服务端的交互过程
行者常至,为者常成!