公告:欢迎来到HongFei.Sun的轻博客

网络状态码

发布于:2020-03-27 07:00:51

HTTP 错误 400

由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。

  • HTTP 错误 401

    • 401.1 未授权:登录失败
      此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。
      请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。

    • 401.2 未授权:服务器的配置导致登录失败
      此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。此错误通常由未发送正确的 WWW 验证表头字段所致。
      请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限。

    • 401.3 未授权:由于资源中的 ACL 而未授权
      此错误表明客户所传输的证书没有对服务器中特定资源的访问权限。此资源可能是客户机中的地址行所列出的网页或文件,也可能是处理客户机中的地址行所列出的文件所需服务器上的其他文件。
      请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。

    • 401.4 未授权:授权服务被筛选程序拒绝
      此错误表明 Web 服务器已经安装了筛选程序,用以验证连接到服务器的用户。此筛选程序拒绝连接到此服务器的真品证书的访问。
      请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限。

    • 401.5 未授权:ISAPI/CGI 应用程序的授权失败
      此错误表明试图使用的 Web服务器中的地址已经安装了 ISAPI 或 CGI程序,在继续之前用以验证用户的证书。此程序拒绝用来连接到服务器的真品证书的访问。
      请记录试图访问的完整地址,并与 Web服务器的管理员联系以确认您是否具有访问所请求资源的权限

  • HTTP 错误 403

    • 403.1 禁止:禁止执行访问
      如果从并不允许执行程序的目录中执行 CGI、ISAPI或其他执行程序就可能引起此错误。
      如果问题依然存在,请与 Web 服务器的管理员联系。
    • 403.2 禁止:禁止读取访问
      如果没有可用的默认网页或未启用此目录的目录浏览,或者试图显示驻留在只标记为执行或脚本权限的目录中的HTML 页时就会导致此错误。
      如果问题依然存在,请与 Web 服务器的管理员联系。
    • 403.3 禁止:禁止写访问
      如果试图上载或修改不允许写访问的目录中的文件,就会导致此问题。
      如果问题依然存在,请与 Web服务器的管理员联系。
      403.4 禁止:需要 SSL
      此错误表明试图访问的网页受安全套接字层(SSL)的保护。要查看,必须在试图访问的地址前输入https:// 以启用 SSL。
      如果问题依然存在,请与 Web服务器的管理员联系。
      403.5 禁止:需要 SSL 128
      此错误消息表明您试图访问的资源受 128位的安全套接字层(SSL)保护。要查看此资源,需要有支持此SSL 层的浏览器。
      请确认浏览器是否支持 128 位 SSL安全性。如果支持,就与 Web服务器的管理员联系,并报告问题。
      403.6 禁止:拒绝 IP 地址
      如果服务器含有不允许访问此站点的 IP地址列表,并且您正使用的 IP地址在此列表中,就会导致此问题。
      如果问题依然存在,请与 Web服务器的管理员联系。
      403.7 禁止:需要用户证书
      当试图访问的资源要求浏览器具有服务器可识别的用户安全套接字层(SSL)证书时就会导致此问题。可用来验证您是否为此资源的合法用户。
      请与 Web服务器的管理员联系以获取有效的用户证书。
      403.8 禁止:禁止站点访问
      如果 Web服务器不为请求提供服务,或您没有连接到此站点的权限时,就会导致此问题。
      请与 Web 服务器的管理员联系。
      403.9 禁止访问:所连接的用户太多
      如果 Web太忙并且由于流量过大而无法处理您的请求时就会导致此问题。请稍后再次连接。
      如果问题依然存在,请与 Web 服务器的管理员联系。
      403.10 禁止访问:配置无效
      此时 Web 服务器的配置存在问题。
      如果问题依然存在,请与 Web服务器的管理员联系。
      403.11 禁止访问:密码已更改
      在身份验证的过程中如果用户输入错误的密码,就会导致此错误。请刷新网页并重试。
      如果问题依然存在,请与 Web服务器的管理员联系。
      403.12 禁止访问:映射程序拒绝访问
      拒绝用户证书试图访问此 Web 站点。
      请与站点管理员联系以建立用户证书权限。如果必要,也可以更改用户证书并重试。
  • HTTP 错误 404

    • 404 找不到
      Web 服务器找不到您所请求的文件或脚本。请检查URL 以确保路径正确。
      如果问题依然存在,请与服务器的管理员联系。
  • HTTP 错误 405

    • 405 不允许此方法
      对于请求所标识的资源,不允许使用请求行中所指定的方法。请确保为所请求的资源设置了正确的 MIME 类型。
      如果问题依然存在,请与服务器的管理员联系。
  • HTTP 错误 406
    406 不可接受
    根据此请求中所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体。
    如果问题依然存在,请与服务器的管理员联系。

  • HTTP 错误 407

    • 407 需要代理身份验证
      在可为此请求提供服务之前,您必须验证此代理服务器。请登录到代理服务器,然后重试。
      如果问题依然存在,请与 Web 服务器的管理员联系。
  • HTTP 错误 412

    • 412 前提条件失败
      在服务器上测试前提条件时,部分请求标题字段中所给定的前提条件估计为FALSE。客户机将前提条件放置在当前资源 metainformation(标题字段数据)中,以防止所请求的方法被误用到其他资源。
      如果问题依然存在,请与 Web 服务器的管理员联系。
  • HTTP 错误 414
    414 Request-URI 太长
    Request-URL太长,服务器拒绝服务此请求。仅在下列条件下才有可能发生此条件:
    客户机错误地将 POST 请求转换为具有较长的查询信息的 GET 请求。
    客户机遇到了重定向问题(例如,指向自身的后缀的重定向前缀)。
    服务器正遭受试图利用某些服务器(将固定长度的缓冲区用于读取或执行 Request-URI)中的安全性漏洞的客户干扰。
    如果问题依然存在,请与 Web 服务器的管理员联系。

  • HTTP 错误 500

    • 500 服务器的内部错误
      Web 服务器不能执行此请求。请稍后重试此请求。
      如果问题依然存在,请与 Web服务器的管理员联系。
  • HTTP 错误 501
    501 未实现
    Web 服务器不支持实现此请求所需的功能。请检查URL 中的错误,如果问题依然存在,请与 Web服务器的管理员联系。

  • HTTP 错误 502
    502 网关出错
    当用作网关或代理时,服务器将从试图实现此请求时所访问的upstream 服务器中接收无效的响应。
    如果问题依然存在,请与 Web服务器的管理员联系。

