zoukankan      html  css  js  c++  java
  • JavaWeb总结(七)

    Web状态管理

      - HTTP协议使用的是无状态的连接 

      - 对容器而言,每一个请求都来自于一个新的客户 

    解决方案-表单隐藏字段

    <input type=”hidden” name=”session” value=”...”>

     该项表单内容在提交表单时,指定的名称和值将包含在Get和Post数据中。隐藏字段不会呈现给用户的页面外观,相反,它们可以存储固定发送给服务器的固定名称和值,而不管用户输入如何。有如下用途:

      - 对用户在网站上的访问进行会话跟踪。

      - 为服务器端程序提供预定义的输入。

      - 存储动态产生的页面上下文信息。

      缺点:只有当每个页面都是动态生成的时候才会有效

    使用隐藏字段进行会话跟踪

    解决方案-Cookie

      Cooike是Web服务器发送到客户端浏览器的简讯文本信息,在第一次访问服务器后就由服务器向客户端浏览器发送,以后在访问同一个Web站点或域时,浏览器就会毫无更改地返回该文本信息。通过让服务器来读取以前发送到客户端的信息,Web应用程序就能够为访问者提供许多方便。

     

    HTTP Cookie的解决方案

    - 用Cookie保存值

    //实例化一个Cookie,以键值对的形式存放
    Cookie cookie = new Cookie(key,value);
    //重新设置Cookie的值
    cookie.setValue(newValue);
    //设置Cookie的生命周期
    //值为正数表示为多少秒后清除cookie,0表示立即清楚cookie
    //若为负值表示关闭浏览器后清除cookie
    cookie.setMaxAge(second);
    //把Cookie返回给响应
    response.addCookie(cookie);

    - 获取Cookie中的值

    //获取请求中的Cookie
    Cookie[] cookies = request.getCookie();
    //遍历取出Cookie中的键值对
    For(Cookie cookie:cookies){
        String key = cookie.getName();
        String value = cookie.getValue();
        //获取之后对值进行操作的代码
    }

    解决方案-URL重写

      当浏览器不支持Cookie或者禁用Cookie时,就可以使用URL地址重写。但是服务器端程序需要为此完成很多简单却又繁琐的处理过程,因为引用站点并返回给用户的每个URL,甚至通过服务器重定向的方式,都追加了额外的信息。

     

    URL重写解决方案

    Session原理

      - 服务器可以为客户端创建并维护一个Session对象,用于存放数据。

      - 在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID

      - 服务器以Cookie的方式将SessionID存放在客户端。

      - 当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问 

     

    Session的工作流程

    Session会话跟踪机制

      - 用户发送请求

    //从请求中获取session对象
    HttpSession session = request.getSession();

      - 服务器的响应如下

      //HTTP的响应信息

     

      - 再次发送请求

     

    HttpSessoin接口

      HttpSession是Java平台对Session机制的实现规范,因为它仅仅是个接口,具体由每个web应用服务器的提供商实现。一般情况下Session都是存储在内存里,当服务器进程被停止或重启的时候,内存里的Session也会被清空(Session对象占用着系统资源)。

      - setAttribute(java.lang.String, java.lang.Object):在Session对象中用一个名字绑定一个对象。

      - getAttribute(java.lang.String):通过名字获取Session对象中保存的对象。

    - removeAttribute(java.lang.String):在Session中删除与一个名字对应的对象。

    - getCreationTime():返回第一次创建会话的时间。

    - getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。

    - setMaxInactiveInterval(int interval):对于会话指定客户请求的最大间隔时间,以秒为单位。-1表示永不过期

    - getMaxInactiveInterval(int interval):返回客户请求的最大间隔时间。

    - invalidate():会话结束,当前存在在会话中的所有会话属性也会解除绑定。

    - getId():此方法返回每个session唯一的标识 

    会话超时管理

      销毁Session可以采用的简单方式

    - 设置会话超时。

    - 在Session对象上调用invalidate()方法。

    - 应用结束(崩溃或取消部署)

    在web.xml文件中配置 

    <session-config>
    
        <session-timeout>15</session-timeout>
    
    </session-config> 

    提示:在web.xml文件中指定会话超时时间,是以分钟为单位。在程序中设置时间是以秒为单位。

    Application与Session域范围的属性比较

    - 在web应用上下文域范围和Session域范围中,都可以用一个名字来绑定一个对象,从而在域范围内进行访问

    - 绑定在Session范围内的对象仅仅在一个持续的会话期间被维护

    - 绑定在Application(应用上下文)中的对象,在整个Web应用程序运行过程中都被维护

    -都使用相同的方法:setAttribute()和getAttribute()

    提示:在Application应用范围内保存的对象,维护时间要比在Session域范围内保存的对象长,但是都要占用服务器系统资源,应当尽量使用维护时间短的域对象,或者在不使用后利用removeAttribute()方法销毁绑定对象。

    Session持久化管理

      Session对象的信息一般情况下置于服务器的内存中,当服务器由于故障重启,或者Web应用重新加载的时候,此时的Session信息将会全部丢失。为了避免这样的情况,在某些场合可以将服务器的Session数据存放在文件系统或数据库中,这样的操作称为Session对象的持久化。Session对象在持久化时,存放在其中的对象以序列化的形式存放,这就是为什么一般存放在Session中的数据需要实现可序列化接口(java.io.Serializable)的原因;

      通过Context元素的子元素Manager配置Session管理对象:

    - ClassName属性用于指定管理Session的类可以是StandarManager或PersitentManager。

    - maxActiveSession表示允许存在最多活动Session对象的数目,-1表示不限制。

    - maxInactiveInterval表示Session的默认的最长不活动间隔,单位为秒。

    - pathname表示StandarManager在服务器重启或应用重新加载时持久化Session对象的文件名,如果设置为"",相当于关掉了Session的持久化机制。

    URL重写

    - Session对象的正常使用要依赖于Cookie

      - URL地址重写能够取得置于Cookie中的会话,并把会话ID附加到访问应用的各个URL最后

      URL重写的方法(把SessionID附加到URL地址后面)

    - response.encodeURL();

    - response.encodeRedirectURL("/lovobook/otherServlet");

    提示:静态HTML页面不能实现URL重写,因为URL附加内容必须动态生成。

    并且使用URL编码后,容器会首先尝试使用Cookie完成会话管理,只有当Cooike方法失败时才会使用URL重写。

     

    我不作恶

    但有权拒绝为善

    我不赞同

    但是我捍卫你不为善的权力

  • 相关阅读:
    关于c语言的一个小bug(c专家编程)
    A10 平板开发一硬件平台搭建
    A10 平板开发二搭建Android开发环境
    hdu
    如何选择发现自己是否适合科研?
    屌丝程序员与房子
    一步一步学数据结构之n--n(Prim算法)
    pat 1049 Counting Ones
    add-strings
    这篇讲PHP的讲的有些道理 & mb_substr & 中文处理
  • 原文地址:https://www.cnblogs.com/HackerBlog/p/5956031.html
Copyright © 2011-2022 走看看