Web 应用程序概述

2.2 HTTP协议
2.2.1概述
协议:计算机所之间相互通信的规则
HTTP协议:用于从WWW服务器传输超文本到本地浏览器的传送协议。
HTTP协议的版本:
HTTP1.0/1.1:图示

说明:
蓝色标识建立、断开连接
桔色标识请求响应
2.2.2 HTTP URL
格式:


说明:
1) http:标识要通过HTTP协议来定位网络资源
2) host:合法的Internet主机域名或IP地址
3) port:指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP连接,默认80
4) abs_path:指定请求资源的URI

2.2.3 HTTP请求
请求包含三部分内容:请求行,消息包头和请求正文
2.2.3.1请求行

说明:
1) Method:标识请求的方法
A. GET:
获取由Request-RUI所标识的资源信息
常见的用get方法获取资源的方式:
1) 通过地址栏输入网址访问网页
2) 点击超级链接
B. POST
用于向目标服务器发出请求,要求服务器接受附加在请求后面的数据。
常见的POST方法:
2) Request-URI 请求的统一资源标识符;要请求的资源
3) HTTP-Version 请求的HTTP协议版本
4) CRLF:回车换行
2.2.3.2 消息报头
消息报头分为普通报头、请求报头、响应报头、和实体报头。每个报头域都是由名字+”:”+空格+值组成,小子报头域的名字是大小写无关的。
1) 普通报头:
在普通报头中,有少数报头域应用于所有的请求和响应消息,但并不用于被传输的实体,这些报头域只用于传输的消息。
常用的普通报头域:Cache-Control,Date,Connection,Pragma.
2) 请求报头:
请求报头允许客户端向服务器端传递该请求的附加信息以及客户端自身的信息。
常用的请求报头域:
Accept
Accept请求报头域用语指定客户端接受哪些类型的信息。例如:Accept: image/gif,表明客户端希望接受GIF图象格式的资源;Accept: text/html,表明客户端希望接受html文本。
Accept-Charset
Accept-Charset请求报头域用于指定客户端接受的字符集。例如:Accept-Charset: ios-8859-1,gb2312。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
Accept-Encoding
Accept-Encoding请求报头域类似Accept,但是它是用于指定可接受的内容编码。例如:Accept-Encoding: gzip,deflate。如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可接受。
Accept-Language
Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。例如:Accept-Language: zh-cn。如果请求消息中没有设置这个域,服务器假定客户端对各种语言都可接受。
Authorization
Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要服务器对其进行验证。
Host
Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常是从HTTP URL中提取出来的。
例如:http://www.sunxin.org/index.html。浏览器发送的请求消息中,就会包含Host请求报头域,如下:Host: www.sunxin.org
后面没有跟端口号,表明使用的是缺省端口号80,如果端口号不是80,那么就要在主机名后面加上一个冒号(":"),然后接上端口号,例如:
Host: www.sunxin.org:8080。 要注意的是,在发送HTTP请求的时候,这个报头域是必须的。
User-Agent
User-Agent允许客户端将它的操作系统浏览器和其他属性告诉服务器。我们上网登陆论坛的时候,往往看到些欢迎信息,其中列出了你的操作系统的名称 和版本等等信息。原因是:服务器从User-Agent请求报头域中获取的这些信息,自己编写浏览器可以不用这个请求报头域。服务器就无法得知了。
2) 响应报头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
常用的响应报头域:
Location
Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务 器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源。当我们在JSP中使用重定向语句的时候,服务器 端向客户端发回的响应报头中,就会有Location响应报头域。下面是Location响应报头域的一个例子:Location: http://www.sunxin.org
Server
Server响应报头域包含了服务器用来处理请求的软件信息。它和User-Agent请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户 端软件(浏览器)和操作系统的信息。下面是Server响应报头域的一个例子:Server: Apache-Coyote/1.1
WWW-Authenticate
WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,这个报头域和前面讲到的Authorization请求报头域是 相关的,当客户端收到401响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了 Authorization报头域的请求,下面是WWW-Authenticate响应报头域的一个例子:WWW-Authenticate: Basic realm="Basic Auth Test!"
从这个响应报头域,可以知道服务器端对我们所请求的资源采用的是基本验证机制。

