先普及用户经过 浏览器 访问网页 的过程:
网页内容是经过服务器运算得出的结果,将结果(网页代码)传输给浏览器,网页代码再经过浏览器运算(计算、渲染),最终展现在用户的眼前的。
至此,咱们知道了有2个运算过程:
一、服务器运算
二、浏览器运算
而让电脑(网站服务器、你的我的电脑)乖乖执行运算,就须要编写程序脚本即程序代码。
而编写代码的过程就叫作:编程。编写代码的人叫作:程序员(又戏称:程序猿、攻城狮)。
因此,由运算演变出:
一、服务器运算 -> 服务器脚本
二、浏览器运算 -> 浏览器脚本
在行业内,将 服务器运算 称为 后端;将浏览器运算 称为 前端;
后端更靠近服务器,前段更靠近用户,这样比较好记忆。php
如下是我近期在学习了解网站开发结构时的一份记录,看到本题就想贴出来,供你们一块儿参考和纠错,至于文笔和格式,就不要太关注了...毕竟只是一份简单的记录。
本文原文连接:网站开发从陌生到了解
正文:
内容说明本记录描述本人了解网站开发的心路历程。
只记录我的对于网站知识结构的理解认知,还未涉及开发的具体知识。
本记录没法告诉你如何去作网站开发,可是或许能够告诉你要作网站开发都须要作什么事。
本记录内容为三不产品:
不完整:仅记录我当前的知道的内容;不许确:仅记录我对于当前知道的内容的理解,不能保证正确;不详细:及时是我可以正确理解的内容,也不能保证详细的描述。本记录的目的:
记录:记录和整理我认知网站知识的过程;完善:吸取专家对我记录的内容的指正和详细说明;互助:帮助小白(含本身)理解网站结构。适合的读者本记录适合对网站开发一窍不通的初学者认知网站基本结构和概念、学习网站开发如何入门,不适合对追求技术深度的大神。css
本记录初衷是我的学习记录,如下是我的发牢骚的部分,没兴趣的能够直接跳过:
----------------------------------------------------------------------------------------------------
背景
本记录的起源,来自我想作一个小网站的念想,却无奈本身悟性太差,参悟了几年的web编程,面对大量知识点,依然无从下手。具体过程以下:
大量全新名词在接触网站开发之处,个人眼前首先面对的是大量的新名词:
如JS、Html、JSP、Java、Tomcat、CSS、XML、servlet、PHP、CGI、框架、前端、服务器、http……
请忽略以上名词的杂乱无章……由于这是此时个人脑海真实写照……
杂乱网络结构看着上面那一堆名词,我实在无从下手,思考了大约1秒钟,我决定先放弃具体知识的学习,转而先搜索网站开发的结构体系,而后准备从体系中入手逐个技术点的学习,因而,我获得如下开发结构体系:
LAMP组合拳、DIV+CSS+JS前端+JQuery技术、J2EE开发、各类模板组件……
甚至有些论坛直接就为争论哪一个语言好,就打起来了……
总之,看了这么多建议,我内心一阵清凉,以为原来那些零散的知识点,组合成了一个个巨无霸,更加难理解了……
迷茫中尝试此时我不止一次怀疑过本身的智商,为何网上的同胞们都那么轻松的聊着那么复杂的内容,而我却连大家给个人某个技术的解释的解释的解释都看不懂。
在这个迷茫阶段,我选择了不抵抗,决定先不去搞清每一个部分是作什么用的,直接选择人家设计好的架构,用就好了,原本设计那些架构就是为了方便咱们的嘛。
因而,我架起了一个个不一样的网站,看似一切良好,可是......这些网站全都停留在“hello world”的状态!对于我本身的想法,彻底不知道怎么去实现...
一怒入坑网络大量信息对于像我同样网络开发白痴的如此“友好性”。
想简单偷个懒直接使用现成架构,却被本身的无知无情的戏谑。
一怒之下,我决定将全部名词所有认识一遍,而后逐个归类,本身概括出整个网络开发结构。全面的了解作网站须要学哪部分知识,为何须要这部分知识,要实现什么功能须要什么工具,使用工具时须要配置哪些内容等。
因而,就出现了下面这一堆误人误己的,自认为是整个网络开发结构认知的一篇记录。
无论怎样,有了如下或对或错的认识,自我感受良好多了,心中的迷茫也少多了,感受本身的白痴级别下降了一级,心情也好多了。
如下是本篇记录的正文,请根据以上背景,酌情考虑是否适合你观看。
观看本记录出现的不良反应,本人概不负责。固然,若是对你产生了正面效果,我也不会打劫你。
正文:网站开发结构认知
网站,对于不少用户而言,可能认为眼前浏览器中的东西就是网站的所有。其实,那只是冰山一角。
———————————————————————————————————————————
跳过———————————————————————————————————————————
如下好像是正文:
网站基本结构首先,咱们来认识一下网站的结构,看看本身在什么位置,看看咱们还不知道的冰山下层有什么景象。
html
以上是一个最简单的概念,用户、前端和网站服务器三大部分,构成的网站最基本结构。
其中开发人员要关心的就是前端和网站服务器的相关开发。
固然,对用户而言,其脑海中对前端的概念一般简单的理解为浏览器...
网站前端接下来,咱们来拆解一下前端开发的结构。前端经常使用的开发语言和运行环境以下表所示。
前端
要知道前端是网站和用户交互的主要接口,用户不须要管服务器是否靠谱,只须要任性的要求前端给本身展现本身要的东西就好了。这些用户要的东西就是有这几种开发语言写出来的。
HTML 超文本标记语言 1989一种文本、图片、连接等多元素编辑语言。
经过这种语言以网站页面为编辑区域,任意指定页面具备哪些元素,包括文字、图片、多媒体等。
并任意指定不一样元素在页面的基本格式。如文字字体、大小、位置,图片大小、位置,连接颜色、状态变化等等。
这种语言利用标签标记,将多种不一样类别的元素、甚至不一样位置的文件关联在一块儿,所以叫作超文本标记语言。
而且经过定义元素的属性,设置元素的格式,最终造成总体页面效果,这种语言能够利用多种文本编辑工具编辑,例如记事本。只需扩展名修改成.html或.htm便可(这两种扩展名不是简单的缩写关系,详细本文不讨论)造成HTML文件。
HTML5就是HTML语言的最新标准,这种标准制定使页面能够表现的内容更增强大(至于具体如何强大,我不知道,目前我只知道HTML5是用来定义页面内容的就足够了)。
好像HTML5标准相关的两大的权威机构W3C和WHATWG之间对这个标准的细节肯定存在巨大分歧,W3C背后有微软支持,而WHATWG背后有Mozilla、apple等公司的支持,这部分会涉及到网页程序和原生APP之间的纠缠,太过复杂,本文就不细说了。
最初的HTML只含有较少的元素属性,只能简单规定元素的基本格式,随着网站开发的发展,前端能够展示的元素格式愈来愈丰富,代码也愈来愈臃肿。所以逐渐造成了另外一种新的语言CSS,将HTML语言中描述各元素属性的代码从HTML文件中抽离出来,使HTML专门描述前端页面具备什么内容,CSS语言编写的CSS文件专门描述HTML中的每一个元素以什么格式在页面展现。
css 层叠样式表 1996
CSS专门用于描述HTML中各元素用什么样式展现。HTML+CSS组合完成页面内容和格式的设计。
不少人喜欢使用HTML中的一种标签格式来规定页面内容,再利用CSS规定DIV标签在页面摆放格式造成页面布局,所以不少网站会提到DIV+CSS前端开发这个概念。
CSS主要实现了页面内容的静态布局效果。虽然目前的CSS3标准的出现,使CSS强大到能够实现不少元素动态变化效果。
可是,更复杂的动态变化仍是须要另外一种专门的语言来实现,这就是JS语言。
JavaScript 脚本语言 简称JS
js语言当前广泛被用于网站开发前端编程,在html提供的内容和css提供的格式以外,由js提供更复杂的界面展现效果和逻辑处理。在此存在不少能够直接使用的代码库,如jQuery等。
js语言能够实现对页面元素的复杂功能编程,例如页面的时钟数字变化效果,图片的走马灯轮换效果,粒子动画效果等。
也就是咱们常常看到的炫目的页面动画基本都是js语言编写的。
除了能够看到的动态效果以外,js还能够实现用户看不到页面数据处理工做。例如数据加解密、文字过滤分析等。
这些内容都须要编码实现。
以上的html、css、js文件都会下载到用户的终端设备(计算机、手机、平板灯)上,在用户设备上被执行,所以,咱们称它们在前端运行,这里的“前”是与后台服务器的“后”相对而言的。
脚本语言
上文提到js是一种脚本语言,此处插播一下脚本语言的概念。
脚本语言是一种逐句执行的直译语言,也就是这种语言不须要提早编译,直接由终端(如浏览器)解释运行便可。
脚本语言与其余编程语言的关键区别在因而否须要通过编译连接造成二进制机器语言。
咱们知道,其余编程语言完成程序编写后,须要经过编译器的工做,将程序代码转变成二进制形式,windows系统中一般是.exe文件,这种文件能够直接在相应的操做系统中运行。
而脚本语言不须要编译,写完代码保存文件以后,便可当即运行。要实现这种效果须要提早在须要运行该脚本文件的系统中安装相应的脚本软件。
以JS为例,其脚本文件后缀为.js,要运行该脚本文件,须要运行环境中安装js软件。
一般咱们的浏览器中已经集成了js解析标准,直接能够解析js脚本文件,所以,js脚本语言一般被用做前端页面特殊效果的编程语言。
固然,只要具备js的解释环境(js软件)就能够运行js文件,所以js并非局限于前端开发。随着node.js等运行环境的出现,js语言逐渐适用于服务器端、客户端等多种场景。
关于一种语言是否适合某种场景,这取决于这种语言的最主要的特性是否适合该场景最须要功能,属于技术细节,本文不作分析.
同属于脚本语言的还有,PHP/ASP/JSP/python/ruby/VBScript/Perl等.
--------------------------------迷茫的分割线--------------------------------------
到目前为止,我好像理解了前端语言的概念(谁知道有多少错误),可是前端的本质对于用户而言并非那么友好,如下是构成前端内容的html代码示例,css和js的代码也相似。
java
就这种内容,我表示前端用户彻底看不懂啊!
因而咱们就须要一个翻译,给咱们解析一下这花花世界的各类html页面说的都是些什么东西。
所以,普通用户要看到前端页面内容和操做前端页面都须要经过一个翻译载体,即浏览器来实现。
浏览器
浏览器就是对HTML+CSS+JS文件内容进行翻译,并容许用户经过页面与网站进行交互的一种软件。
前面提到的那一堆前端名词都是开发语言,是语言就具备统一的标准,所以,这些语言都有惟一的严格的标准文档可查询。
可是,浏览器就没有严格规定了。只要实现了对以上前端语言的翻译功能,就能够成为网页浏览器。
所以也就产生了各类不一样的内核,以及采用不一样内核开发的浏览器。
虽然这些内核的目的都是为了解析(翻译)前端语言造成可视化页面,可是因为设计理念等细节的差别性,致使不一样的内核体现出不一样的特性,例若有的访问速度快、有的扩展性强、有的大而全、有的小而美等等。
浏览器的开发团队和内核的开发团队不必定是一个团队。
例如webkit、chromium等开源内核,其余开发团队或厂商在遵照开源规则的状况下,能够自由使用这些内核,进行二次开发,加上本身的外壳、标志等,造成本身品牌的浏览器,因为开发能力等缘由的差别性,而这些浏览器也不可避免的存在各自的优缺点,也就造成咱们选择浏览器的理由。
当前主流的浏览器内核以下:
node
上表中仅列出部分产品,其中也存在多种双内核产品,chromium源自Webkit,可是相对原版的Webkit产生了较大的“基因突变”,所以与Webkit并排列出。
表中包含了不少咱们平常使用的浏览器,也就是经过这些浏览器,对前端语言写成的文件进行解析,在浏览器中以友好的可视页面的形式展现给用户。
此时就可能出现,页面乱码或错误等状况,多是前端语言编写错误,也多是浏览器内核对前端语言的解析出错,固然也多是网站服务器端出现了问题。
在说服务器端的功能以前,插播几个前端相关的小知识点:
xml/json
xml是可扩展标记语言,一般用于传输和储存数据,类似的还有json.
前端和服务器之间一般须要一种双方都承认的格式进行数据的传递和存储。
.xml/json或其余格式指定了数据内容的存储格式,使用该数据的双方只需按照规定的格式写入/读出内容便可完成数据的传输和存储.
以json为例,其基本格式为:{标题:内容},根据这个格式,后台从json文件中读出须要的内容,例如{我是标题:我是要被读出的内容},并按照这种格式发送给前端,前端经过js等语言对这些内容进行解析便可。
前端的一些配置信息,如用户登陆名称、性别、网页底色等信息均可以暂存在xml/json文件中,根据须要随时读取.
服务器后台也可将前端须要的数据内容,以xml/json的格式发送给前端,达到数据交互的目的。
AJAX (Asynchronous Javascript And XML) 异步JavaScript和XML
这不是一个全新的技术,而是利用已有的js/css/xml等技术达到前端数据及时更新的效果.
对用户而言,前端页面的刷新就是点击页面刷新按钮 或者F5实现页面内容的刷新。
甚至有不少人不知道页面刷新这个概念……
页面刷新的目的是让页面重新从服务器获取数据,一般是在页面长时间未更新数据,至于多长时间算长,没有定论,几分钟、半小时、n小时均可以说是长时间。
例如,门户网站的新闻列表,可能1个小时以内,服务器后台已增长了不少条新的新闻,前端能够经过刷新,重新获取最新的新闻展现在页面上。
再如,网页文字直播NBA篮球比赛,可能后台服务器每几秒就会有一条新的动态,须要用户连续刷新页面内容来获取最新动态。
以上的刷新方法是用户手动对整个页面内容进行刷新,针对以上的需求,明显是不合理的,AJAX就是实现了自动更新须要刷新的数据的效果。
其基本思路是前端js与后台不断通信,及时获取前端某部分数据的变化信息,及时进行自动数据获取更新,使用户无需刷新网页便可保持页面数据最新的状态。例如,球赛文字直播、股票实时信息等。
文档对象模型(Document Object Model,简称DOM)
DOM是一种独立的规范。
浏览器做为前端的展现工具,按照DOM规范将页面划分为不一样层次结构,造成多个可操做的对象。例如,window对象、history对象、link对象等。
window对象就是用户看到的页面、history对象就是浏览历史、link对象就是连接等。
例如弹出警告对话框的操做就能够经过window对象实现。
按照这种规范便可直接经过编程操做html页面的各类元素,控制其显示/隐藏等效果。
js中也提供了符合该规范的api函数接口。经过js能够动态操做页面元素的状态。
以上就是对前端的基本认识。有了以上的内容就能够造成前端页面了。我就奇怪了,既然这样就能显示页面,要后台干什么。
通过我“深刻”思考,终于明白,若是只有前端,没有后台,你的页面就像一份报纸、一本杂志,内容是固定的,不会“更新”,除非你再买一本新的;有了后台,就能够给前端源源不断输送新鲜的内容,让前端充满活力。
通信协议
在讲后台以前,咱们要考虑一个问题,前端怎么向后台发送请求,总不会是“SOS”吧;后台又如何相应请求并返还前端须要的内容。
这就须要双方按照预先协商好的格式(咱们称之为协议,就好像接头暗号同样),发送数据内容。若是双方不按照协议发送信息,则对方就没法知道信息究竟是什么内容,就没法进行交流,俗称“不按套路出牌”。
如下几个概念介绍前端和服务器之间通信的相关知识点。
域名 (Domain) 和域名服务器 (DNS)
咱们访问网页时一般会在地址栏输入相似论坛 - 与世界分享你的知识、经验和看法这样的网站地址(或者经过搜索跳转),地址栏中的这种地址就是网站的域名,经过这个域名别人就能够找到这个网站。
为何须要域名话说一开始的时候,并无域名的概念,要连接到服务器,只须要知道服务器的IP地址就能够了。例如,在地址栏直接输入60.28.215.70就能够直接访问论坛网站了。
关于IP相关的网络知识,内容太大,本文不深刻描述。
后来,网站愈来愈多,谁能记住这么多没有规律的IP地址啊,因而聪明爱折腾的人们发明了有规律有意义的域名。好比,http://www.qq.com,www.Lenovo.com.cn,这种内容比纯数字就好记多了。
域名和IP地址是对应的,归根结底,虽然咱们在浏览器输入的是域名,也会经过相应手段解析成IP地址,进而肯定咱们要访问的网页在网络中的位置。
毕竟,虽然咱们认识域名,可是计算机认识的确是IP地址。
那么,咱们输入的域名由谁来解析呢?这就是DNS的工做了,其做用就是将域名翻译成IP地址,返回给咱们。能够简单的认为,每一个DNS中存放“一张大表”,其中每一行都是一个IP地址对应一个或多个域名。
全世界各地分布着大量不一样级别的DNS,帮咱们进行域名和IP之间的解析工做。其中最高级别的DNS有13个,以大写英文字母A~M命名,分布于世界几个主要的城市。
若是你的计算机没法链接到DNS,或者链接到错误的DNS,则没法经过域名访问网页。
为何不少人能够上qq,却不能打开网页,就是由于网页须要域名解析,而qq直接经过IP地址与服务器交互,无需解析。
此时,若是在浏览器直接输入IP地址,就能够访问网页。
域名的格式以联想的官网http://www.Lenovo.com.cn为例进行介绍。
域名分为4个级别,以符号.做为分隔符。从左至右,级别递增。
最右侧,表示国家。如例子中.cn,表示中国,即该域名为中国域名。其余,如美国.us,日本.jp等。右数第二位,表示网站类别。如例子中.com,表示"商业化",其余,如.org表示"非盈利机构",.edu表示"教育机构"等.左数第二位,表示企业或组织。如例子中的.Lenovo,表示"联想公司"。其余,如.Facebook,.apple分别表示该公司.左数第一位,表示业务类型.如例子中的www表示该页面为用户提供基本web服务,如今一般做为网站首页使用.其余,如mail表示该页面提供邮箱服务等.
最后2级域名内容是能够自定义的,当前不少人也不会去经过域名去了解页面内容了,更可能是经过连接跳转到达指定页面,页面连接的用途更可能是给开发人员识别页面用了.
咱们常常提到的域名注册,就是这东西。我们选好域名,把钱(或者免费)交给DNS管理公司/机构,DNS上就有咱们选的域名和IP了,别人就能够访问咱们的网站了。
所谓备案,是将域名/IP信息在公安系统登记,后期你作了错事,人家好找你。。。
URL (统一资源定位符)
上面介绍了域名的概念,咱们知道前端如何定位服务器的地址,那么定位服务器地址以后,前端如何定位服务器中的某个内容呢?即用户在页面点击某文章连接,后台怎么知道你要的是哪篇文章呢?
这仅仅经过域名是没法解决的,在域名以后,还须要加上具体的文章代号,造成完整的访问要求,这就是URL.示例若是论坛放到武侠世界会被提问什么问题? - 电影,域名后面加上要访问的问题和答案序号,服务器就知道应该把什么内容反馈给前端了.
好的,有了URL,我们就要说到本节开头提到的通信协议了.也就是前端有了URL按照什么格式将其发给后台,后台有了内容按照什么格式反馈给前端.
http/https
在访问网站时,咱们常常会在URL以前看到http://这种前缀,这就是前端指定要给后台发送数据时使用的协议格式,此处用的就是http协议.
除了http协议,还有https、ftp、smtp等一系列不一样的协议,分别用于不一样的场合。
http是超文本传输协议,能够传输文字、图片、多媒体等多种格式内容,适用于网页,smtp更适合邮件的收发。
总之,前端和后台使用相应的协议,双方才能够通信,不然,双方对不上暗号,就没法交互了。
接下来,继续分析后台内容,想要进一步被我误导的,请继续往下看~
网站后台接下来,咱们来拆解一下后台服务器开发的结构。网站后台常见的组成结构和相关开发语言或工具以下表所示。
python
网站后台开发目前而言是百家争鸣,各类语言、多种框架互相角逐,争论不休。
本记录当前不会参与那种高深的讨论,本记录只来讲一下后台都有哪些东西,至于具体怎么选,之后再说……
反向代理服务(web server)
首先,说一下web server。
服务器端,须要接收前端访问请求,根据请求类型分发给指定模块进行处理,并完成将处理结果返回给前端的工做,这就是反向代理,也就是web server,例如Nginx/Apache等.
web server自己不作网站内容的解析和生成工做,重点在于处理复杂的网络请求,应对海量的网络链接。起到后台与前端之间搭建网络桥梁的做用,经过通信协议,与前端进行数据交互,而数据来源,由后台其余处理程序和数据库等提供。
web server的独立,使后台处理程序只需专一每一个请求的细节处理,而无需关注请求的来去和排队管理等机制.对网站开发人员而言,也大大减小了工做量。
web server做为前端后台之间的衔接工具而存在,其中只有与开发项目相关的部分配置信息,并不存在咱们编写的数据处理程序内容,所以能够根据项目须要(性能)随时更换代理,固然,这种随时更换可能存在代价.
web server可使用Nginx/Apache/tomcat/IIS/lighttpd等现成的工具,也可利用node.js等平台添加模块本身造成知足本身要求的代理工具,甚至本身动手从头开发也能够,彻底依据本身喜爱和水平.
对于我这种菜鸟,就直接选择Nginx得了.毕竟,我编写代码的水平还不足以达到讨论哪一个代理优秀的程度,更不用说本身写代理了,这点自知之明我仍是有的.
cgi/fastcgi 通信接口
web server接收到前端请求以后,须要将这些请求的内容分发给具体的处理程序进行数据处理。与前端和后台之间的通信协议类似,此处二者之间也须要定义双方的通信协议。毕竟,web server种类那么多,后台处理程序的种类也那么多,不统一交流暗号,怎么进行交互呢。
cgi就是早期的双方交互协议,称之为通用网关接口。
web server接收到前端请求以后,按照cgi的规则将数据进行整理后发送给后台处理程序,后台处理程序接受到数据以后,按照cgi的规则进行解析/处理,而后再次按照cgi规则将处理好的数据返回给web server,完成交互.
固然,目前来看cgi存在不少不足,所以出现了fastcgi等改进版,这就须要咱们在web server和后台处理程序上分别配置通信方式,使二者统一,就能够完成双方的通信了。例如,Apache配置为fastCGI模式,php安装插件如php-fpm或php-cgi,双方就能够通信了。
这种配置过程可能很复杂,除了知道这些知识以外,还要考虑服务器的系统(windows or linux等)是否支持某插件安装等。
如何配置就不在本记录讨论范围了,这里只要知道须要配置这些东西和为何须要配置这些东西就能够了。
这里能够提一下python这个语言,由于其不像PHP同样,它不支持fastcgi接口,而是支持wsgi接口。
所以,咱们须要一个中间工具,如flup一边接受来自web server的fastcgi格式的数据,另外一边经过wsgi与python处理程序进行交互,达到交互效果。
平台/引擎/运行环境
在编程语言发展初期,几乎每一个功能都须要从新编码实现,相同的工做在不一样的人手中重复着一样的事情,而且只有高级开发人员可以掌握高深的编码知识.
慢慢的,你们意识到这一点,随之开发人员将编码中核心部分和常常重复利用的部分抽离出来,作成一个个模块/库等形式,最终封装成一个个开发平台.例如前面提到的node.js,以及常常见到的.net等.
开发平台中集成了大量核心或者常常被用到的功能,不须要新的开发人员重复开发,只须要安装开发平台,并在本身的代码中调用平台提供的功能便可.这也是为何咱们安装不少软件的时候,老是提醒咱们安装.net平台,由于这些软件调用了.net平台中提供的功能.
开发平台在必定程度上强化了某些语言的功能,例如node.js.原本js语言适合于前端应用开发(此时js采用了浏览器内置的解释功能),node.js对js语言高效的解释效果取代了原有js解释器的工做,使js语言能够应对服务器端的需求,即node.js平台强化了js语言的功能.
固然,开发平台具有何种功能,与对应的语言并无直接关系;开发平台利用何种语言编写,与对应的语言也没有直接关系.仍是以node.js为例,其采用的是c++语言编写,并非js语言,所以它才能强化js语言原来没有的功能.
相似开发平台还有移动端的CM.游戏开发类的各类引擎其实也可算做开发平台这种形式.
框架
服务器后台存在多种多样的框架.例如java的SSH/python的django、web.py等等.
框架将大量须要重复的编码工做实如今框架中,减小二次开发的复杂度,这点与平台有点相似。
框架与平台的不一样在于:
框架实现了完成该功能的总体架构搭建,例如网站后台框架就实现了各类session会话处理等机制,只需开发人员在总体架构预留的自定义空隙添加我的代码,与框架互补造成完整的网站后台;
平台实现了具体细节处理代码的编写,并无实现总体的功能,须要开发人员本身利用平台中提供的零件组装完整的功能.
平台就像一个大零件箱,里面有各类型号的小零件,是最基本的组件。
框架是一个大功能的骨架,能够借助某些平台提供的小零件进行开发。
框架中非公共部分,也就是网站个性化功能实现的部分,就是开发人员下一步须要本身实现的后台处理程序了。
框架每每和后台处理程序选择的语言相关,也就是说框架一般是针对某种语言而开发的,用于减轻该种语言开发网站的复杂度.
服务端后台程序
服务端后台程序就是对前端发起的具体请求进行个性化处理的最终场所。
例如,前端向后端发起登陆要求,后台程序是否容许对方登陆就彻底看开发人员的心情了(--!)。
这部份内容每每须要访问服务端的数据库资料、配置文件、程序算法处理等工做,能够选择多种可以完成这类工做的编程语言完成这些功能。
例如常见的PHP/JSP/ASP/Python/Ruby等。
这部分也就是咱们常常见到讨论最火热的部分,论不一样语言之间的优劣。仍是那句话,对一个白痴菜鸟而言,任何一个流行的语言的设计思路均可以碾压我大脑那一点点可怜的编程知识,所以,抓阄吧骚年,不要再纠结了。惟一的选择标准应该是该语言可否实现咱们的须要,彻底不须要考虑性能、复杂度(还没开始干就考虑安逸了?不客气的说,就算你选了一个最简单的语言,你都不知道它哪里简单!也就是说,它最大的优势你已经感觉不到了,那种感受,确定很爽)
选了某种语言以后,就能够选择用哪一种框架了.
此时,问题出现了,还记得web服务器与后台程序之间通信用的cgi么?
当咱们选择了web服务器工具和后台开发语言以后,忽然发现这二者可能不支持统一的通信协议!
例如,web服务器只提供cgi插件,然后台开发语言不支持cgi.
咋办?
以python为例,支持wsgi,所以咱们须要给python一个翻译,像flup这种工具/插件什么的,能够将web服务器的cgi格式与python的wsgi格式进行互相转换,达到通信的目的.
开发工具 (编辑软件/IDE)
所谓开发工具,就是适合于某种开发语言的编辑/管理等方面的工具软件。例如,咱们编写文本文档经常使用notepad、ue、sublime text等,咱们作幻灯片可能会用ppt、Keynote等。这就是适合该种“语言”的开发工具。
以VS/Eclipse为例,他们风格方面存在区别,但都属于IDE(Integrated Development Environment,集成开发环境),也就是这一个软件中集成了编辑功能、编译功能、文件管理功能、项目管理功能,甚至集成了不少插件、模板等内容。拥有这种IDE环境,基本不须要额外的工具,便可完成整个开发过程。
固然IDE集成具备便利性也就存在自身的缺点,例如IDE软件自身体型庞大,一个VS软件动辄几G大小;IDE对于新手而言存在大量用不到的功能,或者出现莫名其妙的问题后新手也摸不着头脑.
这里不深刻分析其优缺点,仅仅使你们了解什么是IDE便可,至于如何选择,这里就无论啦.
数据库
每个网站上面可能含有大量的数据内容,包括文字、图片、多媒体等,须要按照必定的格式存储在一个地方,在咱们经过网页访问这些内容时,能够快速的调用。
数据库就实现了这种功能,咱们能够把一堆乱七八糟的东西按照设计好的规则扔进数据库,而后根据须要读写就能够了。
数据库种类不少,有Oracle、SqlServer、MySQL、DB2等,固然到底用不用数据库软件也要看开发人员的心情,你非要新建一个文件夹,把各类东西存在里面管理,谁也管不着。
选了数据库以后,这里又出现一样的问题,如何通信。
咱们知道,数据库是经过后台的程序进行操做的,那么,咱们的后台程序如何操做数据库呢,这两个东西直接语言互通么?
这里就要引出下一节的SQL语言概念了。
SQL
SQL语言是专门用来解决各类不一样的编程语言和不一样的数据库之间进行通信的结构化查询语言.
任何编程语言均可使用SQL语言来操做任何支持SQL语言的数据库.
也就是不管使用c/java仍是python,只要使用"select"这一SQL语言保留字,就能够从指定的数据库中筛选数据.具体SQL语言怎么写,本身去查书了.
固然,这种便利性须要两方面的支持,第一是编程语言提供SQL支持,第二是数据库支持.
庆幸的是,现在绝大部分的编程语言和数据库都很好的支持了SQL语言.
为了进一步使数据库的操做变得简单,不一样的语言又存在更便利的封装.例如JDBC/hibernate等,为java语言操做数据库提供了更便捷的API和框架支持.
使开发者更加傻瓜式的不须要深刻了解数据库原理,就能够轻松的利用数据库管理数据.
服务器设备
最后说一句,什么是服务器,成天听到这东西,到底是什么。答:它就是一台外表不一样的计算机。总体结构和家用计算机基本同样,只是根据服务器需求的不一样,多配个网口、强化一下CPU等等。
若是对服务器性能要求不高,随便一台家用计算机均可以当作服务器使用,只要计算机上安装了以上提到的这一堆服务器端须要的架构,接入网络能被访问,就能够称做是一台服务器。
安装了web server程序的就是web server服务器,安装了Oracle的就是数据库服务器,安装了应用软件的就是应用服务器,安装了杀毒软件、防火墙等的就是安全服务器,只是个名字而已。
服务器的位置能够在你家中、能够在机房、也能够是网络上的计算机(虚拟主机)。
web services
这东西不是一个单独的软件,而是一个总体的服务系统。
从名字能够了解到,这是经过web网络来实现用户服务的一套系统。
例如,邮件系统web services,就须要实现用户经过该系统能够收发邮件处理邮件内容等功能,这一系列功能须要web server、应用服务器、数据库服务器、安全服务器构成完整的功能架构来支撑功能的实现。
所以,web services是一个较大的应用角度的服务概念,而不是单纯的技术角度的概念。
最后贴上网站总体概念图
linux
其中,红色部分是须要咱们去学习掌握的语言,须要利用这些语言实现网站先后台功能;蓝色部分是咱们能够利用的辅助工具、软件架构,只须要了解用法,进行适当配置,使其在合适的位置发挥功能便可。
c++
其中,红色部分是须要咱们去学习掌握的语言,须要利用这些语言实现网站先后台功能;蓝色部分是咱们能够利用的辅助工具、软件架构,只须要了解用法,进行适当配置,使其在合适的位置发挥功能便可。
固然,本文和上图并无列出所有语言、框架等知识,未列出的知识点请自行定位其用途~
程序员
好吧,至此,我须要了解的内容也差很少了,也不知道哪些对哪些错。 若是你看到这篇内容,必定要抱着怀疑的态度去理解,看到你认为能够的部分,必定要告诉我,极可能你就是对的~ 若是这篇文字对你有帮助,别忘了给我说一下,让我虚荣一下~ 接下来,我就要开始用实践去验证啦。 若是有可能,我再作实践的记录,哈哈~