zoukankan      html  css  js  c++  java
  • servlet学习笔记三

    Servlet
    主要内容:
    1)状态跟踪

    一、状态跟踪
    HTTP协议是无状态协议,即请求与请求之间没有任何关系,也就是不会记住任何数据。
    但若想在请求间传递数据,怎么办?web里的三个基本容器对象可以解决。

    (1)request
    在同一请求中有效,常用于服务器内部跳转中
    1)存放数据
    HttpServletRequest.setAttribute(String key,Object value);
    2)获取数据
    HttpServletRequest.getAttribute(String key);
    (2)session与cookie
    1)Cookie:在多个连接或请求中有效,数据保存在客户端,在服务器端创建cookie
    i)向客户端保存cookie
    Cookie cookie=new Cookie(String key,String value);
    HttpServletResponse.addCookie(cookie);
    ii)获取cookie数据
    浏览器在每次请求时,会将所有cookie数据发送到服务器端
    Cookie[] cookies=HttpServletRequest.getCookies();
    Cookie.getValue(String key);
    iii)生命周期
    Cookie.setMaxAge(int num); 单位是秒
    num<0:会话cookie,存活于浏览器会话结束前,默认为-1。
    num>0:持久Cookie,存活于num秒之前。
    cookie小结:
    ① cookie 是在服务端创建
    ② cookie 是保存在浏览器这端
    ③ cookie 的生命周期可以通过 
    cookie.setMaxAge(2000);
    ☞ 如果不设置setMaxAge则该cookie的生命周期当浏览器关闭时,就消亡.
    ④ cookie 可以被多个浏览器共享
    ⑸如果重名就会替换存在的cookie值.
    ⑥ 一个web应用可以保存多个cookie,但保存在同一个cookie文本在客户端浏览器下
    ⑦ cookie存放的时候是以明文方式存放,因此安全较低.,我们可以通过加密后保存.
    cookie细节:
    ⑴ 一个浏览器最多放入 300cookie,一个web站点,最多 20cookie,而且一个cookie大小限制子4k
    ⑵cookie生命周期的再说明:
    1. cookie默认生命周期是会话级别
    2. 通过setMaxAge() 可以设置生命周期
    setMaxAge(正数) , 即多少秒后该cookie失效
    setMaxAge(负数), 相当于该cookie生命周期是会话级别

    cookie.setMaxAge(0);
    response.addCookie(cookie);//一定带上这句话,否则不能删除
    ⑶ cookie存放中文,怎么处理
    存放:
    String val=java.net.URLEncoder.encode("顺平","utf-8");
    Cookie cookie=new Cookie("name",val);
    取出:
    String val=java.net.URLDecoder.decode(cookie.getValue(), "utf-8");
    out.println("name ="+val);

    2)session:在多个连接或请求中有效,数据保存在服务器端
    其与名为JSESSIONID的cookie密切相关
    i)获取Session对象
    HttpSession session=HttpServletRequest.getSession();

    HttpSession session=HttpServletRequest.getSession(boolean create);
    这里的boolean值默认为true,当容器检测到一个已存在的session,就用原来的那个session ,否则create新的session
    当这里的boolean值为false时候,当容器检测到一个已存在的session,就用原来的那个session ,没有也不会去create新的session
    ii)存放数据
    session.setAttribute(String key,Object value)
    iii)获取数据
    session.getAttribute(String key);
    iiii)生命周期
    1)关闭浏览器
    2)当服务器手动调用
    session.invalidate()
    3)session的不活动时间超过了session的最大存活期。
    注意:最大存活期默认30分钟
    配置web.xml:
    <session-config>
    <session-timeout>10</session-timeout>
    </session-config>

    Session 小结:
     
    ① session是存在服务器的内存中
    ② 一个用户浏览器,独享一个session域对象
    ③ session中的属性的默认生命周期是30min ,你可以通过 web.xml来修改
    ④ 
    u 3种session生命周期的设置
    (1)一个地方是 tomcat/conf/web.xml
      <session-config>
            <session-timeout>30</session-timeout>//表示30分钟的意思
    </session-config>
    对所有的web应用生效
    (2)另外一个地方,就是在单个web应用的下去修改 web.xml
    <session-config>
      <session-timeout>30</session-timeout>session精确到分钟,cookie精确到秒
      </session-config>
    如果发生冲突,则以自己的web应用优先级高
    (3)session.setMaxInactiveinterval(60) //发呆六十秒后session失效

    session的更深入理解: 
    为什么服务器能够为不同的浏览器提供不同session?
    因为每个浏览器去访问web站点的时候,如果发出的http请求头没有带JSESSIONID头就会自动给你创建一个并返回

    (3)ServletContext
    ServletContext是在服务器,是被所有客户端共享服务器启动时创建,服务器关闭/web应用关闭/web应用reload()时销毁
    如何获取servletContext:
     this.getServletContext();  
    this.getServletConfig().getServletContext();
    1)存放数据
    ServletContext.setAttribute(String key,Object value);
    2)获取数据
    ServletContext.getAttribute(String key);
    3)删除属性:
       SetvletContext.removeAttribute(“属性名”);

  • 相关阅读:
    25个PHP游戏编程脚本代码(转)
    [AJAXJSP]使用DWR框架验证用户名是否存在
    [AJAXJSP]验证用户名存在
    [Java基础]多线程求和小例子
    [JAVA算法]求子数组的最大和
    [JQury] slideToggle闪烁问题及解决办法
    [JAVA算法]递归求Fibbonicc序列方法
    Easy ui Datagrid(下拉、复选、只输入数字、文本) 追加、删除、更改
    Easy ui DataGrid 添加复选框 与 下拉
    Easy ui DataGrid 列文字多串行问题解决方案
  • 原文地址:https://www.cnblogs.com/Ant-soldier/p/5045978.html
Copyright © 2011-2022 走看看