八、web开发基础
1、C/S架构
服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
例如我们需要下载QQ、微信、电脑版吃鸡,如果该客户端软件需要升级,用户需要重新下载最新版本的客户端下载安装。
C(客户端Client)/S(Server)架构
C(客户端Client)/S(Server)架构 桌面应用程序
java swing 、 c#
下载对应的安装包
安装成功之后才可以使用
2、B/S架构
什么是web开发
Web:全球广域网,也称为万维网(www),也就是能够通过浏览器访问的网站
例如 通过浏览器访问 www.mayikt.com 、www.baidu.com、www.taobao.com。
JavaWeb开发:是使用java技术栈开发Web项目。
什么是B/S架构
B/S架构的全称为Browser/Server,即浏览器/服务器结构,Browser指的是Web浏览器
它的特点是 客户端只需要安装浏览器,应用程序的逻辑和数据都存放在服务器端共享访问。
优点:易于维护升级:服务器端升级后,客户端(浏览器端无需升级)就获取最新的版本
静态web资源(如html 页面、js、css、images):指web页面中供人们浏览的数据始终是不变。
动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。
静态web资源开发技术:Html js、css、images
常用动态web资源开发技术:JSP/Servlet、ASP、PHP等
在Java中,动态web资源开发技术统称为Javaweb。
B/S体系架构的软件 版本升级的时候 客户端是无需升级的 只需要重新刷新网页即可。
缺陷:会占用服务器端带宽资源。
Http协议原理
Http基本概念
基于HTTP传输协议(超文本传输协议)客户端与服务器端之间数据传输规则。
HTTP特点:
1.底层基于TCP协议实现 ,面向连接方式安全;
2.基于请求(request)与响应(response)模型
3.Http协议是无状态协议,对于事务处理是没有任何记忆功能
4.Http协议多次请求无法共享,在javaweb开发中我们可以通过cookie、session解决该问题
5.http协议数据传输过程中 属于同步的过程;如果客户端发送请求达到服务器端,服务器端已经不响应 可能会导致 客户端会一直阻塞等待 对于用户体验是不好的 所以客户端发送请求达到服务器时会设置超时时间 例如5s。
Http请求格式
1.请求行:请求数据第一行
1.1由3部分组成,分别为:请求方法、URL 以及协议版本,之间由空格分隔
1.2请求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的
1.3协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
2.请求头:
第二行开始,格式 key:value形式
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Log, X-Reqid
Access-Control-Max-Age: 2592000
常见http协议请求头
Host:接受请求的服务器地址,可以是IP:端口号,也可以是域名
User-Agent:发送请求的应用程序名称
Connection:指定与连接相关的属性,如Connection:Keep-Alive
Accept-Charset:通知服务端可以发送的编码格式
Accept-Encoding:通知服务端可以发送的数据压缩格式
Accept-Language:通知服务端可以发送的语言
3.请求体:
post请求的最后一部分,存放发送请求的参数
userName=mayikt&age=26
get与post请求区别
1.get请求请求的参数在请求行中,没有请求体;
2.post请求请求参数在请求体中;
3.get请求请求参数有大小限制,post请求没有
测试html
<!DOCTYPE html>
<html>
<head>
<title>登录测试页面</title>
<form action="login.html" method="get">
<label>用户名: </label><input type="text" name="username" /><br>
<label>密 码 : </label><input type="password" name="password" /><br>
<input type="submit" value="登录 " />
</form>
</head>
</html>
Http响应格式
响应格式分为3个部分
1.响应行:响应数据第一行 http协议版本1.1版本
200表示响应状态码 ok为 成功状态
2.响应头:第二行开始 格式 key value
Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
Server:apache tomcat(服务端的Web服务端名)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Length: 80(服务端发送的压缩数据的长度)
Content-Language: zh-cn(服务端发送的语言类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
Refresh: 1;url=http://www.mayikt.com(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
Transfer-Encoding: chunked(分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
Expires: date(Cache-Control过期时间)
Cache-Control: no-cache(服务端禁止客户端缓存页面数据) max-age=xx(通知浏览器:xx秒之内别来烦我,自己从缓冲区中刷新)
Pragma: no-***(服务端禁止客户端缓存页面数据)
Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)
服务器端响应结果给客户端类型:
1.text/html;charset=UTF-8
2.image类型
3.响应体 存放服务器响应给客户端的内容
http协议常见响应状态
1.404—-客户端发送请求达到服务器端地址填写错了
2.500—服务器端 发生了错误
Http响应状态码
HTTP状态码说明
1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
100: (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101: (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx (成功)
200: (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201: (已创建) 请求成功并且服务器创建了新的资源。
202: (已接受) 服务器已接受请求,但尚未处理。
203: (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204: (无内容) 服务器成功处理了请求,但没有返回任何内容。
205: (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206: (部分内容) 服务器成功处理了部分 GET 请求。
3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
300: (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301: (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302: (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303: (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304: (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305: (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307: (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4xx(请求错误,一般是客户端问题)
这些状态代码表示请求可能出错,妨碍了服务器的处理。
400: (错误请求) 服务器不理解请求的语法。
401: (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403: (禁止) 服务器拒绝请求。
404: (未找到) 服务器找不到请求的网页。
405: (方法禁用) 禁用请求中指定的方法。
406: (不接受) 无法使用请求的内容特性响应请求的网页。
407: (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408: (请求超时) 服务器等候请求时发生超时。
409: (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410: (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
411: (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412: (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413: (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414: (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415: (不支持的媒体类型) 请求的格式不受请求页面的支持。
416: (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417: (未满足期望值) 服务器未满足”期望”请求标头字段的要求。
5xx(服务器错误,一般是服务端问题)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
500: (服务器内部错误) 服务器遇到错误,无法完成请求。
501: (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502: (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503: (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504: (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505: (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
九、socket
1、概述
1、计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。例如我们的QQ聊天
2、Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。
3、Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并 且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
2、网络通讯三要素
- IP地址
- 端口号
- 协议
1、我们需要知道的是主机间通过网络进行通信是需要遵循网络通信协议,是通过IP地址准确定位主机,通过端口号准确定位主机上的应用,例如IP地址和端口号 192.168.110.1:80
2、如何实现网络中的主机互相通信?
① 通信双方地址:IP和端口号
② 一定的规则协议。 tcp或者udp
3、IP地址和端口号码
IP地址准确定位主机
1.IP 地址:InetAddress(在Java中使用InetAddress类代表IP)
一的标识 Internet 上的计算机(通信实体)
2.本地回环地址(hostAddress):127.0.0.1 主机名(hostName):localhost
3.IP地址分类方式1:IPV4 和 IPV6
3.1 IPV4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已 经用尽。以点分十进制表示,如192.168.0.1
3.2 IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示, 数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984
4.IP地址分类方式2:公网地址(万维网使用)和私有地址(局域网使用)。192.168. 开头的就是私有址址,范围即为192.168.0.0–192.168.255.255,专门为组织机 构内部使用
特点:不易记忆
端口号就是标识正在计算机上运行的进程(程序)
不同的进程有不同的端口号
被规定为一个 16 位的整数 0~65535。
4、InetAddress
在JDK中提供了一个与IP地址相关的InetAddress类,该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法。
InetAddress类的常用方法
方法声明 |
功能描述 |
InetAddress getByName(String host) |
获取给定主机名的的IP地址,host参数表示指定主机 |
InetAddress getLocalHost() |
获取本地主机地址 |
String getHostName() |
获取本地IP地址的主机名 |
boolean isReachable(int timeout) |
判断在限定时间内指定的IP地址是否可以访问 |
String getHostAddress() |
获取字符串格式的原始IP地址 |
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Test01 {
public static void main(String[] args) throws UnknownHostException {
// 获取给定主机名的的IP地址,host参数表示指定主机
InetAddress inetAddress = InetAddress.getByName("192.168.0.106");
// 获取获取本地IP地址的主机名
String hostName = inetAddress.getHostName();
// 获取IP地址
String address = inetAddress.getHostAddress();
System.out.println("hostName:" + hostName);
System.out.println("address:" + address);
}
}
ipconfig 获取本机的ip地址
1.127.0.0.1 (电脑自己访问自己)
2.localhost (电脑自己访问自己)
3.192.168.0.106 直接获取到局域网的ip (让别人访问电脑)
5、dns域名解析
hostName 就是我们的域名
hostName 主机名称 其实就是 域名
mayikt.com—域名
taobao.com—域名
localhost–域名 dns解析ip地址
为了方便记忆 我们会使用域名在通过dns解析成我们的ip地址。
C:\Windows\System32\drivers\etc 配置我们本地dns域名解析。
www.mayikt.com 配置公网ip地址 刷新到电信运营
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111837.html