zoukankan      html  css  js  c++  java
  • 回顾servlet生命周期(代码测试),读取初始化参数

    servlet生命周期

    为简洁,本例使用注解方式来测试,代码部分很简单,只需要新建一个serlet,继承自HttpServlet,重写init,doGet,doPost,destory方法即可,使用注解@WebServlet注解分别测试存在loadOnStartup 和不存在loadOnStartup情况

    package com.demo;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet(value = "/my", loadOnStartup = 0)
    public class MyServlet extends HttpServlet {
    
        public MyServlet() {
            System.out.println("create");
        }
    
        @Override
        public void init() throws ServletException {
            System.out.println("init");
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("service");
        }
    
        @Override
        public void destroy() {
            System.out.println("destory");
        }
    
    }

    一、当配置有loadOnStartup且值大于等于0时,web服务器启动即会创建和初始化该servlet,且loadOnStartup数值越小,越优先执行,后续每次访问该servlet,将会调用一次service服务(doGet/doPost),关闭web服务,调用destory方法,销毁servlet

    二、当未配置loadOnStartup时,web服务器启动时不会初始化该servlet,当第一次访问该servlet时,才会进行创建并初始化,后续每次访问该servlet,都将会调用一次service服务(doGet/doPost),关闭web服务,调用destory方法,销毁servlet。

    三、servlet中init和destory方法每次都执行一次,servlet为单实例,但并没有使用单例模式

    获取初始化参数

    在注解@WebServlet中可添加初始化参数initParams

    @WebServlet(value = "/my", loadOnStartup = 0, initParams = {
            @WebInitParam(name = "name", value = "val", description = "desc"),
            @WebInitParam(name = "init", value = "initValue") })
    public class MyServlet extends HttpServlet {
          ......  
    }

    servlet提供了一些方法来处理初始化参数,这些方法被定义到接口ServletConfig中,

     可通过getInitParameter(String)获取具体某个参数的值,也可以通过遍历来获取所有初始化参数的值

    @Override
        public void init() throws ServletException {
            System.out.println("init");
            Enumeration<String> initParameterNames = this.getInitParameterNames();
            
            while (initParameterNames.hasMoreElements()) {
                String nextElement = initParameterNames.nextElement();
                System.out.println(this.getInitParameter(nextElement));
            }
    
        }
  • 相关阅读:
    没有加注解的后果
    异常:javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt;
    页面的跳转
    SpringBoot的修改操作
    抛出异常
    SpringBoot中的控制层的程序中的方法有返回值的原因
    Maven创建的项目使用SpringBoot框架运行时Progress窗口出现的过程
    @Entity注解不同来源
    maven项目不能正常导入到eclipse中
    使用mpvue开发小程序特别需要注意生命周期勾子created和beforeCreate问题
  • 原文地址:https://www.cnblogs.com/qq931399960/p/10283952.html
Copyright © 2011-2022 走看看