JavaWeb 学习笔记(二)Servlet生命周期

来源:互联网 发布:剑网三花钱知乎 编辑:程序博客网 时间:2024/04/20 04:58

Servlet概述

五个方法,三个生命周期方法,其中有两个只执行一次
生命周期方法:

  • void init (ServletConfig config):出生之后(1次)
  • void service(ServletRequest req,ServletResponse res) :每次处理请求时都会被调用
  • void destroy():临死之前(1次)

特性:

  • 单例,一个类只有一个对象;当然可能存在多个Servlet类!
  • 线程不安全,效率高

Servlet类由我们来写,但对象由服务器来创建,并且由服务器调用相应的方法。

(1)什么是servlet
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

  • 接收请求数据;
  • 处理请求;
  • 完成响应;

例如客户端发出登陆请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们来自己编写,每个Servle必须实现javax.servlet.Servlet接口

每个Servlet都不同,相当于不同的报员完成自己的任务,在Servlet之前需要进行调度分配。
这里写图片描述

(2)实现Servlet的方式(由自己来写)
实现Servlet有三种方式:

  • 实现javax.servlet.Servlet接口;
  • 继承javax.servlet.GenericServlet类;
  • 继承javax.servlet.http.HttpServlet类;这个类更方便,它继承自GenericServlet,是专门为Http编写的

通常会继承HttpServlet类来完成我们的Servlet,但学习还是从javax.servlet.Servlet接口开始。查看API帮助文档Servlet的五个方法

public interface Servlet{    public void init (ServletConfig config) throws ServletException;    public ServletConfig getServletConfig();    public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException;    public String getServletInfo();    public void destroy();}

Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用;并且Servlet的对象也是由Tomcat来创建。
方法解释:

  • init (ServletConfig config)它是生命周期方法,它会在Servlet对象创建之后马上执行,并只执行一次!(出生之后)Servlet是单例对象
  • destroy()它是生命周期方法,它会在Servlet被销毁之前调用,并且也只调用一次。这个方法并不是直接摧毁了对象
  • service(ServletRequest req,ServletResponse res)它是生命周期方法,会被调用多次,每次处理请求都是在调用这个方法
  • getServletConfig()获取Servlet的配置信息
  • getServletInfo()获取Servlet的信息,用处不是太多,服务器基本不会调用这个方法

Servlet的生命周期

如何让浏览器访问Servlet:
这里写图片描述
这个是web.xml文件的设置:
这里写图片描述

  • servlet-class:是自己实现Servlet接口的.java文件的类名
  • 上下两个xxx的servlet-name要相同

对上面的文件做一下简单的介绍:

  1. 给Servlet指定一个Servlet路径!也就是将一个路径配给Servlet(让Servlet与一个路径绑定在一起)这需要在web.xml中对Servlet进行配置
    web.xml文件<servlet>    <servlet-name>XXX</servlet-name>    <servlet-class>servlet.AServlet</servlet-class></servlet><servlet-mapping>    <servlet-name>XXX</servlet-name>    <url-pattern>/xxx.servlet</url-pattern>此处必须以斜线开头,/后代表Servlet的路径</servlet-mapping>
    上面这个文件可以理解浏览器访问的是url-pattern所指定的路径,通过servlet-mapping中提供的名称访问到了响应的servlet
  2. 浏览器访问Servlet路径

自己动手写第一个Servlet:
有关Intellij工程如下:
这里写图片描述
web.xml内容如下:

 <servlet>        <servlet-name>HelloWorld</servlet-name>        <servlet-class>HelloWorld</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>HelloWorld</servlet-name>        <url-pattern>/HelloWorld</url-pattern>    </servlet-mapping>

在HelloWorld.java中类实现了javax.servlet.Servlet接口,每个方法的实现都是System.out.println("方法名()...");,主要是为了看一下生命周期的过程:

访问localhost:8080/JavaWeb/HelloWorld
这里写图片描述

当访问了两次Servlet时,可以看到init()执行了一次,service()执行了两次,点击关闭服务destroy()执行了一次

这里写图片描述

这里写图片描述

本人是菜鸟一枚,当做学习笔记写博客。谢谢各路大咖驻足审阅