首页 > 编程语言 >狂神说Java Web学习笔记_Session

狂神说Java Web学习笔记_Session

时间:2024-04-12 09:33:05浏览次数:30  
标签:Web Java Session resp http session import servlet javax

原理图

服务器会给每一个用户(浏览器)创建一个session对象

一个session独占一个浏览器,主要浏览器没有关,这个session就存在

登录之后,整个网站都可以访问

常用场景

保存一个用户的登录信息

在整个网站中经常会使用到的数据

常用的session方法

//得到Session
HttpSession session = req.getSession();
//给Session中存数据
session.setAttribute("name","admin");
//获取Session中的数据
session.getAttribute("name");
//删除Session中的数据
session.removeAttribute("name");
//获取Session的ID
String sessionId = session.getId()
//手动注销Session
Sessionsession.invalidate();

Sessiondemo03

手动注销session invalidate

另一种方式,web.xml设置默认的注销时间

Session-timeout

cookie设置超时

应用

使用Session存储字符串

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到session
        HttpSession session = req.getSession();
        String id = session.getId();

        //给session中存入字符串
        session.setAttribute("name", "闹闹");
        String name = (String) session.getAttribute("name");
        resp.getWriter().write("获取到的sessionId为:" + id + ", 获取到的name属性的值为:" + name);
    }
}
<servlet>
    <servlet-name>sessionDemo01</servlet-name>
    <servlet-class>com.dawn.session.SessionDemo01</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>sessionDemo01</servlet-name>
    <url-pattern>/sessionDemo01</url-pattern>
</servlet-mapping>

不同浏览器获取到的SessionId值不一样

使用Session存储对象

import com.dawn.entity.Person;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到session
        HttpSession session = req.getSession();
        String id = session.getId();

        //给session中存入对象
        Person person = new Person("bambi", 26);

        session.setAttribute("person", person);
        Person personGet = (Person) session.getAttribute("person");
        resp.getWriter().write("获取到的sessionId为:" + id + ", 获取到的person对象的内容为:" + personGet.toString());
    }
}
<servlet>
    <servlet-name>sessionDemo02</servlet-name>
    <servlet-class>com.dawn.session.SessionDemo02</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>sessionDemo02</servlet-name>
    <url-pattern>/sessionDemo02</url-pattern>
</servlet-mapping>

手动注销Session

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session = req.getSession();
        session.invalidate();
        resp.getWriter().write("设置session失效成功");
    }
}
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到session
        HttpSession session = req.getSession();
        String id = session.getId();
        if (session.isNew()) {
            resp.getWriter().write("session创建成功,id为: " + id);
        } else {
            resp.getWriter().write("session在服务器中已经存在,无需再次创建,对应id为: " + id);
        }
    }
}
<servlet>
    <servlet-name>sessionDemo03</servlet-name>
    <servlet-class>com.dawn.session.SessionDemo03</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>sessionDemo03</servlet-name>
    <url-pattern>/sessionDemo03</url-pattern>
</servlet-mapping>

调用注销session的servlet接口之前,可以获取到session

紧接着调用注销session接口

再次访问获取session接口,发现已经重新生成了一个新的session,之前的那个已经被注销了

设置Session自动过期

<!--设置Session默认的失效时间-->
<session-config>
    <!--1分钟后Session自动失效,以分钟为单位-->
    <session-timeout>1</session-timeout>
</session-config>

访问sessionDemo01接口

预期1分钟之后再次访问这个接口的时候,应该重新生成一个新的sessionId

标签:Web,Java,Session,resp,http,session,import,servlet,javax
From: https://www.cnblogs.com/growingbambi/p/18130496

