详细介绍了Java Web中的Servlet的概念以及Servlet的发展历程。
1 Java Web概述
Java EE全名为Java Platform Enterprise Edition,即Java平台企业版。JavaEE以JavaSE作为语法基础,可以看作一个大的框架,提供了的一系列使用Java语言进行企业级应用开发的组件和API标准,没有提供具体的实现(也就是接口)。比如常见的Servlet、JDBC、EJB、JNDI、Servlet、JSP等等都是它制定的企业级应用程序开发的规范或者标准。
Java Web使用常常指Java开发的Web应用程序,并且实现了Java EE的一系列标准,比如我们自己的Servlet类,就是Servlet标准的实现。Java Web算作企业级开发的组成部分或者子集,Java Web和Java EE可以说不算是一个层次的东西,一个是实现,一个是规范!
Java Web应用程序开发,常常使用的规范就是Servlet、JSP、JDBC等,在更加上层的框架层出不穷的今天,我们也基本不会亲自手动实现这些标准提供的接口了,而是由框架来帮我们实现,然后我们又使用框架提供的封装好的更上层的、更友好的API进行开发。比如Spring web MVC,它帮我们实现了Servlet标准并且提供了更好使用的API,我们在使用Spring MVC开发的时候,根本感觉不到Servlet的存在!
但是如果不仅仅是会用,而是想要阅读这些框架的源码,那么,我们仍然不得不接触这些底层的API和规范。
2 Web请求
所谓Web应用程序,关键的使用前面的“web”,即“网络”的意思,也就是说,我们开发的企业级web应用层序,可以通过互联网,让远程的客户端能够访问。
通常,我们的web应用程序被称为服务端,包括了编写的程序代码、数据、各种资源,被放在服务器中,而客户操作的浏览器被称为客户端,这实际上就是BS应用架构的基础模型。最简单的服务端和客户端通信规则为:浏览器通过网络将请求发送给服务器,随后服务器根据请求地址把请求转发到对应的web应用程序中对应的处理程序,接着通过我们写的代码逻辑进行数据处理,并且将处理结果填充到前端页面中,并把Web页面数据传递给web服务器,web服务器再通过网络将web页面传递给客户的浏览器,随后展示给用户即可。
现在,我们模拟一下客户端和服务端的交互!我们使用浏览器作为客户端,因此主要就是模拟服务器的逻辑,我们采用Socket来编程 ,Socket隐藏了各种TCP/IP协议的交互,提供了针对TCP或者UDP编程的接口,可以接收请求和发送响应,实现不同计算机之间的通信。
/**
* 模拟服务器
*
* @author lx
*/
public class MyServer {
/**
* 服务器通过线程池处理请求
*/
static ThreadPoolExecutor serverExecutors = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>()
, Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy());
/**
* 启动服务器
*/