html - lixidaydayup/plan GitHub Wiki
我们现在看到的tomcat 别人称之为一款 java web服务器 那么这里面就有3个层次的概念
- 它是一个服务器
- 它是一个web服务器
- 它是java的web服务器
与这个词对应的我们常常听到_客户端_,在计算机里面,我们要访问远端的东西时,比如我们需要下载一个文件,如果这个文件存放在别人或者别的公客户司的电脑上, 我们就称之为”放在服务器上“,那么我们需要在自己的电脑上运行一个程序去访问这个服务器,我们把这个自己电脑上运行的软件叫做”客户端“, 它们之间经过网络来通信。”服务器“和”客户端“是2个抽象层面的概念, 不仅仅包括下载文件,比如我们在线听音乐,我们的酷狗播放器就是客户端,对应的酷狗公司的某个机房里面的某个程序就是服务器
服务器和客户端要进行通讯 就要有一定的通讯格式 比如客户端要先说个hello 服务器再回答一个hello 这些都是商量好的,这种格式就叫做”协议“,意思是”你先说xxx 我再回你yyy xxx表示你好 yyy表示我很好“ 所以服务器和客户端之间,通过协议进行通讯,它们能按照约定好的协议,解析对方发过来的内容,比如酷狗播放器就把服务器传来的东西当成音乐,通过电脑上的音响播放出来,迅雷把迅雷服务器的东西当成文件,下载下来保存在某个地方。
而web服务器,就是针对http协议。
http是一种用来显示网页,提交网页内容的协议。包括:你刚刚点击的登录,其实就是你的客户端(google浏览器)往你的服务器(tomcat)发了一个http请求,然后tomcat的servlet能接收到这个请求,并且识别出了请求里面携带的参数(username)和(passowrd),然后做了一些处理(比如我在你登录成功以后可以打印一条日志保存在数据库里面,显示”lixi“这个用户在某某时间点登录了一次)
在处理完了这个请求以后 客户端是带有目的的 它总希望服务器给它输出些什么,所以我们的代码里面用response来往客户端回送一个http响应, 响应的东西被客户端识别了出来,显示在界面上了
我们看到只要是web服务器就必须遵守http协议, 但是协议是一种文本,跟编程语言无关,c语言也可以写web服务器,那么java也可以,所以tomcat就是经典的java web服务器了。所以,tomcat就是“http协议的web服务器用java语言实现”, java语言里面定义了一些规范,比如servlet,在别的语言里面是没有的,java里面专门把这种处理http请求的类型叫做servlet,tomcat只需要让用户能创建servlet,并且能启动这些servlet,然后把http请求里面的url (就是你form里面那个action) 映射到你的servlet上面,就算完事了。
说到http 一个必须要知道的就是get和post http协议里面定义了5种 客户端和服务器端 通信的方式,它们是为了不同的场景而设计出来的,因为有些场景,比如浏览网页,是一种客户端纯请求服务器资源的行为,也不需要提交什么,只要告诉服务器,我需要得到 http://163.com/xxx.html
,然后163的服务器就会找到这个html(显然,它是用html语言写的,哪里来的?163这个网站的程序员写好了然后发布到服务器上的),然后用http的response发送到客户端(浏览器),浏览器发现一个div,就显示一个div,发现一个img标签(图片)就去下载这个图片(可能也存在163的服务器上哦)下载完了就显示在界面上,所以你看到的网页,包括你现在看到的这个页面,都是浏览器解析了html标签后的结果。
以上,就是get请求,那么post请求是什么呢?刚刚你点击登录的时候可以看到,浏览器的地址栏里面是显示了一个完整的路径,比如 Http://localhost:8080/TestServlet?username=lixi&password=test你看,你是往服务器提交东西的,但是你提交的密码也显示在地址栏里面了,这样岂不是不太好?这就需要post请求了,post请求是一种专门用来浏览器向web服务器提交一些信息的时候使用的,你把login.html里面的form type从"get"改成"post" 然后把 TestServlet里面 doGet的方法里面的内容复制到 doPost方法 重新启动一下tomcat就可以看到效果了。
so,get请求适用于获取服务器资源,post适用于提交内容到服务器,get请求在地址栏里面看到链接的详细内容,post是看不到的。另外就是get请求的大小是有限制的,浏览器一次不能发送超过2MB的内容到服务器端。但是post却没有这个显示,我们可以上传一个很大的文件到qq邮箱里面记得吗,这就是post的功劳。
刚刚,首先你访问了http://localhost:8080/工程名/login.html
,其实当你按下回车键的时候,浏览器就是用了http的get请求去请求服务器的login.html这个资源啦,于是tomcat发现你在请求一个叫做login.html的文件,它就很聪明地发现了自己的webContent这个目录(有的时候也可以是webRoot这个目录)下面正好有一个叫login.html的文件,于是它就把这个文件的内容输出给了浏览器,浏览器解析成了你看到的一个登录form.
然后你点击提交按钮,这个时候又发生了第二个http请求,tomcat发现/TestServlet 这个,没有这样的文件,但是恰好有个servlet是对应的这个url,那么就把你发的数据,交给了这个servlet,然后把servlet输出的response的内容,发送到浏览器上,你就看到了“success"或者是"fail"