.....

uml

发布于:2020-03-26 04:58:05

面向对象技术概述

面向对象的基本建模原则:抽象、封装、继承和分类。

面向对象的基本软件工程:OOA(面向对象的分析)、OOD(面向对象的设计)、OOP(面向对象的编程)和 OOSM(面向对象的软件维护)

对象的概念是:对问题域中某个实体的抽象;类的概念是:对具有项目属性和行为的一个或多个对象的描述

属性的定义:描述对象静态特征的数据项;服务的定义:描述对象的动态特征(行为)的一个操作序列。

类的定义要包括:名称、属性和操作三要素。

面向对象呈现设计的三大特性:封装、继承和多态。

面向对象的系统分析要确立 3 个系统模型是对象模型、功能模型和动态模型。

用例图

参与者

参与者是指系统以外的、需要使用系统或与系统交互的外部实体,包括人、设备、外部系统等。

用例

用例是对一个活动者使用系统的一项功能时所进行的交互过程的一个文字描述序列。可以说,软件开发的过程是用例驱动的。

用例是对系统行为的动态描述,属于 UML 的动态建模部分。UML 中的建模机制包括静态建模动态建模两部分,其中静态建模机制包括类图、对象图、构件图和部署图;动态建模机制包括用例图、顺序图、协作图、状态图和活动图。

理论上可以把一个软件系统的所有用例都画出来,但实际开发过程中,进行用例分析时只需把那些重要的、交互过程复杂的用例找出来。不要试图把所有的需求都以用例的方式表示出来。需求有两种基本形式:功能性需求和非功能性需求。用例描述的只是功能性方面的需求,那些难以用 UML 表示的需求很多是非功能性需求。

泛化关系

官方解释:泛化代表一般的与特殊的关系,在用例之间的泛化关系中,子用例继承了父用例的行为和含义,子用例也可以增加新的行为和含义或覆盖父用例中的行为和含义。

PJ 的解释:子类和父类的关系。

包含关系

官方解释:包含关系指的是两个用例之间的关系,其中一个用例(基本用例)的行为包含了另一个用例(包含用例)的行为。

PJ 的解释:把某一个功能进行重用。

【例 1】银行的 ATM 系统中,有 “存款”、“取款”、“账户余额查询” 和 “转账” 四个用例,都要求用户必须登录了 ATM 机。也就是说,它们都包含了用户登录系统的行为。因此,用户登录系统的行为是这些用例中相同的动作,可以将它提取出来,单独的作为一个包含用例。

“存款”、“取款”、“查询用户余额” 和 “转账” 是基本用例,“登录” 是包含用例,如下图所示:

