Java--Servlet基础

web容器启动

在 WEB 容器启动后,会读取 Servlet 设置信息,将 Servlet 类加载并实例化,并为每个 Servlet 设置信息产生一个
ServletConfig 对象,而后调用 Servlet 接口的 init() 方法,并将产生的 ServletConfig 对象当作参数传入。

Servlet接口

  • init(),在第一次请求servlet时会被调用,且整个生命周期只会被调用一次。一般来说,初始化时servlet容器会通过init()方法将一个ServletConfig对象传递给相应的内部成员变量,以供后续getXXX调用。
  • service(),每当有请求到来,就调用这个方法。
    • HttpServlet中继承了抽象类GenericServlet,而GenericServlet实现了接口Servlet, ServletConfig,所以HttpServlet中需要继承并重写servlet方法,里面封装了GET、POST、PUT等多个HTTP方法,所以当编写自己的httpservlet时,只需要重写相应的http方法。Servlet容器会通过调用service()方法,从而调用到自己重写的http方法。
  • destory(),关闭Servlet容器或者卸载应用程序时调用,一般在这个方法中编写清除代码。
  • getServletConfig(),返回一个ServletConfig对象
  • getServletInfo(),返回一个字符串对象,可以自己定义。

ServletConfig

  • getServletContext(),ServletContext是一个接口,表示Servlet应用程序,每个Web应用程序只有一个上下文,在将一个应用程序不熟到多个容器的分布式环境中,每台Java虚拟机只有一个ServletContext对象。
  • getInitParameter(),可以取得@WebServlet或者 部署描述符 中的配置信息。(@WebServlet还需要配合@WebInitParam来使用)
  • getInitParameterNames(); 取得所有配置信息的名称
  • getServletName(),取得servlet的名称。

GenericServlet

  • 同时implements Servlet, ServletConfig
  • 主要作用:实现了ServletConfig中的所有方法
  • 实现了Servlet中除service外的所有方法。
  • 最重要的是,实现了Servlet中的init方法中要求的“将ServletConfig对象赋予类中的成员变量,以便getXXX调用,但是又没有占据原本的无参init()方法,所以后面如果有需要,还是可以自己重现init()方法来实现自己的初始化,这个无参方法 会在public void init(ServletConfig config)中被调用。

HttpServlet

  • 继承自GenericServlet,实现了GenericServlet唯一的抽象方法service();
  • 所有继承HttpServlet的类,已经可以分别调用http.getServletConfig()和http.getServletContext();,一般来说我们也不需要重写这两个方法。

部署描述符web.xml

  • 放在WEB-INF目录下
  • 优点:如果需要修改配置值,如Servlet路径,则不需要重现编译Servlet类。
  • 优点2:可以将初始参数传给一个Servlet,不需要重新编译Servlet类,就可以对它们进行编辑。
  • 如果同时在@WebServlet和部署描述符上定义值,则部署描述符的优先级更高。

你可能感兴趣的:(Java--Servlet基础)