Top Banner
重重重重 Web 重重 Web 重重 重重重重重重重重重重 重重 Web 2.0 Promise 2008.09.26
24

Re Introduce Web Development

Jan 13, 2015

Download

Technology

finian lau

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Re Introduce Web Development

重新认识Web开发

Web之源客户端和服务器端技术杂谈Web 2.0

Promise2008.09.26

Page 2: Re Introduce Web Development

C/S形式的系统

Client/Server形式的系统,由客户机和主机组成,主机提供各种服务,客户机通过连接主机获取服务。常见的主要有:数据库编程, Socket编程

等,个人认为现在比较热的 B/S( Browser/Server)结构也是 C/S结构的一种特殊形式,只是 Client端应用程序是浏览器。 B/S带来的好处也是明显的:无须维护客户端应用程序,免去了维护和分发程序的成本。

B/S和 C/S的本质都是通过 Request-Response模型来维持两端的通信。

Page 3: Re Introduce Web Development

HTTP协议HTTP( Hypertext Transfer Protocol)

是由W3C(World Wide Web Consortium)和 ITEF( Internet Engineering Task Force)共同开发和维护的规范,目前最常用的是 HTTP 1.1,也就是 RFC 2616。

HTTP是一个 Request-Response规范,上面说过, C/S结构的系统也是基于 Request-Response模型,其实 B/S结构也就是这么出来的, B/S中的 Browser就是这么一个客户端,它利用 HTTP协议来于服务器交互。

HTTP中 Request的方法有:HEAD, GET, POST, PUT, DELETE,TRACE, OPTIONS, CONNECT,红色部分是最常见的。客户端和服务器端的一次交互举例:

Page 4: Re Introduce Web Development

客户端发出请求:GET /index.html HTTP/1.1Host: www.example.com

服务器端的响应如下:HTTP/1.1 200 OK

Date: Mon, 23 May 2005 22:38:34 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Etag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Content-Length: 438 Connection: close

Content-Type: text/html; charset=UTF-8

Page 5: Re Introduce Web Development

实验一: HEAD使用 telnet模拟客户端发出 Request获取

页面头部信息,也就是 HTTP里面的 HEAD:cmd > telnet www.fudan.edu.cn 80cmd > HEAD / HTTP/1.1 #这里敲打两次回车

服务器返回如下:HTTP/1.1 400 Bad RequestDate: Thu, 25 Sep 2008 15:35:12 GMTServer: Apache/2.0.52 (Trustix Secure Linux/Linux) PHP/4.3.10

Connection: closeContent-Type: text/html; charset=iso-8859-1

Page 6: Re Introduce Web Development

实验二: GET

同样,使用 Telnet来模拟客户端发出Request:

cmd > telnet www.g.cn 80cmd > GET webhp

服务器端就会返回 HTML代码,也就是Google的首页代码。当然,其中不包括图片信息,因为我们的 telnet只请求了获取一个HTML页面,而不是包括了 HTML页面中图片的所有信息。其中原理就是 Browser和 HTML的工作方式。

Page 7: Re Introduce Web Development

HTML语言

HTML( HyperText Markup Language)是W3C的一个标准,用来规范Web交互的语义,也就是 Browser和Web Server之间的语义。

HTML的出现,带来的一个好处就是链接,把一个个网页通过链接集合起来;第二个好处是把图、文、声、影嵌入到了同一个文档中,丰富多彩。

Page 8: Re Introduce Web Development

HTML基本结构

<html><head>

<title>Hello HTML</title></head><body>

<span>Hello World!</span></body>

</html>

Page 9: Re Introduce Web Development

浏览器的作用我们平时和Web Sites交互的时候都是通

过浏览器进行图形和文字化的交互,而不必理会HTML语言的细节。那是因为浏览器帮我们做

“ ”了 翻译 的工作。它的工作就是把这些 HTML语句转化为一个个图形图像和文字,也就是我们

“ ”所说的术语 渲染 。在上面的第二个 HTTP实验中,如果我们把

得到的响应写入到一个文件,比如 test.html,我们会发现如果用浏览器打开这个 test.html后只有文字,而没有图片,而且效果也没有直接用浏览器打开www.g.cn的效果好看。那是因为浏览器帮助我们做了幕后的工作:

下载 HTML中的图片、声音、视频、 Js代码、 CSS代码等文件,并把这些文件结合使用渲染最终效果。

Page 10: Re Introduce Web Development

客户端开发技术

这里说的客户端,指的是浏览器,其他自主开发的客户端不在此次讨论范围。目前客户端开发技术主要有:

