zoukankan      html  css  js  c++  java
  • 2018/1/3 Servlet+cookie+session

    1、Servlet重要的四个生命周期方法
    构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象 只调用1次。证明servlet对象在tomcat是单实例的。
    init方法: 创建完servlet对象的时候调用。只调用1次。
    service方法: 每次发出请求时调用。调用n次。
    destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。
    只调用1次。

    2、伪代码演示servlet的生命周期
    Tomtcat内部代码运行:
    1)通过映射找到到servlet-class的内容,字符串: gz.itcast.a_servlet.FirstServlet
    2)通过反射构造FirstServlet对象
    2.1 得到字节码对象
    Class clazz = class.forName("gz.itcast.a_servlet.FirstServlet");
    2.2 调用无参数的构造方法来构造对象
    Object obj = clazz.newInstance(); ---1.servlet的构造方法被调用
    3)创建ServletConfig对象,通过反射调用init方法
    3.1 得到方法对象
    Method m = clazz.getDeclareMethod("init",ServletConfig.class);
    3.2 调用方法
    m.invoke(obj,config); --2.servlet的init方法被调用
    4)创建request,response对象,通过反射调用service方法
    4.1 得到方法对象
    Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
    4.2 调用方法
    m.invoke(obj,request,response); --3.servlet的service方法被调用
    5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法
    5.1 得到方法对象
    Method m = clazz.getDeclareMethod("destroy",null);
    5.2 调用方法
    m.invoke(obj,null); --4.servlet的destroy方法被调用

    3、用时序图来演示servlet的生命周期
    4、ServletConfig对象
    获取servlet的初始化参数:
    getInitParameter("name ");
    getInitParameterNames();
    ServletContext对象
    得到web应用路径:
    context.getContextPath();
    request.getContextPath(); 等价于上面的代码
    得到web应用参数:
    context.getInitParameter("name");
    context.getInitParameterNames();
    域对象:
    context.setAttribute("name",Object): 保存数据
    context.getAttribute("name") 得到数据
    context.removeAttribue("name") 清除数据
    转发
    context.getRequestDispatcher("路径").forward(request,response);
    request.getRequestDispacher("路径").forward(request,response); 等价于上面的代码
    得到web应用中的资源文件
    context.getRealPath("路径")
    context.getResourceAsStream("路径");

    5、转发
    RequestDispatcher getRequestDispatcher(java.lang.String path)

    1)转发
    a)地址栏不会改变
    b)转发只能转发到当前web应用内的资源
    c)可以在转发过程中,可以把数据保存到request域对象中

    2)重定向
    a)地址栏会改变,变成重定向到地址。
    b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
    c)不能再重定向的过程,把数据保存到request中。

    结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!
    6、Cookie技术核心
    Cookie类:用于存储会话数据

    1)构造Cookie对象
    Cookie(java.lang.String name, java.lang.String value)
    2)设置cookie
    void setPath(java.lang.String uri) :设置cookie的有效访问路径
    void setMaxAge(int expiry) : 设置cookie的有效时间
    void setValue(java.lang.String newValue) :设置cookie的值
    3)发送cookie到浏览器端保存
    void response.addCookie(Cookie cookie) : 发送cookie
    4)服务器接收cookie
    Cookie[] request.getCookies() : 接收cookie
    7、Session技术核心
    HttpSession类:用于保存会话数据

    1)创建或得到session对象
    HttpSession getSession()
    HttpSession getSession(boolean create)
    2)设置session对象
    void setMaxInactiveInterval(int interval) : 设置session的有效时间
    void invalidate() : 销毁session对象
    java.lang.String getId() : 得到session编号
    3)保存会话数据到session对象
    void setAttribute(java.lang.String name, java.lang.Object value) : 保存数据
    java.lang.Object getAttribute(java.lang.String name) : 获取数据
    void removeAttribute(java.lang.String name) : 清除数据

  • 相关阅读:
    hdu 1873 看病要排队
    母函数详解
    【RDMA】无损网络和PFC(基于优先级的流量控制)
    图解Linux网络包接收过程
    结对编程 <==> 断背山?
    CMPP和SMPP协议比较
    Berkerly DB、SQL Server的性能比较
    使用Berkeley DB遇到问题了
    重新学习C语言
    超长短信的处理办法
  • 原文地址:https://www.cnblogs.com/loong996/p/8185653.html
Copyright © 2011-2022 走看看