Servlet详解之两个init方法的作用

在Servlet中 javax.servlet.GenericServlet类
继承自java.lang.Object
实现了Serializable,,servlet ,ServletConfig 三个接口
被继承对象javax.servlet.http.HttpServlet

(这是我们常用的一个类)

但仔细看GenericServlet的API,会发现有两个init方法
void init() 
void init(ServletConfig config) 
而在Servlet接口中只有一个void init(ServletConfig config) 方法

在此做一下解释:

先看一下官方说明:
void init() 
A convenience method which can be overridden so that there‘s no need to call super.init(config).

void init(ServletConfig config) 
Called by the servlet container to indicate to a servlet that the servlet is being placed into service.

看一下这两个函数的源码:GenericServlet.class

[java] view plaincopyprint?

  1. <span style="font-size:18px;">
  2. </span>

[java] view plaincopyprint?

  1. <span style="font-size:18px;">public void init(ServletConfig config) throws ServletException {
  2. this.config = config;
  3. this.init();
  4. }</span>

[java] view plaincopyprint?

  1. <span style="font-size:18px;">
  2. </span>

[java] view plaincopyprint?

  1. <span style="font-size:18px;">public void init() throws ServletException {
  2. }</span>

可以看到有参的init方法又调用了无参的init方法,这是什么原因呢。
补充一句,Tomcat默认调用的是有参的。

如果你曾复写过init()方法,你应该能看出些端详
如果我们在想调用init方法时执行一些操作,那怎么办呢,只要我们复写无参的init方法,tomcat在调用完有参的init方法时调用无参的
init方法,这样两个操作都执行了。而且我们也不用写super.init();试想一下,如果没有无参的init方法,那我们复写有参的init方法
时忘记了些super.init(config)方法,那么config就不能初始化了,而这样设计即使我们不调用super的方法,也不会出问题。何乐而不为呢!

时间: 2024-08-27 22:35:22

Servlet详解之两个init方法的作用的相关文章

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

Servlet是Sun公司提供的一门用于开发动态web网页的技术.Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了. 到底什么是Servlet呢? 通俗一点,只要是实现了servlet接口的java程序,均称Servlet.Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小

servlet详解(第一篇)

servlet基本概述 生命周期方法: void init(ServletConfig):出生之后(1次): void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用: void destroy():临死之前(1次): 特性: 单例,一个类只有一个对象:当然可能存在多个Servlet类! 线程不案例的,所以它的效率是高的! Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法.

JQuery选择器代码详解(三)——tokenize方法

原创文章,转载请注明出处,多谢! /* * tokenize函数是选择器解析的核心函数,它将选择器转换成两级数组groups * 举例: * 若选择器为"div.class,span",则解析后的结果为: * group[0][0] = {type:'TAG',value:'div',matches:match} * group[0][1] = {type:'CLASS',value:'.class',matches:match} * group[1][0] = {type:'TAG'

6Java Servlet详解

Java Servlet技术的核心就是在服务端创建能响应用户请求的对象,被创建的对象习惯上称为一个Servlet对象. 编写一个创建servlet对象的类就是编写一个特殊类的子类,这个特殊的类就是javax.servlet.http包中HttpServlet类.HttpServlet类实现了Servlet接口,实现了响应用户的方法.HttpServlet类的子类被习惯地称为一个Servlet类,这样的类创建的对象习惯地被称为一个servlet对象. 1部署servlet 使用Tomcat 5.x

jQuery选择器代码详解(二)——select方法

原创文章,转载请注明出处,多谢! /* * @param selector 已去掉头尾空白的选择器字符串 * @param context 执行匹配的最初的上下文(即DOM元素集合).若context没有赋值,则取document. * @param results 已匹配出的部分最终结果.若results没有赋值,则赋予空数组. * @param seed 初始集合 */ function select(selector, context, results, seed) { var i, to

Java Web(三) Servlet详解

什么是Servlet? servlet 是运行在 Web 服务器中的Java 程序.servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求.Java Web应用程序中所有的请求-响应都是由Servlet完成. Servlet的工作流程 浏览器与服务器之间的请求和响应都是遵循HTTP协议的(上一篇有介绍HTTP).Tomcat会接受并解析HTTP请求文本,然后封装成HttpServletRequest对象,所有的HTTP头数据都可以通过request相应的方法查询

在Servlet的GenericServlet类中为什么有两个init()方法

想要搞清楚这件事情,必须先了解Servlet容器调用Servlet的过程.调用过程如下 首次访问该Servlet1.调用init(ServletConfig config) 进行初始化,ServletConfig封装了web.xml中<init-param>配置的初始化参数,它由Servlet容器创建,并通过该方法传递给当前serlvet2.调用service(ServletRequest req, ServletResponse res)方法处理客户的请求3.调用destroy()方法销毁给

Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)

一.实现Servlet接口 通过实现Servlet接口来了解Servlet的生命周期 (1)以规范的形式创建一个web应用(即在webapps目录下创建一个web应用) 创建web应用 (2)classes目录下创建一个.java(该java文件为实现Servlet接口) 创建文件夹MyFirstServlet.java 代码如下: package com.focus; import javax.servlet.*; import javax.servlet.http.*; import jav

Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(2)

三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除.Servlet的生命周期被javax.servlet.Servlet这个接口所定义. 所有的Java Servlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行. Servlet引擎是Web 服务器按照Java Servlet API定制的扩展.S