首页 > 代码库 > Servlet&JSP学习笔记:Web应用程序基础知识
Servlet&JSP学习笔记:Web应用程序基础知识
URL、URN和URI
- URL:Uniform Resource Locator
- URN:Uniform Resource Name
- URI:Uniform Resource Indenfier
URL的主要目的,是以文字方式来说明因特网上的资源如何取得。一般而言,URL的主要格式为:
<协议>:<特定协议部分>
协议(scheme)指定了以何种方式取得资源。常见的协议名有:
- ftp(文件传输协议,File Transfer Protocol)
- http(超文本传输协议,Hypertext Transfer Protocol)
- mailto(电子邮件)
- file(特定主机文件名)
协议之后跟随冒号,特定部分部分的格式则为:
//<用户>:<密码>@<主机>:<端口号>/<路径>
HTTP
HTTP是一种通信协议,指架构在TCP/IP之上应用层的一种协议。通信协议基本上就是两台计算机间对谈沟通的方式。
按照不同的联机方式与所使用的网络服务而定,会有不同的通信协议。发送信件时会使用SMTP(Simple Mail Transfer Protocol),传输文件时会使用FTP,下载信件时会使用POP3(Post Office Protocol 3)等,而浏览器跟 Web 服务器之间使用的沟通方式,则是HTTP,它有两个基本但极为重要的特性:
- 基于请求(Request)/响应(Response)模型
- 无状态(Stateless)通信协议
HTTP是一种基于请求/响应的通信协议,客户端对服务器发出一个取得资源的请求,服务器将要求的资源响应给客户端,每次的联机只作一次请求/响应,是一种很简单的通信协议,没有请求就不会有响应。
在 HTTP 协议下,服务器响应客户端之后,就不会记得客户端的信息,更不会去维护与客户端有关的状态,因此 HTTP 又称为无状态(Stateless)的通信协议。
Get请求
GET请求,就是向服务器取得(GET)指定的资源,在发出 GET 请求时,必须一并告诉服务器所请求资源的 URL,以及一些标头(Header)信息。
请求标头的内容是给服务器参考的额外信息,服务器可以选择性地使用这些信息来做适当的响应处理。。例如,服务器可以从 User-Agent 中得到用户使用的浏览器种类与版本,从Accept-Language 中了解浏览器可以接收哪些语言的内容响应等。
请求参数通常是用户发送给服务器的必要信息,这个信息通常是利用窗体来进行发送,服务器必须有这些信息才可以进一步针对用户的请求作出正确的响应。请求参数是在 URL 之后跟随一个问号(?),然后是请求参数名称(name)与请求参数值(value),中间以等号(=)表示成对关系。若有多个参数,则以&字符连接。使用GET方式发送请求,浏览器的地址栏上也会出现请求参数信息。
GET请求可以发送的请求参数长度有限(这个长度根据浏览器版本而有所不同),对于太大量的数据并不适合 GET 方式来进行请求,这是可以改用POST。
POST请求
POST请求,就是在请求时发布(POST)信息给服务器,对于大量或复杂的信息发送(如文件上传),基本上会采用 POST 来进行发送。
由于请求参数移至信息体,地址栏上也就不会出现请求参数。对于一些较敏感的信息,即使长度不长,通常也改用 POST 的方式发送。
如何选用 GET 或 POST?
GET请求与POST请求是使用Servlet/JSP时最常接触的两个请求方式。除了长度过长的请求数据之外,许多请求既可以使用GET也可以使用POST,那么何时该选用GET而何时该选用 POST 呢?
从功能面上,可以用一下方式来决定该选用GET或POST:
- GET请求跟随在URL之后的请求参数长度是有限的,过长的请求参数,或如文件上传这类的大量数据,就不适合用 GET 请求,而应该改用 POST请求。
- GET请求的请求参数会出现在地址栏上,敏感性或有安全型考虑的请求参数(如信用卡号码、用户名、密码等),就不应该使用 GET 请求来传送。
- POST请求的参数不会出现在地址栏上,所以无法加入浏览器的书签(Bookmark)之中,如果有些页面时根据请求参数来作不同的画面呈现(如论坛的文章发表),而你希望可以让用户设定书签,以便日后可以直接点击书签浏览,则应该使用 GET 请求。
- 有些浏览器会依网址来缓存(Cache)数据,如果网址是相同的 URL, 则会直接从浏览器缓存中取出数据,而不会真正发送请求至服务器上查询最新的数据。如果不希望服务器状态改变了,而浏览器仍从缓存中取得旧的资料,则可以改用 POST 请求(使用 GET 请求也可以避免缓存,例如在网址上附加时间戳,让每次 GET 请求的网址都不相同)。
另一个分功能上的考虑:按照请求是否为等幂操作来决定使用GET或POST。
等幂操作:请求的操作是否改变服务器状态,同一个操作重复多次,是否传回同样的结果。
GET请求应该用于等幂操作。GET请求纯粹取得资源,而不改变服务器上的数据或状态。GET的请求参数,只是用来告知服务器,必须进一步根据请求参数(而不知是URL)来标识出要响应的内容(例如查询数据库的数据),同样的GET 请求且使用相同的请求参数重复发送多次,都应该传回相同的结果。
POST请求应该用于非等幂(non-idempotent)操作。POST请求发送的数据,可能会影响服务器上的数据或状态,例如修改(增、删、更新)数据库的内容,或是在服务器上保存文件。你的请求若会改变服务器的状态,则应该用 POST 。
Servlet&JSP学习笔记:Web应用程序基础知识