Servlet学习1-- Servlet基本介绍

2022-04-09  本文已影响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接口中定义了以下方法:

当用户发送请求到服务器时,服务器将使用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
上一篇下一篇

猜你喜欢

热点阅读