`
hanyi366
  • 浏览: 289264 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

super.init(config)

    博客分类:
  • Java
 
阅读更多
servlet的init(ServletConfig config)方法中会有一个super.init(config);其原理如下:
1.如果用户不需要设置一些初始化操作,那么init()方法的实现可有可无,因为可以从父类GenericServlet中继承得到.

2.如果用户需要servlet通过<init-param>从web.xml中读取initialization parameters或者configuration data,那么就需要显式实现init()方法.

3.GenericServlet 提供两个overloaded形式的方法如下:
  public void init() throws ServletException
  public void init(ServletConfig) throws ServletException

4.Servlet interface只定义一个init(ServletConfig)方法,而且servlet加载时必须被调用,但只在第一次加载被调用一次.

5.GenericServlet实现了这个init(ServletConfig)方法,这个方法先保存ServletConfig reference,然后调用init()方法.

6.如果用户servlet实现init()方法并在其中填充自己需要初始化的信息,这个init()会被GenericServlet中的init(ServletConfig)方法调用.因为ServletConfig reference已经

被保存,所以你可以访问web.xml中的<init-param>.

7.如果用户servlet实现init(ServletConfig),那么就覆盖了GenericServlet(父类)的init(ServletConfig)方法,因此,GenericServlet会调用子类的方法,而不会保存

ServletConfig reference,必须执行super.init(config);才能保存ServletConfig reference访问web.xml中的<init-param>.

8.所以你有两种方法初始化,如下:
第一种方法是
public class LoginServlet extends HttpServlet {
public void init() throws ServletException {

}
  //...Rest of Servlet
}
第二中方法是
public class LoginServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
   super.init(config);
   // ...Remainder of init() method
}
  //...Rest of Servlet
}

9.servlet初始化正常结束,才能处理处理用户的请求,如果在初始化方法init()中出现错误,那么需要throw a ServletException或者父类的UnavailableException.这会告诉

servlet容器初始化失败,不能处理任何请求.


10.在GenericServlet中,init(ServletConfig)先被调用,主要是用于保存ServletConfig reference,然后调用init(),因此这时候init()可以用于加载在web.xml里配置的<init-param>的初始化参数, 在web.xml中设置初始化参数如下

<servlet>
  <servlet-name>rbacAction</servlet-name>
  <servlet-class>
   cdc.dm.servlet.BaseServlet
  </servlet-class>
  <init-param>
   <param-name>service-class</param-name>
   <param-value>
    cdc.dm.action.rbac.impl.RbacActionImpl
   </param-value>
  </init-param>
</servlet>

11.在HttpServlet中如果覆盖init()不会影响init(ServletConfig)对ServletConfig reference的保存,所以这种情况下在init()中可以获取初始化参数

12.在HttpServlet中如果覆盖init(ServletConfig),则ServletConfig reference就不会被保存,所以这是时候当init(ServletConfig)运行完后再调用init()时,init()就找不到ServletConfig reference了。所以为了能够在init()中获取初始化参数,应该在覆盖init(ServletConfig)时首先要调用super.init(config)也就是GenericServlet的init(ServletConfig)来保存ServletConfig reference

分享到:
评论

相关推荐

    PyPI 官网下载 | aws-cdk.aws-config-1.108.1.tar.gz

    evaluation_frequency=config.EvaluationFrequency.ONE_HOUR, config_rule≧config.ManagedRule( managed_rule_identifier="IAMPasswordPolicy", ) ) ``` 在这个例子中,我们定义了一个新的配置规则,它每小时...

    JSP开发Servlet重写init()方法实例详解

    如果选择重写`init(ServletConfig config)`,则必须确保调用`super.init(config)`,以便将配置信息正确地传递给父类,否则Servlet可能无法正确地获取其配置信息。 以下是如何重写这两种`init()`方法的示例: ```...

    JAVA项目服务器启动时自启动指定的Servlet,并定时执行任务

    super.init(config); // 在这里添加你的初始化代码 System.out.println("AutoStartupServlet已启动并执行初始化操作..."); } } ``` 二、定时执行任务 在Servlet中实现定时任务,我们可以使用Java的定时框架如`...

    AS3.0+XML列表一曲一图音乐播放器

    super(); this.stage.scaleMode = flash.display.StageScaleMode.NO_SCALE; this.stage.align = flash.display.StageAlign.TOP_LEFT; configURL = "settings.xml"; if (this.root.loaderInfo.parameters.config...

    servlet系列2

    String myConfigParam = config.getInitParameter("myConfigParam"); if (myConfigParam != null) { System.out.println("读取到的配置参数: " + myConfigParam); // 在这里可以使用这个配置参数来初始化Servlet...

    带中文注释的 linux 0.11 源代码

    .....\.......\.....\config.h .....\.......\.....\fs.h .....\.......\.....\hdreg.h .....\.......\.....\head.h .....\.......\.....\kernel.h .....\.......\.....\mm.h .....\.......\.....\sched.h ....

    Servlet_API_中文版

    return this.config.getInitParameter(name); } ``` - **`getInitParameterNames()`**:返回当前 Servlet 已配置的所有初始化参数的枚举。如果未配置任何初始化参数,则返回空的枚举。 ```java public ...

    基于YOLOv5+Deepsort实现车辆行人追踪和计数。代码封装成一个Detector类,更容易嵌入到自己的项目中。

    项目简介: 使用YOLOv5+Deepsort实现车辆行人追踪和计数,代码封装成一个Detector类,更容易嵌入... super(Detector, self).__init__() self.init_model() self.build_config() def init_model(self): self.weig

    有关ServletConfig与ServletContext的访问

    String driverType = config.getInitParameter("driver_type"); // 使用driverType } ``` 相比之下,ServletContext对象是一个全局的、共享的上下文,它代表了一个Web应用程序的环境。ServletContext在Web应用...

    基于android 人脸识别

    mBitmap = Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.RGB_565); mCanvas = new Canvas(mBitmap); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeCap(Paint.Cap.ROUND); ...

    火山-qmui初始化方法.rar

    QMUI.init(this, config); ``` 这里你可以自定义状态栏和导航栏的颜色。 5. **使用QMUI组件**: 初始化完成后,你就可以在你的布局文件中引入Qmui的组件,如QMUIButton、QMUITableView等,并在代码中进行交互。...

    python 读写软件的配置文件 源码

    config.read('config.ini') # 读取文件 host = config.get('Database', 'host') database = config.get('Database', 'database') user = config.get('Database', 'user') password = config.get('Database', '...

    newnode:NewNode分散式内容分发网络

    新节点 整合状态 安卓 添加到您的build.gradle中: ... 添加到您的应用程序或活动中: ...config.connectionProxyDictionary = NewNode.connectionProxyDictionary; NSURLSession *session = [ NSURLSes

    MyLink.jar

    super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { /* 配置config * 参数1:数组第一维的长度 * 参数2:数组第二维的长度 * 参数3:第一张...

    servlet实现用户登录小程序

    super.init(config); } @Override public void init() throws ServletException { super.init(); } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, ...

    Servlet_API_中文版.pdf

    开发者通常需要覆盖`init()`方法,但别忘了调用`super.init(config)`来确保`GenericServlet`的初始化行为。 7. `void log(String msg)`: 使用Servlet上下文的日志功能记录消息。 8. `void log(String msg, ...

    ServletContext与ServletConfig的深度分析

    String absPath = config.getInitParameter("absPath"); ``` ##### 3.2 获取`ServletConfig` 在Servlet的`init`方法中,可以通过参数获取`ServletConfig`对象: ```java public void init(ServletConfig config) ...

    web系统消息实时推送

    super.init(config); System.out.println("Server start============"); } public static List&lt;MessageInbound&gt; getSocketList() { return InitServlet.socketList; } } public class TestWebSocketServlet ...

Global site tag (gtag.js) - Google Analytics