Servlet

Servlet:JavaEE中的一种重要规范,主要用来处理请求

          使用工具:servlet4.0 Tomcat9.0  jdk需要8.0

                ----林深时见鹿,海蓝时见鲸,梦醒时见你

  • Servlet简介

Servlet是service applet 的缩写,意思是服务的小程序(小指的是servlet的简洁)。他是JavaEE中编写服务端程序的一种重要的技术标准。他需要基于应用服务器或者web容器来实现。

  • Servlet继承结构

 

继承结构中接口和实现类特征的分析

    • Servlet接口(最重要的是前三个方法,这三个方法构成了整个项目的一个生命周期)
      1.init(),创建Servlet 对象后立即调用该方法完成其他初始化工作。
      2.service(),处理客户端请求,执行业务操作,利用响应对象响应客户端请求。
      3.destroy(),在销毁Servlet 对象之前调用该方法,释放资源。
      4.getServletConfig(),ServletConfig 是容器向servlet 传递参数的载体。
      5.getServletInfo(),获取servlet 相关信息。
      - Serializable接口
      可序列化接口,里面啥也没有,是一个标识接口

    • ServletConfig接口(定义了ServletConfig对象下的一个基本信息)
      Servlet 运行期间,需要一些辅助信息,这些信息可以在web.xml 文件中,使用一个或多个元素,进行配置。当Tomcat 初始化一个Servlet 时,会将该Servlet 的配置信息,封装到一个ServletConfig 对象中,通过调用一个叫做init(ServletConfig config)方法,将ServletConfig 对称传递给Servlet

    • GenericServlet接口实现类(他是一个抽象类)
      GenericServlet 是实现了 Servlet 接口的抽象类。
      在 GenericServlet 中进一步的定义了Servlet 接口的具体实现,其设计的目的是为了和应用层协议解耦,在GenericServlet 中包含一个Service 抽象方法。(为了之后进行更好的扩展)

    • HttpServlet
      继承自 GenericServlet
      针对于处理 HTTP 协议的请求所定制。在 HttpServlet 的service()方 法 中 已 经 把 ServletRequest 和 ServletResponse 转 为 HttpServletRequest 和
      HttpServletResponse。
      直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转。实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可。

  • Servlet生命周期

补充:我们在JavaSE中了解到,一个类是不能够直接执行的,如果一个类想执行,那么需要对该类进行实例化,但是我们通过上面所学认识到,servlet执行了,所以他肯定是被实例化了。当tomcat获取到请求需要执行servlet时,tomcat对servlet进行实例化。然后调用一次init()方法,如果我们需要自定义一些初始化的操作,我们需要重写init方法,如果没有,他会执行GenericServlet抽象类中的空的init方法,之后执行service方法。之前在介绍servlet的技术特点的时候提到,servlet是通过单进程多线程的方式去运行,这里的单进程指的就是tomcat容器,多线程是指service方法的执行
Servlet 的生命周期是由容器管理的(容器指的就是tomcat),即servlet的生命周期是有tomcat来管理的。分别经历三各阶段:init():初始化(对servlet进行一些初始化的配制而不是实例化);service():服务;destroy():销毁(清除缓存)
当客户端浏览器第一次请求Servlet 时,容器会实例化这个Servlet,然后调用一次init方法,并在新的线程中执行service 方法处理请求。service 方法执行完毕后容器不会销毁这个Servlet 而是做缓存处理,当客户端浏览器再次请求这个Servlet 时,容器会从缓存中直接找到这个Servlet 对象,并再一次在新的线程中执行Service 方法。当容器在销毁Servlet 之前对调用一次destroy 方法。

  • Servlet处理请求的原理

请求原理

当浏览器基于get 方式请求我们创建Servlet 时,Tomcat首先会拿到请求,解析web.xml文件,根据配置文件中的url映射找到对应的servlet,进行实例化(首先会在缓存中找,如果有就不进行实例化),然后进行实例化,在实例化时会使用Servlet 接口类型作为引用类型的定义,并调用一次init 方法,由于HttpServlet中重写了该方法所以最终执行的是HttpServlet 中init 方法(HttpServlet 中的Init 方法是一个空的方法体),然后在新的线程中调用service 方法。我们自定义的Servlet 中的doGet 方法会被执行。
doGet 方法能够被执行并处理get 请求的原因是
由于在HttpServlet 中重写了Service 方法,所以最终执行的是HttpServlet 中的service 方法。在service 方法中通过request.getMethod()获取到请求方式进行判断如果是Get 方式请求就执行doGet 方法,如果是POST 请求就执行doPost 方法。如果是基于 GET 方式提交的,并且在我们自定义的 Servlet 中又重写了HttpServlet 中的doGet 方法,那么最终会根据Java 的多态特性转而执行我们自定义的Servlet中的doGet 方法。

  • Servlet的作用

1、获取用户提交的数据

2、获取浏览器附加的信息(请求头信息)

3、处理数据(访问数据库或调用接口)

4、给浏览器产生一个相应

5、在相应中添加附加信息


 

posted @ 2021-12-11 14:45  (HelloWorld!)  阅读(135)  评论(0)    收藏  举报