Java 28---Session

导读

1.Session简介
2.Session—服务器技术
3.域对象
4.运用监听器的实例:获取在线人数

Session简介

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

Session和Cookie的主要区别在于:
1.Cookie是把用户的数据写给用户的浏览器。
2.Session技术把用户的数据写到用户独占的session中。
3.Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

在这里插入图片描述

Session—服务器技术

第一次创建Session

package com.oracleoaec.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletDemo1 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//生命周期为:第一次调用req.getSession()创建~会话结束销毁
		//创建session
		HttpSession session = req.getSession();
		session.setMaxInactiveInterval(30);//修改有效时间 秒为单位
		resp.getWriter().write("id="+session.getId());//打印ID
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

//Set-Cookie:JSESSIONID=0A52D4AFC2F7390CDCCD755F39B8E2B0; Path=/Day05/; HttpOnly

getSession的底层原理:
在这里插入图片描述

第二次及以后获取Session

package com.oracleoaec.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletDemo2 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//true默认情况下的,总会有session对象,没有就创建,有就返回
		//false不负责创建,只负责查找返回session
		HttpSession session = req.getSession(false);
		resp.getWriter().write("id="+session.getId());//打印ID
		
		
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

//Set-Cookie:JSESSIONID=0A52D4AFC2F7390CDCCD755F39B8E2B0; Path=/Day05/; HttpOnly

删除Session

package com.oracleoaec.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletDemo3 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//删除session
		HttpSession session = req.getSession(false);
		if(session!=null){
//			session.setMaxInactiveInterval(0);//设为0
			session.invalidate();//销毁session
		}
		//A924
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

//Set-Cookie:JSESSIONID=0A52D4AFC2F7390CDCCD755F39B8E2B0; Path=/Day05/; HttpOnly

存数据

package com.oracleoaec.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletDemo4 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//存数据
		HttpSession session = req.getSession();
		session.setAttribute("name", "罗玉凤");//存
//		getAttribute(java.lang.String name);
//		removeAttribute(java.lang.String name) 
//		setAttribute(java.lang.String name, java.lang.Object value) 
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

取数据

package com.oracleoaec.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletDemo5 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//取数据
		HttpSession session = req.getSession();
		Object obj = session.getAttribute("name");
		System.out.println("取到的值为:"+obj);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

域对象

在这里插入图片描述

运用监听器的实例:获取在线人数

Listener监听器

Javaweb开发中的监听器,是用于监听web常见对象
HttpServletRequest HttpSession ServletContext
监听它们的创建与销毁 属性变化
一,监听机制
1事件
2.事件源
3监听器
4事件处理
二,监听域对象的创建与销毁
监听ServletContext创建与销毁 ServletContextListener
监听HttpSession创建与销毁 HttpSessionListener
监听HttpServletRequest创建与销毁 ServletRequestListener

三,监听域对象的属性变化
监听ServletContext属性变化 ServletContextAttributeListener
监听HttpSession属性变化 HttpSessionAttributeListener
监听HttpServletRequest属性变化 ServletRequestAttributeListener
四,关于创建一个监听器的步骤
创建一个类,实现指定的监听器接口
重写接口中的方法
在web.xml文件中对监听器进行注册

在这里插入图片描述

ServletContextListener.java

package com.oracleoaec.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener{
	@Override
	public void contextInitialized(ServletContextEvent event) {
		//通过事件对象获得触发当前事件的ServletContext对象
		ServletContext sc = event.getServletContext();
		sc.setAttribute("count", 0);//初始值0
		System.out.println("我创建了");
	}
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		System.out.println("我销毁了");
	}
}

HttpSessionListener.java

package com.oracleoaec.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener implements HttpSessionListener {
	// int->Integer->Object->Integer->int

	@Override
	public void sessionCreated(HttpSessionEvent event) {
		// 通过事件对象获得触发当前事件的HttpSession对象
		HttpSession session = event.getSession();
		ServletContext sc = session.getServletContext();// 获取servletContext对象
		// 取count
		int count = (int) sc.getAttribute("count");
		count++;
		// 重新存入
		sc.setAttribute("count", count);
		System.out.println(session.getId() + "创建了");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
		// 通过事件对象获得触发当前事件的HttpSession对象
		HttpSession session = event.getSession();
		ServletContext sc = session.getServletContext();// 获取servletContext对象
		// 取count
		int count = (int) sc.getAttribute("count");
		count--;
		// 重新存入
		sc.setAttribute("count", count);
		System.out.println(session.getId() + "销毁了");
	}

}

S9.java

package com.oracleoaec.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletDemo9 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		
		req.getSession();
		ServletContext sc = req.getServletContext();
		Object obj = sc.getAttribute("count");
		
		resp.getWriter().write("亲,当前直播间的在线人数为:"+(int)obj * 500+"人");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值