JSP学习笔记(三)之状态管理与参数传递

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33945246/article/details/79764487

01 前言

  • 之所以要对JSP各个用户的状态进行管理,主要是由于
  • HTTP协议的无状态性
  • 同一个浏览器发送两次请求给服务器的时候,服务器并不知道是同一个浏览器发送给服务器的

02 JSP状态管理

  • 保存用户的两个方式session和cookie

  • 介绍
    1. cookie是web服务器保存在客户端的一系列文本信息
    2. 典型应用一:判断注册用户是否已经登陆网站
    3. 典型应用二:购物车的处理:即保存用户在不同页面的浏览信息

  • 使用

    1. 创建cookie
      Cookie newcookie = new Cookie(String key ,Object value);
    2. 写入cookie对象(服务端传cookie给客户端)
      response.addCookie(newCookie);
      3.读取cookie(客户端读取cookie)
      Cookie[] cookies = request.getCookies();
      4.cookie常用方法:
      这里写图片描述

2.2 session
  • 表示客户端与服务器的一次会话
  • 具体到web中的session指的就是用户在浏览一个网站时,从进入网站到浏览器关闭所经历的这段时间
  • session是保存在服务器的内存中,同时一个用户对应一个session,客户与session是一一对应

这里写图片描述

  • session对象是jsp的内置对象,在用户打开第一个jsp页面时自动创建,完成会话期管理
  • 服务器通过session对象来确定在不同页面切换的是否是同一个用户
  • 常用方法:
    1. long getCreationTime() 返回session创建的时间(毫秒)
    2. public String getId() 返回session创建时jsp引擎为他设定的唯一id号
    3. Public Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
    4. Public Object getAttribute(String name) 返回与此会话中指定名称绑定在一起的对象,没有返回null
    5. String[] getValueNames() 返回一个包含session所有可用属性的数组
    6. int getMaxInactiveInterval() 返回两次请求间隔多长时间此session被取消
    7. void setMaxInactiveInterval()通过此方法设定session最长生存周期,单位是秒

2.3 session跟cookie的对比:

这里写图片描述


2.4 session的生命周期
  • 创建:第一次打开jsp或者servlet,session会被创建
  • 活动:
    1. 某次会话当中通过超链接打开新页面,属于同一个会话
    2. 当前会话页面没有全部关闭,属于同一个会话
    3. 当本次会话所有页面都关闭,在重新访问jsp或者servlet将会创建新的会话
    4. 但要注意的是,原有会话不会关闭,这个旧的sessionid仍然存在服务器,只不过再也没有客户端会携带它交付服务端校验
  • 销毁:session销毁只有三种方式:
    1. 调用session.invalidate()方法
    2. session过期,超时
    3. 服务器重新启动
  • 服务器超时有两种方法
    1. 通过setMaxInactiveInterval()方法设定session活动时间
    2. 在web.xml文件中配置,写如下语句:
<session-config>
<session-timeout>
10//该时间的单位是分钟
</session-timeout>
</session-config>

03 补充


3.1 get和post方法的区别
<form name="regForm" action="动作" method="提交方法"></form>
  • 其中method后面跟着的参数就是get或者post
    1. get以明文的方式通过URL提交数据,数据在URL中可以看到,提交数据量最多不超过2K。安全性低但效率比post方式高,适合数据量不大,安全性不高的数据,比如:搜索,查询等功能
    2. post:将用户提交的信息封装在html header内,适合提交数据量大,安全性高的用户信息,比如:注册,修改,上传等功能
    3. 注:通过get方法提交的数据,会出现在url中,这样造成用户数据的泄露

3.2 请求转发与请求重定向
  • 请求重定向:客户端行为,respond.sendRedirect(),从本质上讲等同于两次请求,前一次的请求的对象不会保存,地址栏的url地址会改变
  • 请求转发:服务器行为,requset.getRequestDispatcher().forward(req,resp),是一次请求,转发后请求对象会保存,地址栏的url地址不会改变
  • 注意在写请求转发的时候,不要漏掉forward
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_33945246/article/details/79764487