美文网首页
Servlet学习1-- Servlet基本介绍

Servlet学习1-- Servlet基本介绍

作者: 张氏小毛驴 | 来源:发表于2022-04-09 14:23 被阅读0次

    一.Servlet介绍

    1. 什么是Servlet

      Servlet来自两个单词:Server和Applet,是一个在服务器上运行的Java程序。

      与普通Java程序不同的是,Servlet是由服务器去调用的,可以对浏览器或者其他HTTP客户端发送的请求进行 处理,从原理上来说,Servlet可以响应任何类型的请求,但绝大数情况下是用来扩展基于HTTP协议的web服务器。

    2. 为什么要使用Servlet

      Servlet可以处理请求和发送响应,使用Servlet跟浏览器交互 ,能生成动态Web内容。

    3. tomcat和servlet的关系

      tomcat是web应用服务器,是一个Servlet/JSP容器,Tomcat能够处理客户请求,把请求传给servlet,并且将servlet的响应回送给客户端。

      工作模式是:

      • 客户端浏览器发送请求到服务器(tomcat)
      • 服务器(tomcat)启动并且调用Servlet,Servlet根据客户端请求生成响应,将响应内容传给服务器
      • 服务器将响应返回客户端

    二.Servlet的工作原理

    Servlet本质上就是一个Java接口,所有Servlet类必须直接或间接实现。
    
    Servlet接口中定义了以下方法:
    
    • public void init(ServletConfig servletConfig) throws ServletException
    • public ServletConfig getServletConfig()
    • public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException
    • public String getServletInfo()
    • public void destroy()

    当用户发送请求到服务器时,服务器将使用Servlet容器调用servlet的Service()方法,并且会传入一个ServletRequest对象和一个ServletResponse对象,这两个对象都是由Servlet容器创建的,程序员不需要实现,可以直接使用。

    容器将当前的请求封装在了ServletRequest对象,开发者可以不需要去解析原始的HTTP数据,直接调用封装好的方法即可,而当开发者要返回响应给客户端时,只需操作ServletResponse对象就可以了。

    对于每一个应用程序,Servlet容器还会创建一个ServletContext对象,这个对象封装了应用程序的环境详情,每一个应用程序只有一个ServletContext,可以通过ServletContext获取一些信息。

    三.Servlet的生命周期

    在Web容器中,Servlet主要经历3个阶段,这3个阶段就是Servlet的生命周期,主要是init(),service()和destroy()方法,这一部分都是由Servlet容器管理的。
    
    1. 在浏览器第一次请求服务时,容器将加载Servlet类,实例化一个Servlet对象出来,随即调用Servlet对象的init()方法完成初始化操作,只会调用一次。(后续的请求不会再调用init函数)
    2. 当浏览器请求Servlet时候,Servlet容器会调用对象的service()方法,开始进行工作,处理请求,作出响应给浏览器,都是在这里实现。
    3. 当web容器关闭时,会调用Servlet对象的destroy()进行资源的释放,然后该对象会被垃圾回收器回收。

    下面编写一个简单的Servlet来验证Servlet的生命周期:

    如何创建项目可以参考另一篇文章:Idea创建JavaWeb项目以及配置Tomcat

    package cap.web;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import java.io.IOException;
    
    @WebServlet("/TestServlet")
    public class TestServlet implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("Servlet初始化....");
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("Servlet正在工作...");
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
            System.out.println("Servlet正在销毁...");
        }
    }
    

    这里使用了注解的方式配置访问的路径为/TestServlet.

    在浏览器中访问该Servlet,控制台会输出如下信息:

    第一次访问,会调用init(),再调用service(),所以会先打出“Servlet初始化..." 和"Servlet正在工作..."

    然后刷新几次,只会调用service(),打印出"Servlet正在工作..."

    最后当关闭tomcat后,会调用destroy(),打印出"Servlet正在销毁"

    servlet1.png

    四.Servlet的体系结构

    Servlet是一个接口,在包`javax.servlet.Servlet`,它的实现类是:`GenericsServlet`.
    
    `javax.servlet.GenericsServlet`是一个抽象类,有一个直接的子类:`HttpServlet`.
    
    `javax.servlet.http.HttpServlet`也是一个抽象类,继承自`GenericsServlet`.
    
    如下图:
    
    servlet2.png
    • GenericsServlet:将Servlet接口中的其他方法做了默认的空实现,只将service()方法作为抽象方法,以便将来定义Servlet类时,直接继承GenericsServlet,只要实现service()就可以。

    • HttpServlet:对HTTP协议做了封装,简化了操作(后面都以继承HttpServlet开发)

      操作步骤:

      1. 定义一个类继承自HTTPServlet。
      2. 重写doGet()和doPost()方法。

    相关文章

      网友评论

          本文标题:Servlet学习1-- Servlet基本介绍

          本文链接:https://www.haomeiwen.com/subject/jgqsjrtx.html