由于将共同的用户登录系统行为提取出来,“存款”、“取款”、“查询用户余额” 和 “转账” 四个基本用例都不再含有用户登录系统的行为。

【例 2】网上购物系统,当注册会员在线购物时,网上购物系统需要对顾客的信用卡进行检查,检查输入的信用卡号是否有效,信用卡是否有足够的资金进行支付。

上图中有没有必要将检查信用的行为提取出来,单独构成一个用例(作为包含用例),当信用检查的行为只发生在 “在线购物” 活动中时,可以不用提取出来。当信用检查的行为还发生在其它活动中时,应该提取出来,以便实现软件重用。

拓展关系

官方解释:在拓展关系中,对于拓展用例的执行有更多的规则限制,基本用例必须声明若干个 “拓展点”,而拓展用例只能在这些拓展点上增加新的行为和含义。

PJ 的解释:基本用例在满足一定条件后可进行选择执行拓展用例。

【例 3】图书借阅系统。当读者还书时,如果借书时间超期,则需要缴纳一定的滞纳金,作为罚款。

综合

【例 4】 网上购物系统,当注册会员浏览网站时,他可能临时决定购买商品,当他决定购买商品后,就必须将商品放进购物车,然后下订单。

如果网上购物系统的需求改为了:注册会员即可以直接在线购物,又可以浏览商品后临时决定在线购物,则可以改为下图所示:

用例描述

没有描述的用例就像是一本书的目录,人们只知道该目录的标题,但并不知道该目录的具体内容是什么,仅用图形符号表示的用例本身并不能提供该用例所具备的全部信息,必须通过文本的方式描述该用例的完整功能。实际上,用例的描述才是用例的主要部分,是后续的交互图分析和类图分析必不可少的部分。

用例描述了参与者和软件系统进行交互时,系统所执行的一系列动作序列,因此这些动作序列应该包含正常使用的各种动作序列(主事件流),而且还包含对非正常使用时软件系统的动作序列(子事件流)。

【例 1】 在银行 ATM 系统的 ATM 机上 “取款” 用例一个简单用例描述可以采取如下格式

描述项 说明
用例名称 取款。
用例描述 在储户账户有足够金额的情况下,为储户提供现金,并从储户账户中减去所取金额。
参与者 储户。
前置条件 储户正确登录系统。
后置条件 储户账户余额被调整。
主事件流 (1)储户在主界面选择 “取款” 选项,开始用例(这个词的出现很重要)。(2)ATM 机提示储户输入欲取金额。(3)储户输入欲取金额。(4)ATM 确认该储户账户是否有足够的金额。如果金额不够,则执行子事件流 b 。如果与主机连接有问题,则执行异常事件流 e。(5)ATM 机从储户帐号中减去所取金额。(6)ATM 机向储户提供要取的现金。(7)ATM 机打印取款凭证。(8)进入主界面。ATM 机提供以下选项:存款、取款、查询和转账。用例结束(这个词的出现同样很重要)。
子事件流 b b1. 提示储户余额不够。b2. 返回主界面,等待储户重新选择选项。
异常事件流 e e1. 提示储户主机连接不上。e2. 系统自动关闭,退出储户银行卡,用例结束。

一个复杂用例主要体现在基本操作流程和可选操作流程的步骤和分之过多,此时,可以采用 “场景(或称脚本)” 的技术来描述用例,而不是用大量的分之和附属流来描述用例。

用例建模

用例模型主要应用在需求分析时使用。

步骤

  • 找出系统外部的参与者和外部系统,确定系统的边界和范围;
  • 确定每一个参与者所期望的系统行为,参与者对系统的基本业务需求;
  • 把这些系统行为作为基本用例
  • 区分用例的优先级;
  • 细化用例。使用泛化、包含、拓展等关系进行处理;
  • 编写每个用例的用例描述;
  • 绘制用例图;
  • 编写项目词汇表。

确定系统边界

系统边界是指系统与系统之间的界限。系统可以认为是一系列的相互作用的元素形成的具有特定功能的有机整体。不属于这个有机整体的部分可以认为是外部系统。因此系统边界定义了油谁或什么参与者来使用系统,系统能够为参与者提供什么特定服务。系统边界决定了参与者

【例 1】在一个仅为交易客户提供买卖基金的基金交易系统中,参与者为交易客户,交易客户能够操作的系统功能有买入基金和卖出基金。因此,系统有两个用例:买入基金和卖出基金。

进一步分析发现,基金的品种应该存在与该系统中,否则交易客户无法进行基金的买卖。但系统已存的两个用例都不能完成基金品种的管理,所以可以确认基金品种的管理应该在别的系统中完成。

所以,我们需要开发这个系统,仅存在两个用例:买入基金、卖出基金。

