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的源码中查看。

  

原文地址:https://www.cnblogs.com/chihirotan/p/5862115.html