一、背景:要掌握Java web 开发,首先就要学会编写Servlet,而要运行Servlet,则需要一个Servlet容器,所有文章选用Tomcat。
先来了解一下Java web 发展历程,带着几个问题去学习发展历程。
① 为什么会出现Servlet技术?Servlet技术解决了那些问题?
② 什么是Servlet技术?
③ 什么是Servlet容器?
④ Servlet技术与Servlet容器的关系?
1、Web技术的发展历程
随着Internet的发展,基于Http协议和HTML标准的Web应用呈几何增长,各种各样的网上业务丰富了我们的生活,节省了我们的时间,提高了我们的工作效率,改善了我们的生活品质。支撑这些网上业务的 就是各种各样的Web应用,而这些web应用又是各种Web技术开发的。
早期的Web应用主要是静态页面的浏览(如新闻的浏览),这些静态页面使用HTML语言来编写,放在服务器上;①用户使用浏览器通过HTTP协议请求服务器上的Web页面,服务器上的Web服务器软件接收到用户发送的请求后,②读取请求URI所标识的资源,加上消息包头发送给客户端浏览器;③浏览器解析响应中的HTML数据,向用户呈现多姿多彩的HTML页面。整个过程如图1-1所示。
随着网络的发展,很多线下业务开始向网上发展,基于Internet的web应用 也变得越来越复杂,用户访问的资源也不仅仅局限于在服务器硬盘上存放的静态网页, 更多的应用需要根据用户的请求动态生成页面信息,复杂一些的还需要从数据库中提取数据,经过一定的运算,生成一个页面返回给客户。
例如:笔者通过web浏览器想要查询本公司一年的销售报表,这个销售报表是根据一年的销售数据得出来的,而这一年的销售数据非常多,通常都是存储在数据库中的,当Web服务器软件接收到客户端的请求时,就需要从数据库中提取一年的数据,然后按照一定的统计规则,通过计算生成报表页面,发送到请求者Web浏览器端。类似于上述的应用还有很多,要为用户提供各种各样的增强功能,就需要我们在Web服务器端 通过软件来实现。可这种实现,如何才能完成?
了解HTTP协议的读者,可能会想到,可以遵循HTTP协议实现一个服务器端软件,提供增强功能。
①想法本身没有错误,但是HTTP协议服务器端的实现较为复杂,需要考虑很多方面,而且由于应用的广泛性,不可能针对每一种Web应用都去实现一个这样的HTTP协议的服务器软件,所以这种现实中不太可行。!!
② 还有一种方法,就是利用已经实现HTTP协议的服务器端软件,而且,这些软件预先为我们留出了扩展接口,我们只需要按照一定的规则 去提供相应的扩展功能就可以了。
③ 当这类Web服务器软件接收到客户端发来的请求后,判断请求是否访问我门提供的扩展功能,如果是,就将请求交由我们所编写的程序去处理。当处理完成后,程序将处理结果交回Web服务器软件,Web服务器软件拿到结果信息后,再将结果作为相应信息返回给客户端。
第二种方式好处是,我门不需要了解更多的HTTP协议,服务端HTTP协议的实现已经由Web服务器软件完成了,我们只需要根据我们的Web应用去开发相应的功能模块,然后将这些功能模块按照 你所采用的Web服务器软件的要求,部署到Web服务器中进行集成。 在用户看来,Web服务器端就是一个整体,在为用户提供服务。
早期使用的Web服务器扩展机制是CGI,它允许用户调用Web服务器上的CGI程序。大多数CGI程序都是Perl、c、python等语言编写。用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问CGI程序,Web服务器接收到请求后,发现这个请求是给CGI程序的,于是就启动并运行这个CGI程序,对用户请求进行处理。CGI程序解析请求中CGI数据,处理数据,并产生一个响应(通常是HTML页面)。这个响应被返回给Web服务器,Web服务器包装这个响应(例如添加消息报头),以HTTP响应的形式发送给Web浏览器。整个过程如图1-2所示。
然而CGI程序存在着一些缺点,主要是CGI程序编写困难、对用户请求的响应时间较长、以进程方式运行导致性能受限等。由于CGI程序的这些缺点,开发人员需要其他的CGI方案。1997年,SUN公司推出了Servlet技术,作为Java阵营的CGI解决方案。作为对ASP技术(1996年)的回应,SUN公司于1998年推出JSP技术,允许在HTML页面嵌入Java脚本代码,从而实现动态网页功能。于ASP、JSP类似的服务器端页面编写技术还有其他。
2、Servlet 与 Servlet容器
Java Servlet(Java服务小程序)是一个基于Java技术的 Web组件, 运行在服务器端,由Servlet容器管理生命周期, 用于生成动态的内容。
Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立的字节码,可以动态的被加载到支撑Java技术的任何Web服务器中运行。
“Servlet容器”?什么是Servlet容器呢? Servlet容器有时候也叫做Servlet引擎,是Web服务器或者应用服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于mime 的请求,格式化基于mime的响应。Servlet不能独立运行,它 必须 被部署到Servlet容器中,由容器来 加载、实例化、和调用Servlet的方法。
Servlet容器==Servlet引擎 == JSP容器 == Web容器
用户通过点击某个链接或者直接在浏览器的地址栏中输入URL 来访问Servlet,web服务器接收到该请求后,并不是将请求直接交给Servlet,而是交给Servlet容器。Servlet容器实例化Servlet,调用Servlet的一个特定方法对请求进行处理,并产生一个响应。这个响应由Servlet容器返回给Web服务器,Web服务器包装这个响应,以HTTP响应的形式发送给Web浏览器。
整个过程如图:1-3 所示。
其他文章:https://blog.csdn.net/qq_42243225/article/details/102501075