【例 2】对例 1 做个调整。在一个既提供基金买卖又提供基金品种录入的基金交易系统中,交易客户,能够进行基金的买入和卖出。因为还需要对基金品种进行管理(录入、修改、删除和查询),由基金公司员工进行操作。所以该系统的参与者有交易客户和基金公司员工。系统边界可以改为下图所示:

如何确定参与者

  • 谁将使用系统的主要功能?
  • 谁将需要系统的支持来完成她们的日常工作?
  • 谁将必须维护、管理和确保系统正常工作?
  • 谁将给系统提供信息、使用信息和维护信息?
  • 系统需要处理哪些硬件设备?
  • 系统使用外部资源吗?
  • 系统需要与其他系统交互吗?
  • 谁对系统产生的结果感兴趣?

需要注意的问题:

  • 只要是参与者,对于子系统而言都是外部的;
  • 参与者直接与系统进行交互;
  • 参与者指的与系统直接交互时所扮演的角色,而不是特定的人或事物。比如,不是 PJ 与教务系统产生交互而是学生与教务系统产生交互;

如何确定用例

识别用例可以从列出的参与者列表中从头开始寻找,考虑每个参与者如何使用系统,需要系统提供什么样的服务。

  • 参与者要向系统请求什么功能?
  • 每个参与者的特定任务是什么?
  • 参与者需要读取、创建、撤销、修改和存储系统的某些信息吗?
  • 参与者是否有需要通知系统的事件?系统是否有需要通知参与者的事件?
  • 这些事件代表了哪些功能?
  • 系统需要哪些输入输出功能?
  • 是否所有的功能需求都被用例使用了?

需要注意以下问题:

  • 每个用例至少有一个参与者;
  • 每个参与者至少一个用例;
  • 如果存在没有参与者的用例,再三检查后,还是没有参与者,可以考虑把该用例并入其他用例中;
  • 如果存在没有用例的参与者,再三检查后,该参与者还是没有用例,可以考虑该参与者是如何与系统产生交互的,或由该参与者确定一个新的用例,或实际上该参与者本身就是多余的。

项目词汇表

这什么鬼,没见过,没听说过......

其他问题

需求应该有层次的组织

系统的高层需求一版用不超过 12 个左右的用例进行表示,在其下的层次中,用例的数量不应超过当前用例的 5~10 倍。可以将用例划分为业务用例系统用例组件用例等。

不要从用例直接推导设计

用例应该描述参与者使用系统所遵循的顺序,但用例绝不说明系统内部采用什么步骤来响应参与者的刺激。

用例包

用例模型的调整

如果两个用例总是以同样的顺序被激活,可能需要将它们合并为一个用例。

不要过于详细

在进行用例描述时还没有考虑系统的设计方案,那么也不会涉及用户界面。

优秀的人遵守规则,顶尖的人创造规则

.....

PHP 中 static 静态属性和静态方法的调用

发布于:2020-03-26 04:58:06


这里分析了 php 面向对象中 static 静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。

示例

<?php header("content-type:text/html;charset=utf-8"); class Human{ static public $name = "妹子"; public $height = 180; public $age; // 构造方法 public function __construct(){ $this->age = "Corwien"; // 测试调用静态方法时,不会执行构造方法,只有实例化对象时才会触发构造函数,输出下面的内容。 echo __LINE__,__FILE__,'<br>'; } static public function tell(){ echo self::$name;//静态方法调用静态属性,使用self关键词 //echo $this->height;//错。静态方法不能调用非静态属性 //因为 $this代表实例化对象,而这里是类,不知道 $this 代表哪个对象 } public function say(){ echo self::$name . "我说话了"; //普通方法调用静态属性,同样使用self关键词 echo $this->height; } } $p1 = new Human(); $p1->say(); $p1->tell();//对象可以访问静态方法 echo $p1::$name;//对象访问静态属性。不能这么访问$p1->name //因为静态属性的内存位置不在对象里 Human::say();//错。say()方法有$this时出错;没有$this时能出结果 //但php5.4以上会提示 /* 
 调用类的静态函数时不会自动调用类的构造函数。
测试方法,在各个函数里分别写上下面的代码 echo __LINE__,__FILE__,'<br>'; 
根据输出的内容,就知道调用顺序了。
*/ // 调用静态方法,不会执行构造方法,只有实例化对象时才会触发构造函数,输出构造方法里的内容。 Human::tell(); ?>

总结

(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为 "类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php 里,一个方法被 self:: 后,它就自动转变为静态方法;
(5)、调用类的静态函数时不会自动调用类的构造函数。

.....