zoukankan      html  css  js  c++  java
  • servlet的生命周期

     
    重点内容:
    Servlet的生命周期:Servlet交给Tomcat服务器运行的
     生命周期相关的方法生命周期:
      1.构造方法:当第一次访问servlet的时候调用,一般情况下,构造方法只会执行一次。(servlet在tomcat中是单例的)

      2.init():servlet初始化--在构造方法执行之后执行,并且也只会调用一次
      3.service()方法:每次调用servlet都会调用 (调用多次) 用于调用doGet() doPost() 处理请求(根据不同的请求调用不用的处理方法)
      4. destroy()方法:servlet销毁时调用 (重新部署项目、重启服务器调用、关闭服务器调用)

    load-on-startup:servlet自动加载。如果servlet的初始化参数比较多,那么第一次访问的时候,就会占用很长时间。

    将该servlet提前到服务器启动的时候创建
    配置:

    <servlet>
        <servlet-name>lifeCycleServlet</servlet-name>
    
        <servlet-class>com.igeekhome.servlet.LifeCycleServlet</servlet-class>
    
         <!-- 将该servlet提前到服务器启动的时候创建 -->
    
       <load-on-startup>1</load-on-startup> <!-- 数值:优先级 数值越大,优先级越低 -->
    
    </servlet>
    <servlet-mapping>
         <servlet-name>lifeCycleServlet</servlet-name>
        <url-pattern>/life</url-pattern>
    </servlet-mapping>
    

      

      
     
    HttpServletRequest:请求对象  获取请求参数
    HttpServletResponse:响应对象  设置响应信息
    ServletContext
    ServletConfig:获取加载servlet时初始化参数(一个web应用可以有多个servletConfig对象,取某一个Servlet的初始化参数,只能针对该servlet对象的ServletCOnfig对象进行获取)
    (1)创建:在初始化servlet时创建该对象
    (2)获取:在init()有参方法中进行获取
         init(ServletConfig config)中的方法:
    • ① java.lang.String               getInitParameter(java.lang.String name)   获取指定初始化参数值
    • ② java.util.Enumeration<java.lang.String>     getInitParameterNames()  返回初始化参数的name(以枚举类型返回) 如果该servlet没有初始化参数 则返回空的枚举。
    • ServletContext                              getServletContext()        返回ServletContext对象
    • ④ java.lang.String                                            getServletName()  返回servlet的名称
     
     
    ServletContext对象:servlet上下文对象,代表了web应用环境(一个web应用只有一个servlet上下文对象)
    ServletConfig对象包含了ServletContext对象 

    ServletContext对象:
      创建:在加载web应用的时候创建该对象
      获取:从ServletConfig中获取(从ServletRequest对象中也能获取)
     
    常用方法:(数据共享方式:域对象,GET+URL)
    域对象相关:(域对象:获取数据 设置数据 用于数据在不同资源间的共享)【 ServletContext是一个域对象】(方法)
     void
    removeAttribute(java.lang.String name)  移除属性
     void
    setAttribute(java.lang.String name, java.lang.Object object)   设置属性
     java.lang.Object
    getAttribute(java.lang.String name)   获取属性
     java.util.Enumeration<java.lang.String>
    getAttributeNames()   获取多个属性
    java.lang.String
     返回当前应用路径
      java.lang.String  getInitParameter(java.lang.String name) 全局参数
     java.util.Enumeration<java.lang.String>
    getInitParameterNames()    获取全局参数
    boolean
    setInitParameter(java.lang.String name, java.lang.String value)   设置初始化参数
       
     
    与转发有关的方法:
    getRequestDispatcher(java.lang.String path)  分派,转发
     
     
     
    界面跳转:
     html->html
    html->servlet
    servlet->html
    servlet->servlet
    重定向(set)
    转发(get)
    1.地址发生改变,指向重定向后的地址
    1.地址不会发生改变
    2.重定向可以重定向到当前web资源,也可以定向到其他web资源或者网络资源都可以
    2.转发只能转发到当前web资源
    3.不能使用request域对象传值 ,重定向前后两个资源的request是不一样
    3.转发可以使用request域对象传值
     
    域对象:用于数据在不同资源间的共享
    域对象: ServletContext   HttpServletRequest  HttpSession  PageContext
    重定向:
    (1)拼接参数(适用于简单字符串)
        例:reapose.sendReadirect("d?name=jack");
                Person person = new Person("jack",20);
      (2)使用域对象
             例 :  ServletContext sc = request.getServletContext( );
                sc.setAttribute("person",person);
              request.setAttribute("person",person );注意在“d”中无法接收因为重定向 “c”"d"是两个不同的request对象
    重定向:
    Servlet传递
    response.sendRedirect("d");
    config配置
    获取web应用路径
    System.out.println(context.getContextPath( ));
    设置域对象
    Context.setAttribute("name",张三);
    获取域对象
    System.out.println(context.getAttribute("name"));
    移除对象
    System.out.println(context.getAttribute("name") );
    context.removetAttribute("name");
    数据共享方式:
    GET方式提交 拼接在URL后面
    location.href = "c?name="+val;
    局限性:只能传递string类型,不能传递对象
    使用域对象
    会话管理:对浏览器客户端与服务端的会话过程中的会话数据进行管理
    现实:打开QQ   开始聊天   结束聊天     【聊天记录->会话数据】
    Web:打开网页  浏览数据    关闭网页
    域对象:HttpServletRequest(必须使用转发技术)  ServletContext(数据覆盖,因为整个web应用只有一个上下文对象)
     
    转发
    进行转发:
    r equest.getRequestDisPathcher(“d”).forward(request,response);
    跳转到index.jsp——html   转发地址保持不变
    (1)获取上下文对象
       ServletContext = request.getServletContext();
    (2)获取转发对象
        RequestDispatcher rd  = Context.getRequestDispatcher("/index.html“);
        RequestDispatcher rd  =request.getRequestDispatcher("/index.html“);
    (3)执行转发
    (4) 字符编码集
    response.setHead("context-type","text/html",charset=utf-8);
    request.setCharacterEncoading("utf-8");
     
     
    实现过程:
    1.通过配置文件获取到完整类名
    2.通过完整的类名创建字节码对象
    3.通过反射创建servlet对象(构造方法)
    Object  obj = clazz.newInstance( );
    4.获取init方法
    Mothod m = object.getDeclareMethod("init",ServletConfig.class) 实例化servlet对象
    5.调用init方法 
    m.invoke(obj.config)
    6.获取service方法
     
     
     
  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/liyang6/p/10497146.html
Copyright © 2011-2022 走看看