JSP数据交互:session作用域、cookie对象

JSP数据交互:session作用域、cookie对象

session作用域

  • JSESSIONID
  • 会话标识符
  • 当有请求访问服务器时,浏览器会传递一个jsessionid的值给服务器
  • 当jsessionid的值不存在 服务器会创建一个会话 并生成新的jsessionid 返回给浏览器
  • 当jsessionid的值存在 服务器会判断sessionid是否存在
  • 如果不存在 服务器会创建一个新的会话 并生成新的sessionid 返回给浏览器
  • 如果存在 则使用当前已有的会话
//获取session对象(获取或创建)
HttpSession session = req.getSession();
//会话标识符
System.out.println("会话标识符:"+session.getId());
System.out.println("会话的创建时间:"+session.getCreationTime());
System.out.println("会话的最后一次访问:"+session.getLastAccessedTime());
System.out.println("是否是新的对话:"+session.isNew());

Web三大概念:cookie,session,application
Session:记录一系列状态
Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。

isNew():是否是新的Session,一般在第一次访问的时候出现
getid():拿到session,获取ID
getCreationTime():当前session创建的时间
getLastAccessedTime():最近的一次访问这个session的时间。
getRrquestedSessionid: 跟随上个网页cookies或者URL传过来的session
isRequestedSessionIdFromCookie():是否通过Cookies传过来的
isRequestedSessionIdFromURL():是否通过重写URL传过来的
isRequestedSessionIdValid():是不是有效的sessionID

session就是服务器里面的一块内存,内存里面能放任何东西,只要是名值对就可以了。
session里面的名字永远都是String类型

  • session的作用域(在会话中有效 可以有多次请求 无论是请求转发还是重定向)
  • setAttribute(name,value); 设置作用域
  • getAttribute(name,value); 获取作用域
  • removeAttribute(name,value); 移除作用域
  • request作用域(在一次请求中有效,只有请求转发有效)
/设置session作用域
HttpSession session=req.getSession();
session.setAttribute("name","zhangsan");
//request作用域
req.setAttribute("name2","lisi");
//请求转发 sess03
req.getRequestDispatcher("sess03").forward(req,resp);
//重定向
resp.sendRedirect("sess03");

//获取session作用域
String name=(String)req.getSession().getAttribute("name");
System.out.println("Session"+name);
//获取request作用域
System.out.println("Request:"+req.getAttribute("name2"));

session的销毁

  • 1、默认到期时间(默认最大不活动时间)
  • 服务器中规定的最大不活动时间 Tomcat中默认是30min失效
  • 可以在Tomcat的解压目录conf目录下 对应的web.xml中修改
  • ,单位是分钟
  • 2、手动设置最大不活动时间
  •      获取最大不活动时间
    
  •      设置最大不活动时间
    
  • 3、手动销毁
  • session.invalidate();
  • 4、关闭浏览器
  • session依赖cookie cookie默认关闭浏览器即失效
  • 5、关闭服务器
HttpSession session=req.getSession();
//获取最大不活动时间
int sec=session.getMaxInactiveInterval();
System.out.println("最大不活动时间:"+sec);
//设置最大不活动时间
session.setMaxInactiveInterval(15);
//手动销毁
session.invalidate();

ServiceContext 对象

  • 应用对象,每一个web应用在服务器启动时 会生成对应的Applicetion对象
  • ServletContext对象的获取
  • 1、通过request对象
  • 2、通过session对象
  • 3、通过servletConfig对象
  • 4、在servlet类中直接获取
    Servlet的常用方法
  • getServerInfo() 获取当前服务器信息
  • getServerPath() 获取当前服务器路径

Servlet的三大作用域

  • setAttribute(name,value); 设置作用域
  • getAttribute(name,value); 获取作用域
  • removeAttribute(name,value); 移除作用域
  • 1、request作用域
  • 在一次请求中有效 请求转发
  • 2、session作用域
  • 在一次会话中有效 session失效则销毁(无论请求转发还是重定向)
  • 3、ServletContext作用域
  • 在整个应用程序中(服务器关闭失效)
//1、通过request对象
ServletContext servletContext=req.getServletContext();
//2、通过session对象
ServletContext servletContext1=req.getServletContext();
//3、通过servletConfig对象
ServletContext servletContext2=getServletConfig().getServletContext();
// 4、在servlet类中直接获取
ServletContext servletContext3=getServletContext();
//常用方法
System.out.println("获取服务器的信息:"+servletContext.getServerInfo());
System.out.println("获取项目的真实路径:"+servletContext.getRealPath("/"));

