Servlet生命周期及Servlet类详解

举报
辰兮 发表于 2022/03/23 01:06:33 2022/03/23
【摘要】 文章目录 一.面试常考问题二.Servlet详解(1)什么是Servlet类(2)Servlet类创建(3)Servlet接口(4)Servlet请求响应流程:(5)tomcat和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();
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 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

文章来源: blessing.blog.csdn.net,作者:辰兮要努力,版权归原作者所有,如需转载,请联系作者。

原文链接:blessing.blog.csdn.net/article/details/104714798

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。