0


Servlet的生命周期

一、什么是Web服务器

     在了解Servlet之前,我们需要了解Web服务器。Web服务器使用HTTP协议来传输数据。最简单的一种情况是,用户在浏览器(客户端,client)中输入一个URL,然后就能获取网页进行阅览。

    因此,服务器完成的工作就是发送网页至客户端。传输过程遵循HTTP协议,它指明了请求(request)消息和响应(response)消息的格式。
            GET / HTTP/1.1
            Host: www.sina.com.cn
            User-Agent: Mozilla/5 MSIE
            Accept: */*                ┌────────┐
┌─────────┐ Accept-Language: zh-CN,en  │░░░░░░░░│
│O ░░░░░░░│───────────────────────────>├────────┤
├─────────┤<───────────────────────────│░░░░░░░░│
│         │ HTTP/1.1 200 OK            ├────────┤
│         │ Content-Type: text/html    │░░░░░░░░│
└─────────┘ Content-Length: 133251     └────────┘
  Browser   <!DOCTYPE html>              Server
            <html><body>
            <h1>Hello</h1>
            ...

二、什么是Servlet

Servlet(Servlet Applet),全称Java Servlert 是用Java编写的服务器端程序。其主要功能在与交互式的浏览和修改数据,生成动态Web内容。狭义的servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet的类。
     Servlet 运行于支持Java的服务器中,从现实上讲,servlet 可以响应任何类型的请求,但是绝大多数情况下Servlet只用于来扩展基于THHP协议的Web服务器。

    一个
Servlet

总是继承自

HttpServlet

,然后覆写

doGet()

doPost()

方法。

doGet()

方法传入了

HttpServletRequest

HttpServletResponse

两个对象,分别代表

HTTP

请求和响应。我们使用

Servlet API

时,并不直接与底层

TCP

交互,也不需要解析

HTTP

协议,因为

HttpServletRequest

HttpServletResponse

就已经封装好了请求和响应。

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("被请求到了!");
    }

三、常见的Servlet服务器

  • Tomcat:由Apache开发的开源免费服务器;
  • Jetty:由Eclipse开发的开源免费服务器;
  • GlassFish:一个开源的全功能JavaEE服务器

四、Servlet的生命周期

servlet的生命周期,顾名思义,指的就是一个servler从创建到销毁的全部过程:

1.实例化

2.初始化

3.服务

4.销毁

一、实例化

在第一次启动服务器时,会调用它的无参构造方法,创建Servlet的实例

public HomeServlet() {
        System.out.println("1.HomeServlet实例被创建");
    }

二、初始化

重写HttpServlet父类的init()方法,通过实例自动调用init()方法

@Override
    public void init() throws ServletException {
        System.out.println("2.HomeServlet实例初始化");
    }
    

三、服务

    通过该
Servlet

实例,调用

service()

方法,如果子类没有重写该方法,则调用HttpServlet父类的

service()

方法。

    在父类的该方法中进行请求方式的判断,如果是
GET

请求,则调用

doGet()

方法;如果是

POST

请求,则调用

doPost()

方法;

如果子类重写

doGet()或doPost()

方法,则调用子类重写后的

doGet()或doPost()

方法;

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("请求到了!");
        String method = req.getMethod();
        System.out.println("请求方式:" + method);
        
        System.out.println(req.getRemoteHost());
    }

如果子类没有重写

doGet()或doPost()

方法,则调用父类的

doGet()或doPost()

方法,在父类的方法实现中,返回一个

405

状态码的错误页面。

//以doGet()方法举例

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        String msg = lStrings.getString("http.method_get_not_supported");
        sendMethodNotAllowed(req, resp, msg);
    }

 public static final int SC_METHOD_NOT_ALLOWED = 405;

四、销毁

    当服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的
destroy()

方法

@Override
    public void destroy() {
        System.out.println("4.HomeServlet实例被销毁");
    }

五、小结

我们学习到一个servlet从创建到销毁的全过程,称作Servlet的生命周期

标签: tomcat servlet

本文转载自: https://blog.csdn.net/qq_59616295/article/details/126453856
版权归原作者 记得爱蓝色 所有, 如有侵权,请联系我们删除。

“Servlet的生命周期”的评论:

还没有评论