学习Web先了解这几个知识点:资源、URI/URL、HTTP协议、Servlet/JSP、MVC模式

资源

当我们打开凤凰网,打开淘宝网,打开爱奇艺,打开抖音,打开我们喜爱的站点时,那五彩缤纷、色声俱全的页面就呈现在我们的眼前,那是篇精彩的文章,这是个唯美的图片,这个大片不错,......,不过对于因特网来说,这些都被统称为资源。最简单直接的资源就是存储在Web服务器文件系统中的静态文件,这些文件类型丰富:文本文件、HTML文件、Word文件、PDF文件、JPEG图片文件、MP3音频文件、MP4视频文件等等。除了这些静态的文件,资源还可以是各种能够动态生成内容的软件程序。这些动态内容可以是新闻系统发布的新闻,可以是电商平台的订单,可以是办公系统中的员工考勤信息,可以是生活中的各种短视频,等等。

 

在因特网上提供资源的机器(宿主机)我们称之为服务器,请求服务器获取资源的电脑、手机等设备我们称之为客户端。

 

 

 

 

URI与URL

URI全称是Uniform Resource Identifier,中文称为统一资源标识符,它是一个通用的概念,用于标识网络上的一项资源。URI有两个子集,一个是URL,另一个是URN。URL全称是Uniform Resource Location,中文名称为统一资源定位符,它是通过描述资源的位置来标识网络上的资源的。URN目前还不常用,试图通过一个名称来标识网络资源,而不考虑其当前所处的位置。URL我们用的最多,大部分场景下我们把URI和URL不加区分地视为同一个。

 

URL的完整格式由如下几个部分构成:

<scheme>://<user>:<password>@<host>:<port>/path;<params>?<query>#<fragment>
  • scheme,指定访问服务器以获取资源时要使用哪种协议(如:http、https、ftp)
  • user,有些scheme需要认证,user指定认证账号
  • password,指定认证密码
  • host,资源所在宿主机的IP地址或域名
  • port,端口号,资源宿主机正在监听的有效端口号,Servlet容器默认的端口号是8080(http默认端口号是80,可省略)
  • path,资源在服务器上的名称,用“/”与其前面的host:port进行分隔,如https://login.taobao.com/member/login.jhtml中的“/member/login.jhtml”
  • params,键值对形式的输入参数,他们相互之间及与URL其他部分之间用";"分隔
  • query,查询字符串,跟在问号(?)后面,“name=value”格式,多个用&分隔,如https://chaoshi.tmall.com/?targetPage=index&spm=a21bo.2017.201859.3.5af911d9SyqjTA
  • fragment,片段,用于定位页面中的某部分内容,格式:#片段名称,如https://docs.influxdata.com/influxdb/v1.7/administration/config/#configuration-overview中的“#configuration-overvie”

 

对于Web应用程序,我们最常用的的URL格式其实是这样的(中括号表示可选):

<scheme>://<host>[:<port>][/context-path][/resource-path][?query-string]
  • ·context-path,表示应用上下文路径,在Java Web中,它代表着某个web应用,它是访问该web程序的根路径,有时我们会把上下文路径设置空("")或“/”,这时URL上可以省略上下文路径(绑定同一地址和端口的同一个web服务器上,只允许一个应用把应用上下文设置为空或者“/”)
  • resource-path,表示web应用下的资源路径,如Servlet的URL映射路径或者JSP页面在web应用下的路径,

举个例子,假设我们开发了个OA项目,该项目部署在域名为mydomain.com、端口号为8088的Tomcat中,上下文路径设置为“/oa”,登录的Servlet映射路径为“/login”(资源路径),那么,该项目登录的完整路径是:http://mydomain.com:8088/oa/login。

 

 

 

HTTP协议

我们知道,人与人之间,没有共同语言是无法沟通的,你讲英语,我讲中文,我用手比了个OK手势,你说是“30”,我说是这意思,你说是那个意思,都不知道对方说什么,最后就不欢而散。网络也一样,客户端发出请求,服务端做出响应,得有一套事先约定好的交互规则,否则客户端请求了,服务端“傻傻的”不知道客户端要请求什么,或者服务端响应了,客户端却不知道如何解析响应的结果,成功失败也不晓得怎么判断,这样我们就不能打开淘宝网了。所以互联网上客户端、服务端交互也必须有一套彼此都懂的共同语言,HTTP协议就是其中之一(还有ftp、telnet、mailto等),它是因特网上使用最广泛的网络传输协议。HTTP全称是HyperText Transfer Protocol(超文本传输协议),它定义了一套完整的的请求、响应消息格式,通过遵循HTTP协议,客户端、服务端就可以顺利地进行交互了。

 

