《java编程思想》读书笔记——第一章1.11java与网络编程(网络编程概念、客户端编程概念)

(1.10永久性由于无法查到相关资料,且书本本身只是提及了概念不另做为一章,对象的永久性指的是程序结束后,对象仍然得以保存下来的特性,但是这种效果本身可以将数据存入数据库来实现)

1.11java与网络编程

java本身只是一种新类型的程序设计语言,为何可以被赞誉为里程碑式的进步,其实有很大一部分原因来自于它还拥有可以支持网络编程的能力

1客户机/服务器计算(C/S模式)
其基本思想是——将信息在一台机器中统一存放,再根据其他机器发送过来的请求,将信息进行投递
客户机/服务器的核心思想在于,信息的集中化,由于信息在一处统一存放,因此,我们可以方便的进行信息的处理后,再将信息返还给信息的消费者
我们把信息仓库(数据库)、用于投递信息用的软件、信息本身、以及这台集中管理信息的机器统一叫做服务器
而那些安装在远程机器上,通过和服务器通信获取数据进行显示的软件,叫做客户端
原理上十分浅显易懂,但是实际上,我们要考虑设计的方面很多
1.单个服务器需要同时对大量客户端提供服务,需要一套足够优秀的数据库管理系统
2.可能会多个客户端对于服务器的数据发出修改或者新增请求,这使得需要保证这些新数据之间不能产生冲突——也就是所谓的事务处理
3.客户端更新不灵活,每次更新可能都会需要客户方机器需要重新安装一遍客户端
4.客户端需要做好不同机型之间的匹配
5.性能的问题——为了降低延迟,有些设计会需要客户端来承担一部分的计算

C/S模式在过去广泛应用在各类应用之中,但是其最大的问题在于——它总是需要一对一的去研发新的方案,且客户每次都需要对一个全新的客户端去重新使用适应界面

2.web是个巨大的服务器
网络自身其实就是个巨大的服务器,它接受浏览器提出的请求,返回它请求的网址,但是浏览器在最开始设计时,作为一个客户端功能显得十分贫乏
在最初的设计中,浏览器只是访问服务器,然后将服务器返回的媒体文件翻译显示给客户观看——浏览器最初只是希望作为一个查看工具,连最基础的程序的执行能力都没有——这在设计上原本是为了考虑到安全性而指定的
但是,非常明显,只是一个查看工具的程度会导致大量的业务需求无法满足,比如进行订单的下达等等,而且,如果把一切的计算都交给服务器,很有可能在你正在等待数秒钟的计算时间时才发现自己输错了数字
这一切使得我们开始需要在浏览器中运行程序,这种行为被称为——客户端编程——这是对服务器端编程的一种非常重要的扩展

1.11.1客户端编程

为了实现客户端编,我们引入了以下概念:

1.插件:

本质为浏览器的扩展代码,在需要时下载,直接插入于浏览器的代码之中

2.利用插件执行功能的代码段:

2.1脚本语言:

定义:
脚本语言是面向特定类型的语言,其主要目的是,创建出有特定功能,比如交互功能的图形用户界面(GUI),宗旨是尽可能的简化而快速
本质与加载方式:
包括最常见的JavaScript等,其存在形式,实际上是一些从属于html,或者说写在html里的一些代码,因此,在我们在向服务器发出访问页面的请求获取html时就可以完成这些代码的加载了
与之对应的,这些脚本的源码被完全暴露在公众视野下,但本质上,这些脚本语言并不会处理一些复杂的问题,或者说安全敏感性的功能并不会交给他们
总结:
一般来说,比起使用形式较为复杂的java作为解决方案,大部分的页面问题的编程首选项都是脚本语言

2.2java语言:

本质与加载方式:
通常在web浏览器中以**程序片(Applet)**的形式,也就是在web中运行的小程序的形式出现,打开html页面时,他们会像普通的图片一般被下载下来,然后通过用户的某些操作而激活运行,其编码器以插件的形式内置在浏览器之中
在这种形式下,每次用户都将 会自动下载最新的代码 而且 不需要像客户端一样进行额外的安装

优势:
1.比起脚本语言注重于GUI的显示,java是一种全功能的语言能够保证在浏览器这端尽可能的做好所要做的事,从而降低服务器与网络的负担
2.java的代码是一个已经编译完毕的代码片,而不是像js一样直接将源码暴露给他人
值得注意的是,编译好的程序片通常会包括多个模块,若一个一个进行下载,将会增加对服务器的访问次数——这种问题在jdk1.1提供了一个完美的答复——jar包文件,即我们所谓的打包

2.3ActiveX
由微软提供,是一种彻底的跨平台的方案——他不要求你使用某种固定的方案,包括C++、VB等等,是在web页面中使用遗留代码(诸如以前用于编写客户端的代码等)的最佳途径

3.安全

关于java程序片的形式——自动下载,然后直接运行,这对于病毒制作者简直是天大的利好,相对的:
脚本语言可做的事情有很大的限制——他们没有访问硬盘,控制文件的能力
java则是在一个隔离的沙盒中独立运行,在设计上,它们将封闭于applet程序片之中
而ActiveX不同,他的代码相当于一个普通的windows运行程序的效果——很有可能作为病毒的媒介(想学病毒这个必学啊哈哈)
而且即便是隔离运行的java,有时任然是需要执行一些在本地写入文件的操作的,特别的,因为有一些敏感数据的保存如果是线上的(比如账户密码)这将十分不现实
作为解决方案,目前被公众接受的方式是数字签名——由权威结构进行认证,并署下作者,因为病毒之所以产生的原因被认为这是因为作者匿名导致的,当然,若要较真,一个签了名的程序的确仍然可以做一些恶意的操作,但是如果事后你能找他算账,那么一般不会有人做这种蠢事。

4.内联网

众所周知,我们称全球公用的这个信息网络即因特网为互联网,然而当一个信息网络局限于一个公司或者说一个团体时,他就被成为内联网
从安全的角度来看,安全性最低的ActiveX似乎没什么用武之地,但是,明显的,在相对安全的内联网中,ActiveX所具备的兼容性将会发挥更大的优势

1.11.3 服务器编程

对于服务器来说,他一般会收到什么样的需求呢?
简单来说,一般收到的都是“把这些文件发送给我”的需求,浏览器会将返回的文件以适当的方式解释后交给客户,包括html页面、一张图片,一个视频或者一个Java程序片
当需求更加复杂后,我们往往需要对数据库进行操作,包括搜索(当然搜索也可以在本地的浏览器中交由脚本代码或者java程序片执行,甚至,这样速度更快而且还可以降低服务器的压力)注册或者下达订单时,可能就需要对数据库进行操作。
这类请求,将会需要通过服务器的一些代码来执行,我们称其为服务器端编程
基于java能完成十分复杂的业务需求,用java编程写出的服务器程序,叫做小服务器程序(servlet)

1.11.4一个独立的领域:应用程序

实际上,Java的早期应用多半止步于浏览器中的小程序片——这对于java来说是在受到了诸多限制的一个表现舞台,理论上,java适合任何场景的开发,当然任何语言都不是十全十美的,对于java来说其最明显的缺点是由其特性(包括在堆中存放对象和其GC机制等等)带来的运行速度较慢
原文此处是将java视为一个新生儿的态度进行评价的——当然这也是因为编写的时间较早,java发展至今,GC以及对象存放机制都充分的得到了革新(如之前提到的G1回收器),几乎在各种编程需求上,java都可以作为十分有价值的参考项

发布了21 篇原创文章 · 获赞 0 · 访问量 474

猜你喜欢

转载自blog.csdn.net/qq_41445205/article/details/104189849