简介
- Servlet是sun公司提供的一门用于开发动态web资源的技术
- Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1.编写一个Java类,实现servlet接口
2.把开发好的Java类部署到web服务器中
Servlet接口实现类
- Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet
- HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避
免直接去实现Servlet接口 - HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因
此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法
servlet执行过程分析
- 客户端发送HTTP请求
- 请求报文到达服务器之后,解析转换生成request对象, 传给engine、host、context
- 服务器提供一个映射关系 根据 web.xml 找到
子元素的值“/first”的 元素 - 读取
元素的 子元素的值,由此确定Servlet的名字为”first” - 找到
值为HelloServlet的 元素 - 读取
元素的 子元素的值,由此确定Servlet的类名为com.cskaoyan.HelloServlet - 到Tomcat安装目录/webapps/Demo1/WEB-INF/classes/com/cskaoyan目录下查找到HelloServlet.class文件
- Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第11步,否则,执行第9步。
- 装载并创建Servlet的一个实例对象。
- 调用Servlet对象的init()
- 将Connector创建的代表请求报文的HttpServletRequest对象以及代表响应的HttpServletResponse对象在调用servlet的service()方法时作为参数传递进去
- Web应用程序被卸载、重新启动或者服务器关闭之前,Servlet引擎将会卸载Servlet,并在卸载之前调用servlet的destroy()方法
servlet的生命周期
- Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。
- 针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出(或应用
停止),servlet实例对象才会销毁 - 在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创
建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调
用doXXX方法。
ServletContext(掌握)
- ServletContext对象,在应用被加载的时候,进行实例化;应用被销毁之前,被销毁;它的生命周期基本上和应用的生命周期保持一致
- 每个应用中有且只有唯一的一个ServletContext对象。
- 在当前应用下,无论任何一个servlet,都可以拿到该对象的引用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!