hualinux servlet 2.1 学习servlet前的准备
目录
之前的《java基础篇》教了java基础,在有java的基础上,我们开始进入了java web,学习java web,那么servlet是必学的,虽然实际应用中极少直接用servet写代码的,但学好servet对以后java web开发很有帮助,也对维护有帮助 ,tomcat就是集成 了servet的。
这篇开始我们要有些必要的基础,如HTML、java基础,
本章推荐书籍
《网络是怎样连接的》
《图解HTTP》
一、需要简单了解http和tcp协议
Servlet基本上属于网站了,所以要懂得一些概念。
客户访问网站一般是通过浏览器访问,浏览器与网站之间传输使用的是http或https,因http报文是明文的,所以推荐使用https的,它是在http基础上加了SSL安全。
http是基于tcp协议基础上的。
我们把通过浏览器访问网站的方式叫B/S(浏览器/服务器)方便,另一个是C/S(客户端/服务器),C/S模拟也多,比如App访问就是C/S模式。
二、浏览器访问网站简单过程
如下图:
上图中浏览器与网站之间传输数据是通过http/https协议
浏览器与服务器(网站)沟通一般是通过HTML(超文本标记语言)。
网站返回的数据是通过浏览器展现的,浏览器一般只识别HTML(包括图片、CSS等)、javaScpript(简称js),如果其它之类呢,那么就看浏览器插件了,安装了相关插件就能显示。现代的浏览器一般也安装了通用的插件,如mp4、pdf的支持。
如果浏览器有些格式不识别那么一般是直接弹出下载框让你下载。
三、 http/https(浏览器与网站传输数据的协议)
就简单一句话:浏览器与网站之间传输数据是通过http协议。
http协议是基于tcp的,因http传输报文是明文不安全,所以加了一个SSL(Secure Sockets Layer 安全套接层),然后名字叫https。
下面是2张关键截图:
有兴趣看http原理的可以看《http协议》
四、HTML(浏览器与网站沟通的一种语言)
语言的作用就是沟通,其中HTML就是浏览器与网站(也叫web网站)沟通的一种语言。
我们随便找开一个网站,看到那些效果其实是用HTML编写的,只是在HTML基础上加了美化效果(css)、一些动作(js)。
为什么这么说呢,用浏览器(我这里是360)打开一个网页,右击“查看源代码”,基本上都是以如下形式:<标签></标签>,这些就是HTML
如果把HTML比作人的话,css就是衣服,js就是的动作。
ps: 为什么说是一种语言呢,因为也可以用其它表示如XML、json,这些网站需要一些辅助功能才能实现的,单纯的web网站没有这种功能。
所下面所说的servlet也是一种网站辅助程序。
五、HTML的提交方式
5.1 http的几种提交方式
我们知道浏览器和服务器交互,浏览器提交⇌服务器,即浏览器提交服务器响应返回数据。
那HTML提交有几种方式呢?http协议1.1版本支持如下图几种方式:
上面最常用的就是GET和POST
我们直接输入网站回车就是GET方式,其它方式可以用HTML的表单去指定。
这里还附加一个幂等概念
5.2 http的幂等性
幂等性——是系统的接口对外一种承诺(而不是实现),承诺只要调用接口成功,外部多次调用对系统的影响是一致的。
一个幂等的操作典型如:把编号为5的记录的A字段设置为0,这种操作不管执行多少次都是幂等的。
一个非幂等的操作典型如:把编号为5的记录的A字段增加1,这种操作显然就不是幂等的。
要做到幂等性,从接口设计上来说不设计任何非幂等的操作即可。譬如说需求是:
当用户点击赞同时,将答案的赞同数量+1。改为:
当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。赞同数量由答案赞同表统计出来
HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。
简单来说,无论浏览器请求同一个url(即网址地址)多少次,显示的结果是一样的,我们就叫这种请求方式是幂等。有兴趣了解的可以百度一下。
如下图:
六、web服务器
6.1 纯web服务器
我们现在所说用web服务器,一般是指结合了动态语言(C#、php、java等)所产生的。
如果去掉这些那么就是了个纯服务器,比如只有一个IIS、nginx、apache等。
如下图:
所谓的静态页面就是一成不变的页面,发给谁看内容都一样。
6.2 CGI
6.2.1 CGI介绍
如果我们需要页面动起来,让不同的人看到的内容有所变化,提供非静态的页面。
那把我就就要对纯web服务器添加一些“辅助”应用,如果不按Java术语来讲,Web服务器的辅助应用就是"CGI"程序
再回看什么是CGI,百科中解释为:
公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。
6.2.2 CGI工作过程
CGI工作大概工作过程如下图:
6.2.3 CGI缺点
虽然CGI实现了网站动态性,但是CGI也存在很多不足之处:
1、需要为每个请求启动一个操作CGI程序的系统进程,如果请求非常频繁,开销会很大
2、需要重复编写网络协议的代码以及进行编码,耗时长。
为了改进CGI所以出现了后来的FastCGI、Servlet、ISAPI(IIS)等方面的技术。
6.3 web编程语言
从上面知道CGI是一种Web 服务器运行时外部程序的规范。于是CGI缺点所以发展出FastCGI、Servlet、ISAPI等
为了实现动态网站,所以出现了一些专业编写网站的语言,常见的有.
- php:可以编写php网站,可以运行在win和linux上
- c#:可以编写asp.net网站,一般只运行在win上
- java:可以编写java web网站,一般运行在linux上,也可以运行win上
纯web程序与C#、php、java这些网站编程语言常见的组合有:
1.IIS+asp.net:IIS一般使用的是isapi是微软对CGI的一种优化。
2.apache/nginx+php:
1)apache用的是cgi,而nginx使用的是fastCGI,因apache太笨重一般建议用nginx。
2)php一般使用php-fpm与nginx通讯
3.nginx+tomcat:
tomcat使用的是servlet,这里的nginx一般只做反代。