• 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方法
     
     
     
  • 相关阅读:
    树状数组
    Windows系统重装
    桶排序
    PCL+VS2010环境配置
    刷题
    杭电ACM——自我强化步骤
    杭电ACM题单
    centos7 ifconifg没有ip
    centos7切换图像界面和dos界面
    oracle with as 的用法
  • 原文地址:https://www.cnblogs.com/liyang6/p/10497146.html
Copyright © 2020-2023  润新知