什么是Servlet?
Servlet是sun/oracle公司制订的一种用来扩展web服务器端功能的组件规范
Servlet是一种用于扩展服务器功能的服务器端组件技术 ,用于实现动态网页编程
servlet就是一个组件,需要符合servlet规范,并且需要部署到servlet容器里面才能运行
Servlet的优点:
1、高效
在服务器上仅有一个Java虚拟机在运行,它的优势在于当多个来自客户端的请求进行访问时,Servlet为每个请求分配一个线程而不是进程
Servlet加载执行后会常驻服务器内存中,当再次受到客户端的请求时,服务器会产生新的线程而不是进程为客户端服务,这样就提高了响应速度。 -- Java是最差的内存性价比
2、方便
Servlet提供了大量的实用工具例程,例如处理很难完成的HTML表单数据、读取和设置HTTP头、处理Cookie和跟踪会话等。
3、跨平台可移植性
Servlet是用Java类编写的,它可以在不同的操作系统平台和不同的应用服务器平台下运行。
4、灵活性和可扩展性
采用Servlet开发的Web应用程序,由于Java类的继承性、构造函数等特点,使得其应用灵活,可随意扩展。
5、共享数据
Servlet之间通过共享数据可以很容易地实现数据库连接池。它能方便地实现管理用户请求,简化Session和获取前一页面信息的操作。而在CGI之间通信则很差。由于每个CGI程序的调用都开始一个新的进程,调用间通信通常要通过文件进行,因而相当缓慢。同一台服务器上的不同CGI程序之间的通信也相当麻烦。
6、安全
有些CGI版本有明显的安全弱点。即使是使用最新的标准和PERL等语言,系统也没有基本安全框架。而Java定义有完整的安全机制,包括SSL/CA认证、安全政策等规范。
Servlet具有类型检查特征,并利用Java的垃圾收集和没有指针的设计,使得Servlet避免了内存管理等问题 。
Servlet缺陷
1、web.xml配置量太多,不利于团队开发,在写每一个servlet在web.xml都要做相应的配置
2、servlet具有容器依赖性,不利于单元测试
3、servlet处理的请求很局限
4、页面内容展示极差。
Servlet生命周期
Servlet的生命周期是由Servlet的容器来控制的,它可以分为3个阶段;初始化,运行,销毁。
当客户端第一次请求Servlet时,Servlet被加载到内存中,容器会创建Servlet实例,并调用其init()方法进行初始化工作
容器创建请求对象和响应对象,然后调用Servlet的service()方法为客户端提供服务
当Servlet不再被需要时,容器调用Servlet的destory()方法将Servlet实例销毁。
当客户端请求的Servlet已经存在于服务器内存时,容器会创建对应的线程调service()方法响应客户端请求。在Servlet的整个生命周期中,init()方法和destory()方法只会被调用一次。总之一句话:单实例多线程的方式对外提供服务。