1.Cookie的生命周期
    setMaxAge()
    正数,在指定的秒数后删除
    负数,退出浏览器时删除
    0,立即删除

    2.创建Session
    request.getSession() 第一次调用是创建Session对象,之后每次调用都是获取之前创建好的Session对象
    isNew()判断是不是新创建的
    getId()得到Session的id值

    3.Session的生命周期
    getMaxInactiveInterval()
    setMaxInactiveInterval()
    单位是秒
    session的生命周期不太一样,她是指客户端两次请求的最大间隔时长(而不是session第一次建立后的总市场)
    设置生命周期,如果为负的话是指永不超时.

    4.表单重复提交
    1>F5会发起最后一次请求,造成重复提交.解决办法:重定向
    2>网络延迟,多次点击
    3>回退浏览器,重复提交

    5.谷歌验证码的使用
    1>导入kaptcha包
    2>
    KaptchaServelt
    com.google.code.kaptcha.servlet.KaptchaServlet

    KaptchaServelt
    /kaptcha.jpg

    3>每次访问kaptcha.jpg都会返回一张图片,并设置一个session 键值对为 KAPTCHA_SESSION_KEY=验证码的值

    6.filter匹配
    —目录匹配
    /admin/ 请求地址必须为 /工程路径/admin/
    —后缀名匹配(不能以/打头)
    .html 请求地址必须以.html结尾
    .do 必须以.do结尾
    *.action 必须以.action结尾

    filter只关心地址,不关心资源是否真实存在

    7.ThreadLoal
    作用:解决多线程数据安全
    原理:给当前线程关联一个数据(普通变量,对象,数组,集合)
    特点:
    1.ThreadLocal可以为当前线程关联一个数据(像Map一样存取数据,key为当前线程)
    2.每个ThreadLocal对象,只能为当前线程关联一个数据,如果当前线程要关联多个数据,需要使用多个ThreadLocal对象实例
    3.每个ThreadLocal对象定义时,基本都是static类型
    4.ThreadLocal中保存数据,线程销毁后,会被自动释放(由JVM)