Web应用程序

Servlet是一项比较高级的技术,它要求学员掌握以下技能:

  • java程序设计
  • HTML
  • CSS
  • JavaScript

假设学员已经具备这些知识。

学习新技术,通常会先了解新技术的相关概念。

下面这些概述需要理解。

web应用程序

Web应用程序由两部分组成,客户端服务器

客户端基本是浏览器,服务端是HTTP服务器

浏览器会请求服务器的资源或文件。服务器上的文件有:HTML文件,json文件,pdf文件,excel文件,mp4文件,mp3文件,图片文件.jpg等等……

URL、URN与URI

浏览器请求服务器上的资源,这些资源有没有地址呢?

是的,计算机的科学家们早注意到这个问题,并这样解决。

理解下面3个概念:

URL

URL的全称是Uniform Resource Locator,译成中文是统一资源定位符,或称统一资源定位器/定位地址、URL地址等,有时也被俗称为网页地址(网址)。

如同在网络上的门牌,是因特网上标准的资源的地址(Address)。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址。现在它已经被万维网联盟编制为因特网标准RFC 1738。

在互联网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符的语法是一般的,可扩展的,它使用ASCII代码的一部分来表示因特网的地址。统一资源定位符的开始,一般会标志着一个计算机网络所使用的网络协议。

统一资源定位符的标准格式如下:

协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]

统一资源定位符的完整格式如下:

协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]

常见的协议类型有:

FTP,全称是File Transfer Protocol,中文叫文件传输协议,是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。
HTTP,全称是HyperText Transfer Protocol,中文叫超文本传输协议,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

URN

URN的全称是Uniform Resource Name,中文叫统一资源名称,是统一资源标识(URI)的历史名字。

URI

URI的全称是Uniform Resource Identifier,中文叫统一资源标识符,是一个用于标识某一互联网资源名称的字符串。

URI的最常见的形式是统一资源定位符(URL),经常指定为非正式的网址。

更罕见的用法是统一资源名称(URN),其目的是通过提供一种途径。用于在特定的名字空间资源的标识,以补充网址。

URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。

通讯协议:通信协议基本上就是两个计算机之间的对话沟通方式。

HTTP

HTTP这种协议是建立在TCP/IP协议之上。

HTTP协议是浏览器和web服务器之间使用的沟通方式。

HTTP协议两个重要特性:

  • 基本请求(request)和响应(response)的模型
  • 无状态(stateless)通信协议

浏览器请求一次,服务器响应一次。每次请求对应一对响应。

如上图所示,3次请求和3次响应。这6次是一个持续的过程,这个过程叫会话。

服务器是个记性不好的家伙,这次会话后,下次再找他,他不记得你了。这样的情况叫无状态通信协议。

请求方法

浏览器在使用http协议向服务发送请求时,可以使用以下请求方法:

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE

GET请求

向服务器取得(GET)指定的资源,在发出GET请求时,必须告诉服务器所请求资源的URL,以及一些标志(Header)信息。

http所有的通信数据都使用字符来进行交换。

GET请求可以带参数,而且参数在浏览器地址栏上可以看到。参数以?开始。

?后面才是参数。参数名=参数值

如果有多个参数,参数之间用&隔开。

POST请求 

在请求时发布(POST)信息给服务器。

POST请求也可以传递参数到服务器,不过参数没有在浏览器地址显示。这样更安全——可以发送敏感的信息,如密码,银行账号。

而且参数的长度没有任何限制。

URL编码

浏览器地址栏上的URL,在发送到HTTP服务器时会进行编码。为什么会进行编码呢?

在GET请求中,要传参数,以?开始,参数名和参数值使用=隔开。如果要传递?和=到服务器,这个时候就要对URL进行编码啦。

如果想知道它会编码成什么样,可以使用下面的代码:

import java.net.URLEncoder;

public class Test{
	
	public static void main(String[] args){
		String value=URLEncoder.encode("http://localhost:8080/getUser?user=李白");
		System.out.println(value);
	}
}


动态网页vs静态网页

静态网页从http服务器直接返回给浏览器。

动态网页,有部分数据是经过PHP、ASP、Servlet/JSP、CGI技术处理成.html后给http服务器,http服务器再返回给浏览器。

上图中,login.php表明采用的是php技术。

在Servlet/JSP技术中,动态网页技术架构如下:

分成3个部分:

  • 浏览器,显示静态页面和静态资源。
  • Apache web servlet,生成静态页面和静态资源。
  • Web Application,处理数据对象,处理jsp页面中的java代码。