Javaee----重新回顾servlet
最近的项目涉及到servlet开发,不得不回顾一下java servelt 。 发现lz的基本功还是很差
1. 每一个servlet都必须实现servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,它实现了Servlet接口,而且HttpServlet继承与GenericServlet,因此HttpServlet也实现了Servlet接口,所以我们定义的Servlet只需要继承HttpServlet父类即可。
2. servlet 接口中定义了一个service方法,HttpServlet 对该方法进行了实现,实现方式就是将 ServletRequest 与 ServletResponse 转换为HttpServletRequest 与 HttpServletResponse。然后重载service方法。
3. 在该 service 方法中, 首先获得到请求的方法名, 然后根据方法名调用对应的 doXXX 方法,比如说请求方法为 GET,那么就去调用 doGet方法;请求方法为 POST,那么就去调用 doPost 方法。
4. 在 HttpServlet 类中所提供的 doGet、doPost 等方法都是直接返回错误信息,所以我们需要在自己定义的 Servlet 类中 override 这些方法。
5. Servelt 核心 API 之间的关系 UML 图:
6. Servlet 的启动 (默认是单例Servlet)(默认第一次调用servlet时,执行init方法)
• 在下列时刻Servlet容器装载Servlet:
– Servlet容器启动时自动装载某些Servlet
– 在Servlet容器启动后,客户首次向 Servlet 发出请求
– Servlet的类文件被更新后,重新装载Servlet
• Servlet被装载后,Servlet容器创建一个 Servlet 实
例并且调用 Servlet 的 init()方法进行初始化。在
Servlet的整个生命周期中,init方法只会被调用一次。
a) 使得Servlet容器启动时自动装载某些Servlet(配置load-on-startup属性)
7 对于request.setAttribute("key", "value"); 实际上是维护了一个ConcurrentHashMap
因为request对象时tomcat产生的。所以得冲tomcat的源码中查看。