Java编程思想学习笔记(三)

1.11异常处理:处理错误

异常是一种对象,他们从出错地点被抛出,并被专门设计用来处理特定类型的异常处理器捕获,异常处理是与程序正常执行路径并行的,是完全分离的执行路径,所以不会干扰到正常代码的执行过程。

异常不能被忽略,必须保证他一定会在某处得到处理,异常会提供一种从错误情况进行可靠恢复的路径,可以使程序重新正常正确地运行,而不仅仅是将程序直接退出。

Java的异常处理是内置的,并且必须使用,他是唯一的可接受的错误报告方式,若在编写程序时没有正确地编写处理异常的代码,那么在编译的时候就会报错。

1.12并发编程

并发和并行:并发是指在一段时间内“同时”做某件事,而并行则是之在一个时刻下,一件事被分做多个部分同时进行。

将这些独立运行的部分称作线程,Java的并发是内置与语言当中的,典型的例子是用户界面的编写,用户按下一个按钮,不必等到当前任务执行完毕之后才得到响应。JavaSE中提供了大量的额外库支持。

1.13Java网络编程

Java在众多编程语言中脱颖而出的一大原因就是能够解决在网络上进行程序设计的问题。

(1)客户端、服务器计算技术:

  客户/服务器系统的核心思想是:系统有一个中央信息存储池,用以存储某种类型的数据(通常存储在数据库中),根据某种需要,讲这些数据分发给其他的某些人员或者计算机。这个存储数据以及相应处理软件的机器就被成为服务器,用户机器上的软件和服务器进行通信,来获取并处理信息,最后显示在被称为客户机的用户机器上。

  这个问题的关键在于服务器只有一个(一般情况下),但是却要同时为数量远大于服务器数量的用户服务。这首先涉及到的就是数据的存储,也就是数据库的管理问题,程序的设计者需要将数据均衡地存放于不同的数据库表中来获得最佳的效果;其次,在大多数的应用场景下,还需要允许用户在数据库中插入、修改或者删除信息(例如网站用户的注册和注销),这就意味着必须保证一个客户插入的新数据不会将之前用户的数据覆盖掉,数据也不能在从网页到数据库的过程中丢失或者被修改,这个过程被称为事务处理

  若客户端软件发生变化,那么他必须被重新编译调试并安装到用户机器上(也就是平时的软件更新的过程。实际上这种更新往往是费力的,若是需要满足不同类型计算机的需求,那么就会更加麻烦(mac和windows为例)。

  再者,任何小的延迟都会对服务的提供和接收产生影响,为了将网络延迟造成的影响最小化,程序员需要尽量减轻处理任务的负载,通常是分散给客户端机器处理,有时候也会通过中间件将负载分散给服务器端的其他机器(负载均衡)。

(2)Web就是一台巨型服务器:

  Web实际上就是一个巨大的客户/服务器系统,但是所有的客户机和服务器都在同一个网络之中。我们需要关注的是在某一时刻怎么连接到我们想要链接到的服务器上,而不是这个系统到底有多么大。

  一开始的信息传递仅仅是简单的单向过程:客户端对服务器发出一个请求,服务器接受请求之后返还给客户端一个文件,客户机的浏览器软件根据本地机器的格式来解析这个文件,最后显示在你的屏幕上。

  但是,随着需求的增多,人们希望能够在客户端和服务器之间不仅仅单向传输文件,而是完整地实现双向的传输功能(双工)。

  Web浏览器的进步意义在于:一段信息不经修改就可以在任意型号的计算机上显示出来,但是一开始的浏览器并不具备完整的交互性,也就是说,只要是涉及到编程相关的任务,都需要将信息发送到服务器去处理(例如数据库数据查询),这时的浏览器只能被单纯地称作是信息的表示工具(观察器)。为了解决这种问题,就需要接下来的客户端编程

(3)客户端编程

  最初的服务器-浏览器设计是为了提供交互性的内容,但是这种交互性完全由服务器提供,服务器产生一个静态页面,将它提供给浏览器展示,在这个静态的页面中(往往是HTML)含有一些数据收集机制(各种框),这些收集到的数据通过提交按钮上传给服务器,这种提交动作通过所有Web服务器都提供的通用网关接口(CGI)来传递。

  大部分网站都是构建于CGI之上,但似乎这些网站可能会迅速变得复杂(网页需要展示的东西越来越多,越来越复杂)而难以维护,还伴随着响应时间过长的问题。CGI程序的响应时间取决于必须发送的数据量的大小以及服务器的负载,CGI程序的启动也相当慢。

  解决办法是客户端编程,大多数运行Web浏览器的机器都是可以执行大型任务的强有力的引擎,在之前的静态HTML模式下,这些引擎闲置。客户端编程意味着Web浏览器可以用来执行他可以完成的任意工作,将这些闲置的引擎利用起来,进而提高网站的交互性。

  (i)插件(plug-in):通过这种方式程序员可以下载一段代码,将其插入到浏览器的适当位置,以此来为浏览器增加新的功能。插件不只是可以插在浏览器中,也可以添加到服务器中来增加更快更强大的服务。插件对客户端编程的意义在于:允许专家级的程序员不经过浏览器生产厂商的许可就开发某种语言扩展,并将它们添加到服务器当中,也就是提供了一个后门,来创建新的客户端编程语言;

  (ii)脚本语言(scripting language):插件引发了浏览器脚本语言的开发,通过某种脚本语言,可以将客户端程序的源代码直接嵌入到HTML页面中去,在浏览器解析这个页面时,脚本会被激活。脚本语言的优点是便于理解,他们本身就只是HTML页面中的一段简单的文字,但是相应的缺点就是容易直接被人窃取一些重要的信息,由于一般不会将比较重要而复杂的事情托付给脚本,所以这个缺点并不是很明显。

  JavaScript是一种不需要Web浏览器任何插件就可以运行的脚本语言,但是大多数浏览器支持JS的方式各有不同(甚至同一浏览器的不同版本的支持方式都会不同)。

  在HTML页面中使用的脚本通常用来解决“创建更丰富、更有交互性的GUI界面”这类问题,是一种相较于Java更简便、更轻量级的方式;

  (iii)Java:如果说脚本语言可以解决百分之八十的客户端编程问题,那么剩下的百分之二十,Java是最流行的解决方案。Java通过applet和Java Web Start来进行客户端编程。

  applet是只在Web浏览器中运行的小程序,作为网页的一部分被自动下载。当applet被激活时,他便开始执行一段程序,也就是说,applet提供的是分发软件的方法,用户需要客户端软件,我便从服务器将客户端软件分发给用户,用户获取到最新版本的客户端软件不会产生错误,也不需要很麻烦地安装。这样,只要一台计算机有浏览器,并且这个浏览器内置有Java的解释器,那么这个程序就可以在太计算机上自动运行,这就使得客户端也有了一定的处理能力(比如简单地检查请求表单的填写是否有错误数据,不必再发到服务器之后再检查),从而大大降低了服务器端的不必要的压力。

 

2021.2.1下午上传

读到P54

 

posted @ 2021-02-01 15:49  aLieb  阅读(76)  评论(0编辑  收藏  举报