SilverLight(M$)、 Flash(Adobe)、 Shockwave(Adobe's Director)、 DHTML、 AJAX、 Java Applet、 JavaFX。还有一个新发现的东东:Curl,我也没听说过,有时间可以研究下 :)

SilverLight是一个浏览器插件,可以使用 .NET框架对其进行编程,微软战略产品。

JavaFX是 Sun公司的战略性产品,出来不久,没用过,暂时不做评价。

Page 11: Re Introduce Web Development

DHTML

DHTML, Dynamic HTML,是利用现有Web表现层技术来进行客户端开发,其中涉及到HTML、 Javascript、 CSS、 DOM(Document Object Model)相关技术。

DHTML相比 HTML,具有更友好的用户界面,可以使得用户的操作更加便捷,如果说 HTML是实现了 B/S的可行性,那么 DHTML则是提高了 B/S的可用性。

给出一个例子:

Page 12: Re Introduce Web Development

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DHTML example</title> <script type="text/javascript"> function init() { myObj = document.getElementById("navigation"); // .... more code]] } window.onload=init; </script> </head> <body> <div id="navigation"></div> <pre> Often the code is stored in an external file; this is done by linking the file that contains the JavaScript. This is helpful when several pages use the same script: </pre> <script type="text/javascript" src="myjavascript.js"></script> </body></html>

Page 13: Re Introduce Web Development

AJAX

进几年来比较热的词, stands for: asynchronous JavaScript and XML.同 DHTML类似, AJAX也是利用了一些现

有的Web技术,从而提高了Web的可用性。AJAX的主要思想就是把用户操作和获取响

应异步,使得用户不需要时刻等待数据传送而可以继续操作。在 Javascript编程实现中最主要的是 XMLHttpRequest对象,此对象根据浏览器不同而具有不同的实现,就连有些同厂商的浏览器也会因为版本不同而具有不同XMLHttpRequest对象的实现,所以获取的时候需要判断浏览器类型。

Page 14: Re Introduce Web Development

获取 XMLHttpRequest对象

/* Create a new XMLHttpRequest object to talk to the Web server */var xmlHttp = false;

try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { xmlHttp = false; }}

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest();}

Page 15: Re Introduce Web Development

服务器端技术

服务器端要做的事情:

如果客户端请求的文件存在在磁盘上,那么就直接返回它;

如果客户端请求了一个命令程序,并且给定了参数,那么就执行那个程序,并返回运行结果。

Page 16: Re Introduce Web Development

直白的文件请求

对于第一种情况,比如请求一个静态的html文件,就像开头的第一个 HTTP实验,这样的请求Web服务器只要直接返回对应的 html文件即可,不需要在服务器端进行计算。此时的性能主要也就落在了磁盘 I/O上面。

第二种情况就是需要服务器端 CPU计算的技术,典型代表是 CGI, Java Servlet、WebService。

Page 17: Re Introduce Web Development

CGI

CGI(Common Gateway Interface)是一个标准协议,用来规然信息服务器 (一般就是WebServer)调用外部应用程序的规则。它规定了如何把服务器信息和请求发送给被调用的应用程序(用变量和环境变量实现 ),以及如何返回应用程序的运算结果和其他相关信息 (包括 HTTP的head信息等 )。任何符合 CGI规范的语言都可以用来编写服务器端程序,比如 UNIX/Linux的各种 Shell(bash等 ), Perl, PHP, Python……

Page 18: Re Introduce Web Development

CGI Bash Example

#!/bin/sh#One line of HTTP headecho Content-type: text/plain#One line for the Empty Contentecho ""# Do some Business Logic here# Output html response or othersecho "<html><body>Hello World!</body></html>"

Page 19: Re Introduce Web Development

CGI的不同实现

CGI有个缺点,就是启动程序的时候需要创建进程,如果每个请求都创建一个解释器的进程,那么效率将会非常低下,此时可以把解释器做成Web Server的一部分,在 Apache中采用模块方式,比如mod_python,mod_ruby,mod_php等,这样每次请求就不必都启动一个解释器的进程,也就提高了执行效率。

Page 20: Re Introduce Web Development

Java Servlet

Java Servlet是在 Java平台上的一种服务器端技术,是 Sun公司开发的一个规范,其中包括了Servlet 2.3(JSR 53),2.4,2.5(JSR 154)以及未来的 3.0(JSR 315)。由于 Java的平台无关性,所以 Servlet具有天生的夸平台特性WriteOnce-Run Everywhere。

Servlet需要在对应的容器中部署,由容器掌管它的生命周期。

JSP技术也是基于 Servlet的,不过是另外一套规范,为开发者提供了更友好的开发模式,一般都是结合 Servlet一起使用,以MVC2的模式开发应用系统。

Page 21: Re Introduce Web Development

Servlet Exampleimport java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); }}

Page 22: Re Introduce Web Development

Web Service

这个又是近两年来提出的一个 Hot-Word,被W3C定义为通过网络实现机器间互相操作的软件系统。

Page 23: Re Introduce Web Development

Web Service的实现方式Web Service的实现方式按照通信编码来分有三种: XML-RPC、 SOAP、 RESTful(最近出来的 )。

XML-RPC是 Remote Procedure Call,由特定格式的 XML描述,比如WSDL格式。

SOAP是基于 SOAP协议的Web Service,也就是 Simple Object Access Protocal协议。

RESTful(Representational state transfer )是充分利用了 HTTP协议 (GET,PUT,DELETE...)实现Web Service。

Page 24: Re Introduce Web Development

Web 2.0杂谈

SNS,Wiki, Blog这类应用都是在贯彻全民织网这个理念,Web 2.0技术还是这些技术,但是系统体现的主体性有所改变,从以往的集中式信息发布平台转变为个人用户信息发布平台。所以对于技术人员而言,Web 2.0和 1.0并未有太大的变化,只是技术的使用手法有所改变,而促使这些改变的,就是全民织网这个概念。围绕这个概念,用户体验之类的技术也会由此而生,从而使得富客户端技术能够飞速发展。