我们在学习了J2EE的十三个规范之后,只是对他们有了一个简单的认识,而接下来需要我们做的就是一个个研究,进行深入学习。在十三个规范中,比较常用的有JSP,Servlet,EJB,JNDI等,那么今天我们就来介绍一下Servlet。
1、概念
一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来动态扩展Web服务器的应用程序。Java Servlet技术为这些应用程序定义了一个特定于HTTP的 servlet类。
2、原理
当客户端浏览器向服务器请求一个 Servlet 时,服务器收到该请求后,首先到容器中检索与请求匹配的 Servlet 实例是否已经存在。
若不存在,则 Servlet 容器负责加载并实例化出该类 Servlet的一个实例对象,接着容器框架负责调用该实例的 init() 方法来对实例做一些初始化工作,然后Servlet 容器运行该实例的 service() 方法。
若 Servlet 实例已经存在,则容器框架直接调用该实例的 service() 方法。
service() 方法在运行时,自动派遣运行与用户请求相对应的 doXX() 方法来响应用户发起的请求。
通常,每个 Servlet 类在容器中只存在一个实例,每当请求到来时,则分配一条线程来处理该请求。
3、作用
当使用交互式 Web 站点时,您所看到的所有内容都是在浏览器中显示的。在这些场景背后,有一个 Web 服务器接收会话 中来自于您的请求,可能要切换到其他代码(可能位于其他服务器上)来处理该请求和访问数据,并生成在浏览器中显示的结果。
servlet 就是用于该过程的网守(gatekeeper)。它驻留在 Web 服务器上,处理新来的请求和输出的响应。它与表示无关,实际上也不它应该与表示有关。
您可以使用 servlet 编写一个流,将内容添加到 Web 页面中,但那通常也不是一个好办法,因为它有鼓励表示与业务逻辑的混合的倾向。
实现过程:
1. 获取用户的请求,取得用户输入的显示参数,获取浏览器生成的隐式参数—– 获取请求
2. 调用模型层业务类的具体业务方法,将参数传递给业务方法,与数据库进行交互。获取业务方法返回的模型数据。
3. 根据模型层返回的模型数据,进行流程控制(转发、重定向)。
4、优缺点
(1)优点
可移植性好:Servlet是用Java语言编写的,具有完善的Servlet API标准,企业编写的Servlet程序,可以轻松地移植到其他服务器中。
执行效率高:Servlet请求到来的时候激活Servlet,请求处理完,等待新的请求,新的请求将生成一个线程而不是进程。
使用方便:Servlet可以轻松地处理HTML表单数据,并读取和设置HTTP头,处理Cookie,跟踪会话。
(2)缺点:
web.xml配置量太多,不利于团队开发;
servlet具有容器依赖性,不利于单元测试;
servlet处理的请求很局限
5、总结
在此,我们认识到了Servlet的运行机制,知道了它相当于一个控制器,这让我们想起来什么呢,那就是在MVC中的Controller,对,它们的功能非常相似,说白了,Servlet就是一个控制器,这样,我们理解起来就简单了。所以我们要将新知识与旧知识联系起来,这样才能构建自己的知识网。