GUI应用程序的部署难,动态网站部署简单,广泛发布。
服务器用HTTP
(HyperText Transport Protocal)发送HTML
(HyperText Markup Language)给浏览器。
HTML有标签和属性
浏览器将HTML代码创建为网页并渲染到显示器上。
HTTP运行在TCP/IP之上。
TCP负责让被分快的文件在网络节点之间完整的传输
IP在下面让每一个文件块能在路由之间找到去往目的地的路。
HTTP会话的结构就是浏览器请求,服务器相应,如此反复。
request请求:HTTP,URL,参数
response响应:状态码,Content-Type(MIME),Content
HTTP是IETF标准,RFC 22616,Apache 是一个处理HTTP请求的服务器,Firefox是一个发送HTTP请求的浏览器。
一个HTTP响应有一个header,并携带了HTML数据。
HTTP请求有不同的方法,不同的方法表示不同的请求类型,和不同的消息格式,如 GET(用户点击新的网页链接)&POST(用户点击提交按钮).
GET只负责请求,POST不仅可以请求同时还能发送数据给服务器。
其他方法:HEAD,TRACE,PUT,DELETE,OPTIONS,CONNECT.
其实GET可以携带少量数据,用?
将路径和参数隔开,参数之间用&,形如/somepath.../demo.jsp?x=1&y=2&z=3
。
还得用POST的原因:
- 参数有限制,视服务器而定
- 明文
- 相对POST,GET不能将表单数据添加到书签
GET:请求=request line (参数在此
,name/value pair) + request header
POST:请求=request line + request header + message(payload)(参数在此
)
Response
- header :协议版本 HTTP/1.1,状态码200 OK,内容类型Content-Type …
- body:内容
GET 全过程:
输入URL->发送请求->服务器接受请求->找到资源->发送相应->浏览器接响应->渲染页面。
URL(Uniform Resource Locators)
Protocal+Server+Port+Path+Resource
http://www.wickedlysmart.com:80/beeradvice/slect/beer1.html
TCP 端口号(Port),一个16-bit的数字(0~65535),标识了一个运行在服务器硬件上的特定软件程序,而非物理插口。
协议 | 端口 |
---|---|
FTP | 21 |
Telnet | 23 |
SMTP | 25 |
Time | 37 |
HTTP | 80 |
POP3 | 110 |
HTTPS | 443 |
0~1023 TCP 端口为知名的服务保留,不能用于自定义的服务器程序。
使用不同协议的多个应用可以使用同一个端口。
所谓静态网页,就是存在目录里,等着被服务器交接给浏览器的网页,中途不做任何更改,每一个浏览器得到的网页都一样。
比如需要网页上显示当地时间,静态网页显然就做不到了。
Web Server App 只可以serve,不能在 serve 的东西上 do computation,但是服务器上的其他 App 可以。
故,可以将请求交给别的程序帮忙处理。
动态创建的页面(dynamically-created pages)意味着其在被 request
之前是不存在的。request来,程序创建网页,response回去。
光靠Web Server 不能完成:
- 动态内容
- 在服务器存储数据
web server 将请求参数交给 生成 response 的 app 来处理。
这些帮忙处理请求的 app 在没有 Java 的世界里,叫做 CGI
(Common Gateway Interface)程序。通常是 Perl 脚本写的,也可以是 C,Python, PHP.
请求来,web server app 接受,启动CGUI程序并将参数转给它,CGI程序构建一张新的网页交给web server app后关闭,web server app将网页返回给浏览器。
从web server app 的角度看,网页始终是静态的。
Perl | Servlet |
---|---|
语言晦涩 | Java流行 |
性能差 | 性能好 |
CORBA | J2EE |
Servlet 必须将所有内容print到HTTP response stream 中,为了不让 Java Class 塞满 HTML 和字符串变量(否则HTML中的回车换行和双引号会把人逼疯),于是有了JSP,将一些Java代码移动到HTML中,就像在HTML中插入了变量。(把Java放进HTML而不是反之)
JSP让Java 开发者不用写HTML了,但是会让网页设计师多写一点额外的“Java”,不是真的Java代码,而是JSP标记语言。
Bullet Point
- HTTP TCP/IP
- HTTP Request/Response
- GET/POST
- MIME
- URL
- Web Server , CGI
- Servlet/JSP