JavaWeb Servlet-原理

1、Servlet实现方式

实现Servlet接口

继承GenericServlet抽象类间接实现。

继承HttpServlet抽象类间接实现。HttpServlet位于javax.servlet.http包中,继承GenericServlet抽象类,是Servlet的二级实现。

2、Servlet工作原理

Servlet接口定义了Servlet和Servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。在一个应用程序中,每种Servlet类型只能有一个实例。

用户请求致使Servlet容器调用Servlet的service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如Tomcat)封装好的,并且不需要程序员去实现,程序员可以直接使用这两个对象。

ServletRequest中封装了当前Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松发给用户。

对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文的环境详情。每个应用程序只有一个ServletContext。没有Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

3、Servlet的生命周期

init()、service()、destroy()是Servlet生命周期的方法。代表Servlet对象从“出生”到“死亡”的过程。

init()方法,当Servlet第一次被请求时,在Servlet容器初始化Servlet对象时,调用且只调用一次这个方法,并且会传入一个ServletConfig对象。

service()方法,每当请求Servlet时,都会调用这个方法,接收应用程序具体的工作。第一次请求调用init()和service()两个方法,在后续的请求中,只调用service()方法。

destroy()方法,当销毁Servlet时,Servlet容器会调用这个方法。在卸载应用程序或关闭Servlet容器时,会发生销毁Servlet情况。这个方法中写一些清除代码。

getServletInfo()方法,返回Servlet描述的字符串。

getServletConfig()方法,返回由Servlet容器传给init()方法的ServletConfig对象。

例如

public class MyServlet 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正在销毁");
    }
}      

4、Servlet工作流程(以tomcat为例)

客户端发送http请求到tomcat容器。

tomcat解析请求资源。

将解析的请求资源封装成一个request对象,同时创建一个response对象。

创建Servlet对象,并调用Servlet类的service()方法,将上一步创建的request对象和response对象作为参数传给service()方法。

在service()方法中,获取request对象的参数,根据具体业务要求处理,并返回响应信息,将响应信息写入到response对象的缓冲区。

tomcat内核从response缓存区获取设置的内容,并将获取的内容组装为http响应。

tomcat将http响应返回给客户端。客户端解析http响应和显示页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值