深入浅出Servlet and JSP翻譯節選
作者: Kathy Sierra and Bert Bates
为什么使用Servlet&JSP?
Web应用炙手可热。确实,GUI应用可以使用一些新奇古怪的Swing组件,不过,你知道有几个GUI应用能由全世界数百万的用户使用?作为一个Web应用开发人员,不用像对付独立应用那样,亲自处理棘手的部署问题,完全通过浏览器把你的应用交付给任何人。不过,要构建一个真正强大的Web应用,你还需要一些帮手,这就是Java、Servlet和JSP。因为原先普通的静态HTML页面太……怎么说呢,只能算是1999年的老古董了。如今,用户需要的网站应该是动态的、交互式的,而且应该能够由客户定制。通过后面的介绍,你会理解如何把Web网站变成真正的Web应用。
Servle&JSP概述
对于每一种HTTP方法(如GET、POST、HEAD等):
* 介绍这种HTTP方法的优点
* 介绍这种HTTP方法的功能
* 列出客户(通常是一个Web浏览器)会出于哪些原因使用这个方法
* 明确与各个HTTP方法对应的HttpServlet方法
每个人都想有个网站
你可能想要一个超级网站。要打败竞争对手,你需要一个灵活而且可扩展的体系结构。这就需要Servelt和JSP。
在构建具体的Web应用之前,先让我们远远地看看WWW(万维网)是什么。这一章最关心的就是Web客户和Web服务器怎么对话。
后面几页的内容对你来说可能并不陌生,特别是如果你已经是一个Web应用开发人员,肯定早就知道这些了。不过,通过这些介绍,我们会提到本书中将要用到的一些术语。
Web 包括数以万计的客户(使用像Muzilla或Safari之类的浏览器)和服务器(使用Apache等等Web服务器应用),这些客户和服务器之间通过有线和无线网络连接。我们的目标就是构建一个全世界客户都能访问的Web应用。直白一点,就是要挣大钱。
你的Web服务器做些什么?
Web服务器接收客户请求,然后向客户返回一些结果。
用户可以通过Web浏览器请求一个资源。Web服务器得到请求后,查找资源,然后向用户返回一个错误。有时资源可能是一个HTNL页面,有时可能是一个图片,甚至是一个PDF文档。具体是什么没有关系,总之都是介乎请求某个东西(资源),再由服务器返回请求的资源。
除非没有这样一个资源,或者至少资源不在服务器原来预想的位置上,此时就会显示一个“404 Not Founf(404: 未找到)”这个错误,这个错误你肯定已经很熟悉了。如果服务器找不到你请求的东西,它就会给你这样一个响应。
谈到“服务器”时,可能是指物理主机(硬件),也可能是指Web服务器应用(软件)。在这本书里,如果要区别服务器硬件和软件,我们会特别指出所说的到底是硬件还是软件。
客户的请求包含客户所找资料的名字和地址(URL)。
服务器通常有很多可以发给客户的“内容”。这些内容可能是Web页面,JPEG图片和其他资源。
服务器的响应包含客户所请求的具体文档(如果无法处理客户的请求,就会返回一个错误码)。
Web客户做些什么?
Web客户允许用户请求服务器上的某个资源,并且向用户显示请求的结果。
谈到客户时,通常是指人类客户,或者浏览器应用,也可能二者都包括。
浏览器就是一个软件(比如Netscape或Mozilla),它知道怎么与服务器通信。浏览器还有一个重要的任务,这就是解释HTML代码,并把Web页面呈现给客户。
所以,从现在开始,如果我们说到“客户”,通常并不强调指的是人类用户还是浏览器应用。换句话说,我们所说的客户就是浏览器应用,它能完成用户指定的任务。
用户在浏览器上点击一个链接→浏览器对请求格式化并把它发送给服务器。→服务器找到所请求的页面→服务器对响应格式化,并发送给客户(浏览器)→浏览器得到HTML,并显示给用户。
客户和服务器都知道HTML和HTTP
HTML
当服务器对一个请求做出回答时,通常会向浏览器发送某种类型的内容,以便浏览器显示。服务器一般会向浏览器发送一组用HTML编写的指令,HTML就是超文本标记语言。HTML告诉浏览器怎样把内容呈现给用户。
所有Web浏览器都知道如何处理HTML,不过,如果页面是用更新版本的HTML编写的,有时老版本的浏览器可能无法完全理解。
HTTP
Web上客户和服务器之间的大多数会话都是使用HTTP协议完成的,HTTP协议支持简单的请求和响应会话。客户发送一个HTTP请求,服务器会用一个HTTP响应作出应答。关键是:如果你是一个Web服务器,就必须讲HTTP。
Web服务器向客户发送HTML页面时,就是使用HTTP发送的(通过后面几页的详细介绍,你会了解这是怎么做到的)。
HTML告诉浏览器怎样向用户显示内容。
HTTP是Web上客户和服务器之间进行通信所用的协议。
服务器使用HTTP向客户发送HTML。
HTML速成指南
开发Web页面时,就是用HTML描述页面应该是什么样子,以及它有怎样的表现。
HTML包含数十个标记,还有成百上千个标记属性。HTML的目标是拿到一个文本文档,然后为它增加一些标记,告诉浏览器如何对这个文本格式化。下面列出了后面几章我们将要使用的一些标记,如果你想更全面地了解HTML,建议你读一读《HTML&XHTML TheDefinitive Guide》。
标记 描述
<!-- --> 在这里
<a> 锚点——通常用来放一个超链接
<align> 对内容左对齐、右对齐、居中,或调整行距
<body> 定义文本题的边界
<br> 行分隔
<center> 将内容居中
<form> 定义一个表单(通常提供了输入域)
<h1> 一级标题
<head> 定义文档首部的边界
<input type> 在表单中定义一个输入组件
<p> 一个新段落
<title> HTML文档的标题
什么是HTTP协议?
HTTP是TCP/IP的上层协议。如果你对这些网络协议还不熟悉,下面就提供一个非常简单的解释:TCP负责确保从一个网络节点向另一个网络节点发送的文件能作为一个完整的文件到达目的地,尽管在具体传送过程中这个文件可能会分解为小块传输。IP是一个底层协议,负责把数据块(数据包)沿路移动/路由到目的地。HTTP则是另一个网络协议,有一些Web特定的特性,不过它要依赖于TCP/IP从一处向另一处完整地传送请求和响应。HTTP会话的结构是一个简单的请求/响应序列:浏览器发出请求,服务器做出响应。
请求流的关键因素:
HTTP方法(要完成的动作)。
要访问的页面(URL)。
表单参数(如方法参数)。
响应流的关键要素:
状态码(表明请求是否成功)。
内容类型(包括文本、图片、HTML等)。
内容(具体的HTML、图片等)。
HTML是HTTP响应的一部分
HTTP响应可以包含HTML。HTTP还会在响应中包含的内容(换句话说,就是服务器返回的东西)前面增加首部信息。HTML浏览器使用首部信息来帮助处理HTML页面。可以把HTML内容看作是粘贴到HTTP响应中的数据。
如果响应是这样,那么请求里又是什么呢?
首先会看到一个HTTP方法名。这不是Java方法,但是道理是一样的。方法名告诉服务器做了哪一类请求,并指出消息中余下的部分该如何格式化。HTTP协议有许多种方法,但最常用的当属GET和POST。
GET 用户点击指向一个页面的链接→浏览器向服务器发送一个HTTPGET,请求服务器获得(GET)页面。
POST 用户填写表单,点击 Submit(提交)按钮→浏览器向服务器发送一个HTTPPOST,为服务器提供用户在表单中键入的信息。
GET是最简单的HTTP方法,它的主要任务就是要求服务器获得一个资源并把资源发回来。这个资源有可能是一个HTML页面,一个JPEG、一个PDF文档等等。具体是什么资源没有关系,关键是GET就是要从服务器拿些东西回来。
POST是一种更强大的请求,就像是GET++。利用POST,可以请求某个东西,与此同时向服务器发送一些表单数据。
除了GET和POST,还有其他的HTTP方法吗?
GET和POST是大家使用最多的两个方法。不过,除此之外,确实还有其他一些很少用的方法(而且Servlets确实能够处理这些方法),具体包括HEAD、RACE、PUT、DELETE、OPTIONS和CONNECT。
不错……确实能用HTTP GET发送一点多数据
但是你可能不想这样做。使用POST而不是GET的原因如下:
GET中的总字符数是有限的(取决于服务器)。比如,如果用户在“搜索”输入框里键入了很长的一段文字,GET方法可能无法正常工作。
用GET发送的数据会追加到URL的后面,在浏览器地址栏中显示出来,所以你发送的数据会完全暴露。最好不要把口令或其他敏感数据作为GET请求的一部分发送!
由于前面的第二点,如果你使用POST而不是GET,用户就不能对一个表单体检建立书签。取决于具体的应用,你可能希望(或不希望)用户对表单提交所得到的请求简历书签。