相关文章

  • java中的多态
    Java中的多态同种行为具有不同表现形式或形态的能力意义:程序最终的状态只有在执行过程中才会被决定而非在编译期间决定提高了程序的灵活性和扩展性实现的必要条件:必须有继承必须有重写方法父类引用指向子类对象创建四个类Animal类publicclassAnimal{ public......
  • 狂神说Java Web学习笔记_Cookie
    会话用户打开一个浏览器,点击了很多链接,访问了很多web资源,关闭浏览器之后,这个过程可以称之为一次会话。有状态会话一个同学来过教室,大家看到了,下次再来教室的时候,我们会知道这个同学曾经来过,这个被称为有状态会话。一个网站如何证明你访问过?服务端给客户端一个信件,客户端下次......
  • 【论文随笔】基于会话的推荐系统构建方法调查(Survey On Methods For Building Sessio
    前言今天读的论文为一篇于2023年发表在国际开放信息技术杂志(InternationalJournalofOpenInformationTechnologies)的论文,文章是关于构建基于会话的推荐系统(Session-basedRecommenderSystems,SBRS)的方法的综述。文章首先介绍了推荐系统在处理大量信息领域(如在线商店、电......
  • 读论文-基于序列_会话的推荐_挑战,方法,应用和机遇(Sequential_Session-based Recommend
    前言今天读的论文为一篇于2022年7月7日发表在第45届国际ACM信息检索研究与发展会议论文集(Proceedingsofthe45thInternationalACMSIGIRConferenceonResearchandDevelopmentinInformationRetrieval.)的论文,文章主要讲述了序列推荐系统(SRSs)和基于会话的推荐系统(SBRSs......
  • 读论文-基于会话的推荐系统综述(A survey on session-based recommender systems)
    前言今天读的论文是一篇于2021年发表于"ACMComputingSurveys(CSUR)"的论文,文章写到,推荐系统在信息过载时代和数字化经济中非常重要。基于会话的推荐系统(SBRSs)是新的推荐系统范式,不同于其他模型化长期静态用户偏好的推荐系统,SBRSs专注于捕捉短期动态用户偏好。尽管SBRSs已被深......
  • Java基础学习 | 2024年4月11日
    变量1.类变量(静态变量):前面用static修饰,表示所有子类都共用同一个属性值,可以直接用类名来访问静态变量,也可以通过实例名来访问静态变量。即无论创建多少个类实例,静态变量在内存中只有一份拷贝,被所有实例共享。举例:点击查看代码publicclassMyClass{publicstaticintc......
  • JavaScript 迈入 AI 新纪元
    随着人工智能技术的不断进步,JavaScript也迎来了自己的AI时代。JS-Torch是一个全新的深度学习库,专为JavaScript设计,其语法习惯与广受欢迎的PyTorch框架高度相似。这个库提供了一整套深度学习工具,包括可追踪梯度的张量对象、多层网络结构以及自动微分功能。PyTorch,作为JS......
  • java中字符串替换的4种方法 replaceAll() 带正则表达式参数 str.replaceAll("[0-9]+
    java中字符串替换的4种方法replaceAll()带正则表达式参数str.replaceAll("[0-9]+","");目录前言一、String的replace()方法二、String的replaceAll()方法三、StringBuffer/StringBuilder的replace()方法四、Matcher的replaceAll()方法总结前言在日常开发中,我们对......
  • Java创建数组、赋值的四种方式,声明+创建+初始化 详解
    Java创建数组、赋值的四种方式,声明+创建+初始化详解@目录一、创建数组的四种方式二、详解三、数组存储的弊端一、创建数组的四种方式以int数据类型为例@TestpublicvoidtestNewArray(){//创建数组//法一int[]arr1=newint[]{1,2,3,4,5};System.ou......
  • Java中Array.sort()的几种用法简明教程 (需要初始化要排序的对象)对 一个数组的所有元素
    Java中Array.sort()的几种用法简明教程(需要初始化要排序的对象)对一个数组的所有元素进行排序,并且是按从小到大的顺序Java中Array.sort()的几种用法简明教程(需要初始化要排序的对象)======================================================1、Arrays.sort(int[]a)......