3) 实体报头
请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,大多数情况下,实体正文就是请求消息中的请求正文或者响应消息中的响应正 文。但是在发送时,并不是说实体报头域和实体正文要在一起发送,例如:有些响应可以只包含实体报头域。实体就好象我们写的书信,在信中,我们可以写上标 题,加上页号等,这部分就相当于是实体报头域,而我们所写的书信的内容,就相当于实体正文。前面说讲的普通报头、请求报头、响应报头我们可以看成是写在信 封上的邮编、接收者,发送者等内容。
实体报头定义了关于实体正文(例如:有无实体正文)和请求所标识的资源的元信息。
所谓元信息,是指描述其他信息的信息。
常用的实体报头域:
Content-Encoding
Content-Encoding实体报头域被使用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容编码,因而要获得Content- Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding主要用语记录文档的压缩方法,下面是它的一个例子: Content-Encoding: gzip。如果一个实体正文采用了编码方式存储,在使用之前就必须进行解码。
Content-Language
Content-Language实体报头域描述了资源所用的自然语言。Content-Language允许用户遵照自身的首选语言来识别和区分实体。 如果这个实体内容仅仅打算提供给丹麦的阅读者,那么可以按照如下的方式设置这个实体报头域:Content-Language: da。
如果没有指定Content-Language报头域,那么实体内容将提供给所以语言的阅读者。
Content-Length
Content-Length实体报头域用于指明正文的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的ASCII码存储传输。
要注意的是:这个长度仅仅是表示实体正文的长度,没有包括实体报头的长度。
Content-Type
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。例如:
Content-Type: text/html;charset=ISO-8859-1
Content-Type: text/html;charset=GB2312
Last-Modified
Last-Modified实体报头域用于指示资源最后的修改日期及时间。
Expires
Expires实体报头域给出响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面。当用户再次访问这些页面时,直接从缓存中加载并显示给用 户,这样缩短了响应的时间,减少服务器的负载。为了让代理服务器或浏览器在一段时间后更新页面,我们可以使用Expires实体报头域指定页面过期的时 间。当用户又一次访问页面时,如果Expires报头域给出的日期和时间比Date普通报头域给出的日期和时间要早(或相同),那么代理服务器或浏览器就 不会再使用缓存的页面而是从服务器上请求更新的页面。不过要注意,即使页面过期了,也并不意味着服务器上的原始资源在此时间之前或之后发生了改变。
Expires实体报头域使用的日期和时间必须是RFC 1123中的日期格式,例如:
Expires: Thu, 15 Sep 2005 16:00:00 GMT
HTTP1.1的客户端和缓存必须将其他非法的日期格式(也包括0)看作已过期。例如,为了让浏览器不要缓存页面,我们也可以利用Expires实体报头 域,设置它的值为0,如下(JSP):response.setDateHeader("Expires",0);
2.2.3.3 请求正文

2.2.4 HTTP响应
HTTP响应:也有三部分组成:状态行、消息报头和响应正文
2.2.4.1状态行
格式:

HTTP-Version:协议版本
Status-Code:表示服务器响应发回的响应代码
Reason-Phrase:表示状态代码的文本描述

状态代码由3为数字组成:表示请求是否被理解或被满足。
1xx: 指示信息——表示请求已接受,继续处理
2xx:成功——表示请求已经被成功接收,理解、接受
3xx:重定向——要完成请求必须进行更进一步的操作。
4xx:客户端错误——请求有语法错误或请求无法实现
5xx:服务器端错误——服务器未能实现合法的请求
2.2.4.2消息报头:
2.2.4.3响应正文:比方说返回的一个页面。
2.3应用程序体系结构
三层:表示层、应用层/业务逻辑层和数据存取层

2.3.1一层体系结构(所有组件包装在一个组件单元中)
特点:
* 运行于单台计算机
* 高性能
* 编码简单
缺点:
* 三合一,导致系统维护困难
* 数据无法共享

然而:返璞归真也是有可能的!
2.3.2二层体系结构
特点:
* 数据存取的逻辑的代码与业务逻辑和表示逻辑分开,任何数据存取的交互都将通过业务层来完成。
* 实现了数据共享
2.3.3三层体系结构
“三层结构”是什么?
  “三层结构”一词中的“三层”是指:“表现层”、“中间业务层”、“数据访问层”。其中:
 表 现 层:位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
 中间业务层:负责处理用户输入的信息,或者是将这些信息发送给数据访问层进行保存,或者是调用数据访问层中的函数再次读出这些数据。中间业务层也可以包括一些对“商业逻辑”描述代码在里面。
 数据访问层:仅实现对数据的保存和读取操作。数据访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。


  对依赖方向的研究将是本文的重点,数值返回方向基本上是没有变化的。


2.4 Web应用程序
2.4.1 体系结构


注意:
WEB-INF目录下的内容对于Servlet代码是可见的,在Servlet代码中可以通过ServletContext对象中的方法getResource和getResourceAsStream()来访问。也可以通过RequestDispatcher调用。
2.4.2开发过程
 设计目录结构
 编写 Web 应用程序代码
 编写部署描述符
 编译代码
 将 Web 应用程序打包
 部署 Web 应用程序
 执行 Web 应用程序
2.4.3 在Jbuilder 2005中配置Tomcat
1.Servlet容器(也叫做Servlet引擎)是Web服务器或应用程序服务器的一部分,用于在发送请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。Servlet容器在Servlet的生命周期内包容和管理Servlet。
2.Tomcat介绍
它是Apache软件基金会(Apache Software Foundation)的Jakarta项目的一个核心项目


3 容器功能:
通信支持:
利用容器提供的方法,你能轻松地让Servlet与Web服务器对话。你不用自己建立ServletSocket监听某个端口,创建流等等。容器知道自己与web服务器之间的协议。
生命周期管理:
多线程支持
声明方式实现安全
Jsp支持
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值