Servlet生命周期及Servlet类详解

一.面试常考问题

  • 问题1:请回答Servlet生命周期?
  • Servlet是单实例多线程的,自始至终只会创建一个对象来响应用户请求。

  • ①如果web.xml中没有配置load-on-startup,则当用户第一次请求到达时创建servlet类的对象,然后使用该对象依次调用service(ServletRequest,ServletResponse)—service(HttpServletRequest,HttpServletResponse)—doGet/doPost方法响应用户请求;当用户请求再次到达时,不会重新创建对象,直接使用已经创建的对象调用service—service—doGet/doPost进行响应。

  • ②如果web.xml中有该Servlet的load-on-startup配置,则服务器启动时会按照load-on-startup配置的加载顺序依次创建Servlet对象,当请求到达时直接使用对象调用service-service-doGet/doPost方法进行相应。

  • ③当服务器关闭时,就销毁Servlet对象实例

  • 问题2:为什么创建的servlet是继承自httpServlet,而不是直接实现Servlet接口?
  • HttpServlet已经实现了HTTP协议处理。

二.Servlet详解

(1)什么是Servlet类

  • servlet是Server+Applet的缩写表示服务器应用。Servlet其实就是一套规范,按照servlet规范编写的程序可以直接运行在支持servlet规范的java服务器上。

Servlet就是继承了(javax.servlet.http.HttpServlet)类、能够接收请求的Java类。


(2)Servlet类创建

  • ①创建过程

a.创建一个类(类名通常以Servlet结尾)
b.继承(javax.servlet.http.HttpServlet)类
c.重写doGet和doPost方法
d.如果get请求和post请求的处理方式相同,则在doGet中调用doPost,然后将处理请求的逻辑代码写在doPost方法中

  • ②Servlet类三种创建方式:

a.implements Servlet
b.extends GenericServlet
c.extends HttpServlet
在实际项目开发中,我们通常采用第三种继承HttpServlet的方式创建Servlet类,HttpServlet已经实现了HTTP协议处理


(3)Servlet接口

  • Servlet是一套规范,那么里面的Servlet结构自然很重要了。
  • Servlet接口定义如下:

public interface Servlet {

    public void init(ServletConfig config) throws ServletException;

    public ServletConfig getServletConfig();

    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

    public String getServletInfo();

    public void destroy();
}

  • init在容器启动时会被容器调用(load-on-startup设置为负数或者不设置时会在Servlet第一次被调用时才被调用),只会调用一次;
  • getServletConfig用户获取ServletConfig;
  • service方法用于处理一个具体的请求;
  • getServletInfo方法用于获取Servlet相关信息,这个方法要自己实现,默认返回空字符串。
  • destory主要用于Servlet销毁时释放资源,一般是关闭服务器时,也只会调用一次。

(4)Servlet请求响应流程:

  • 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且知道B/S模式(浏览器/服务器)。

在这里插入图片描述

一个Java Servlet就是一个小型Java应用程序,它可以继承HttpServlet实现,运行在Web服务器中。Servlet会接收并响应来自浏览器的请求,通常是基于Http协议的请求。


(5)tomcat和servlet的关系

  • Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件.
    在这里插入图片描述
  • ①:Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可以通过request对象调用对应的方法查询到。
  • ②:Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器


  • 补充Servlet生命周期图解
    在这里插入图片描述

Invest in yourself while you are young.
在这里插入图片描述
2020.03.08

发布了24 篇原创文章 · 获赞 55 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45393094/article/details/104714798