基于HTTP交互的信息被称为报文,报文是由多行数据构成的字符串文本。报文分为请求报文和响应报文,而报文本身则由报文首部和报文主体构成。

请求报文格式

响应报文格式

 

客户端请求服务端,必定有它的意图,或者获取资源,或者修改资源,或者删除资源。在HTTP协议中,通过请求方法来表示这一行为。在请求报文的请求行中指定请求方法(及其请求的资源地址和协议版本)。常见请求方法如下表。

 

在服务端响应给客户端的报文中,有一个状态行,状态行除了表述了当前的协议及其版本外,还有个状态码及其对应的文本描述,告诉客户端它的请求是成还是失败,或者是其他状态。下表是一些常见的状态码。

网络上的资源丰富多彩,HTTP协议对传输中的各种资源在报文首部通过Content-Type字段来声明其类型,这个类型称之为MIME类型。MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间用一条斜杠来分隔,比如“text/html”,表示html格式的文本文档。下面是一些常见的MIME类型。

例子

 

Servlet和JSP

首先要说明一点的是,存储在服务器上的资源,有静态的,也有动态的,静态的就是事前就创建好放在服务器上了,请求来了直接加载返回给客户端,类似于快餐,早就做好放着了,顾客一来立马端出上桌。动态的正好相反,事前并不需要提前创建好,而是根据客户端的请求(根据传递的参数)或者默认规则动态生成,类似于根据来客的个人口味或常规做法现做现卖。

 

Servlet,就是用于动态生成资源的特殊Java类,Servlet不但动态生成资源,还负责接受客户端的请求,处理请求,最后做出响应。发展到后来,Servlet就不负责生成动态内容了,主要负责接受请求、处理请求和响应请求,而动态生成页面内容的工作则交给了JSP。JSP全称是JavaServer Pages,Java服务端页面技术,主要由Java脚本、HTML标记组成,这样Servlet处理完请求后,把数据交给(选择视图)JSP,JSP结合HTML标记和Java脚本动态地生成一份HTML文档,最后返回给客户端。

 

其实JSP是在Servlet规范的基础上扩展出来的Java Web组件,在底层它最终会编译成一个Servlet,只是这类Servlet专门来处理视图的相关工作,如获取模型的数据进行渲染。

 

Servlet、JSP必须运行在实现了Servlet/JSP技术规范的Web服务器上,如Tomcat,这类型的Web服务器又称为Servlet/JSP容器。Servlet/JSP容器是真正接受请求、做出响应的主体,它把客户端的请求封装在HttpServetRequest对象中,调用Servlet时作为参数传入;Servlet/JSP容器还会创建HttpServletResponse对象,同样以参数的方式传递给Servlet,把Servlet的运行结果封装在HttpServletResponse对象中,最后响应给客户端。

 

 

 

 

MVC模式

说到模式,其实是一种被实践证明了的、行之有效的解决某一类问题的方式或者方法,比如“中国模式”。

 

在软件开发上,也有不少的模式,MVC模式是其中之一。MVC分别是Model、View和Controller的首字母,即模型、视图和控制器,它是程序设计上的一种模式,它把程序从结构上划分为模型、视图、控制器,这样的好处是,模型负责数据的表述和业务的处理,视图则负责以既定的格式把数据渲染出来,这样模型和视图分离,相同的模型可以应用到不同的视图上,提高了模型的可重用性,因为模型、视图各司其职,程序的修改和扩展也就变得简单方便,从而又提高了程序的可维护性。

 

模型一般不会主动去选择视图,视图也不会去做业务逻辑相关的工作,它们之间由控制器进行协调。 控制器接受到请求,调用模型进行业务处理,然后根据请求和业务规则选择视图,把业务处理的结果(即数据,模型的一部分)交个给视图,最后视图按照既定的格式(如HTML)把数据返回给客户端,展示给用户。

 

在Java Web中,Model由JavaBean担当(就是实现业务逻辑或封装数据的Java类),JSP负责视图的工作,Servlet则作为控制器。

 

564129293874106368.png

 

来源:https://www.spreadk.com/articles/564766109803352064 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值