cookie对象

cookie是Web服务器保存在客户端的一系列文本信息
cookie的作用:
1、对特定对象的追踪
2、实现各种个性化服务
3、简化登录
4、安全性能
5、容易泄露信息

什么是Cookie?
由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。比如判断用户是否是第一次访问网站。

1、Cookie的创建和发送

创建:
 Cookie cookie = new Cookie(name,value);
发送:
response.addCookie(cookie);
@WebServlet("/cook01")
public class Cook01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建Cookie对象(使用带参构造)
        Cookie cookie=new Cookie("userName","admin");
        //响应给浏览器
        response.addCookie(cookie);
        Cookie cookie02=new Cookie("userPwd","123456");
        response.addCookie(cookie02);
    }
}

2、Cookie的获取
获取的是所有的cookie 返回的是cookie数组

  Cookie[] cookie=request.getCookies();
  //获取cookie的值
Cookie[] cookies = request.getCookies();
//判断
if (cookies != null && cookies.length > 0) {
    //遍历 得到每一个cookie的值
    for (Cookie cookie : cookies) {
        System.out.println("键:" + cookie.getName() + ",值:" + cookie.getValue());
        //获取指定的cookie对象
        if ("userName".equals(cookie.getName())) {
            System.out.println("当前cookie的值为:" + cookie.getValue());
        }
    }
}

3、Cookie的失效时间
maxAge属性:默认值-1 表示浏览器关闭即失败
cookie.setMaxAge(正整数/负整数/零)
正整数:
表示存放到本地磁盘中,存活指定秒数
负整数:
表示在浏览器中存活,关闭浏览器就失效
零:
表示删除cookie,即即刻删除

     Cookie中不能出现中文
    有中文通过URLEncoder.encode()来进行编码
     获取时通过URLDecoder.decoder()来进行编码
//创建Cookie对象
 Cookie cookie=new Cookie("aa","AA");
 //设置cookie的失效时间
// cookie.setMaxAge(-1);//关闭浏览器失效
 //存活指定秒数
 cookie.setMaxAge(20);
 //响应cookie
 response.addCookie(cookie);
 //设置七天失效
 Cookie cookie1 = new Cookie("name","zhangsan");
 cookie1.setMaxAge(7*24*60*60);
 response.addCookie(cookie1);
 //maxAge设置为0,表示删除
 Cookie cookie2=new Cookie("userPwd",null);
 cookie2.setMaxAge(0);//设置为删除
 response.addCookie(cookie);

4、Cookie的注意点:
Cookie 不跨浏览器 不跨电脑
Cookie中不能出现中文
有中文通过URLEncoder.encode()来进行编码
获取时通过URLDecoder.decoder()来进行编码

5、 Cookie的路径

  cookie.setPath(“路径”); 设置可以访问cookie对象的路径
  1、在当前项目中的资源可以访问(默认)
 setPath("/s04");
  2、在指定项目中的资源可以访问(只能在/s04项目下的资源能访问)
   setPath("/s04");
   3、在当前服务器中任意资源都可以访问(只要是在同一服务器下的资源)
   setPath("/");
   4、在指定项目下的指定资源可以访问
   setPath("/s04/cook05");
   注:只有访问的路径 包含cookie的path  才能获取
//在当前项目中的资源可以访问(默认)
Cookie cookie1=new Cookie("a1","A1");
cookie1.setPath("/s04");  //可以不设置 默认
response.addCookie(cookie1);


//在指定项目中的资源可以访问
Cookie cookie2=new Cookie("a2","A2");
response.addCookie(cookie2);
cookie2.setPath("/s05");
//在当前服务器中任意资源都可以访问 (只要是在同一服务器下的资源)
Cookie cookie3=new Cookie("a3","A3");
response.addCookie(cookie3);
cookie3.setPath("/");


//在指定项目下的指定资源可以访问
Cookie cookie4=new Cookie("a4","A4");
cookie4.setPath("/s04/cook02");
response.addCookie(cookie4);

JSP数据交互:session作用域、cookie对象_第1张图片

你可能感兴趣的:(JSPandServlet,session,cookie,jsp)