Servlet常用知识
(备注:正文有一张图片转载自其他博主的博客,如果涉及侵权请第一时间联系我删除,带来不便深感歉意)
1.Servlet容器是什么:实现Servlet技术规范的部署环境,容器可以运行Servlet程序
备注:什么是容器:服务器的一种应用程序,服务器的每个端口都有一个程序提供对应的服务,这个程序就是容器
2.Servlet是什么:
@1 Java编写的服务器端的程序
@2 该程序遵循Servlet技规范
3.Tomcat是什么:
@1可以处理访问静态页面的请求,可以看做是一个WEB服务器
(WEB服务器定义:能够为发出请求的浏览器提供文档的程序)
@2 实现了Servlet规范,进而可以运行Servlet程序,所以可以看做Servlet容器
(Servlet规范是Java EE的核心技术规范)
@3 Servlet可以处理动态请求,所以也是应用服务器
(应用服务器定义:实现各种业务逻辑,运行应用程序,提 供应用程序所实现服务的设备)
综上。Tomcat官方定义为Java EE Web应用服务器
4.Servlet全生命周期过程(解决Servlet是如何工作的的疑问)
@1 备注:Tomcat是java编写的,对java技术规范有很好的兼容性
@2 前端请求到达Tomcat,Tomcat负责解析,并找到对应的Servlet
@3 Tomcat通过反射创建Servlet实例,完成Servlet的实例化
@4 Servlet里有好多方法,其中有三个生命周期方法比较重要,分别为init()、destroy()、service()
init()是初始化Servlet的方法,
destroy()是销毁Servlet()时调用的方法
service()是逻辑代码,处理客户请求,doPost()或doGet()
备注:初始化不是实例化,Servlet的实例化(即在内存中生成一个Servlet对象实例)和初始化init不是一回事
destroy()不论被调用与否,最终该实进程都会被销毁,只是销毁前能执行该方法里的代码
@5 Java EE依赖中,Servlet是一个接口,和我们最终使用到的HttpServlet类有如下关系(图片转载自大佬博客,侵删):
–>>自己写的一个Servlet类,继承抽象类HttpServlet
–>>HttpServlet继承抽象类GenericServlet
–>>GenericServlet实现三个接口:Servlet, ServletConfig(记录该servlet基本信息), Serializable(序列化)
Servlet接口:
定义了一个Servlet应该有的几个方法
GenericServlet作用
在init()中给ServletConfig 赋值、给接口中的方法提供默认实现
HttpServlet:
@1 提供例如doPost()或者doGet()方法(不止这么多)
@2 有两个service方法,一个入参列表为ServletRequest、ServletResponse,一个入参列表为 HttpServletRequest、HttpServletResponse,前者在方法内部调用后者,后者则用来转向(根据请求方法调用dopost或者doget)
自己写的Servlet:
主要需要重写doPost()和doGet()方法
5.Tomcat是如何找到对应的Servlet类的:
@1 检索web.xml,根据URL找到前端需要的servlet的名称,再根据名称找到全类名(路径),完成调用
@2 Servlet类名加WebServlet注解,结果与1等价
@3 两者不可以同时使用,相当于映射信息重复,服务器起不来
6.容器中的Servlet原则上只有一个实例,每个请求占用一个线程,多个线程可以作用于同一个Servlet,所以Servlet线程不安全
7.线程执行完毕,会返回线程池或者销毁;和Servlet实例的销毁不是一个概念