Servlet的生命周期

目录

一、什么是Web服务器

二、什么是Servlet

三、常见的Servlet服务器

四、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()方法传入了HttpServletRequestHttpServletResponse两个对象,分别代表HTTP请求和响应。我们使用Servlet API时,并不直接与底层TCP交互,也不需要解析HTTP协议,因为HttpServletRequestHttpServletResponse就已经封装好了请求和响应。

@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的生命周期

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值