首页 > 其他分享 >会话层技术-session

会话层技术-session

时间:2024-10-20 21:23:48浏览次数:1  
标签:对象 创建 技术 session 会话层 import servlet javax

会话层技术-session
session技术拿下!

一、先整理学习过程中的几个疑惑

  1. cookie和session分别都是怎么创建的?

    • 首先cookie是一个类,它需要java后端开发人员手动创建。
      Cookie cookies1 = new Cookie(keya, valuea);
    • 其次session是HttpSession接口的接口对象,它是由服务器来创建的,注意这里的创建不是指的是你在浏览器访问网址的同时,他就创建了,而是在servlet重写的service或doXXX方法中通过HttpSession session
      = request.getSession();或者HttpSession session = request.getSession(true);这两种方式任一个创建的。
    • 注意:在默认访问jsp文件时,在你打开网站的同时就创建了Session对象,这是因为jsp中默认设置为true,<%@ page session = "true"%>,当jsp文件编译生成.java代码后,里面会有一句session = pageContext.getSession();所以,在tomcat启动后默认访问jsp页面时,这条代码就帮你创建session了,本质上,还是要通过获取session对象的时候判断有没有才会自动创建或者选择之前的session对象。
  2. 借助这个问题解决response.getWriter()获取的对象是由是创建的?

    • response.getWriter()获取的是PrintWriter类型的对象,当使用这条代码时候,服务器(就是servlet容器)自动创建该类型的对象来向网页上打印字符串。
    • 可能又会有疑惑了,为什么不直接new 一下创建这个对象啊!这个我通过搜索整理,简单理解为:response.getWriter()输出的是流对象(所谓的流对象,就是打印结果可以输出在页面上),如果new PrintWriter()一个对象,再输出就不会输出到网页上,而是idea的打印台了,这仅仅是我自己的个人理解,便于我记忆!大家有好的可以给我分享,学习永无止境,哈哈!

二、ServletC用来实现session技术的处理过程

先简单那介绍下session技术的处理流程:

  1. 用户首次访问服务器,服务器没有Session,自动创建session对象和ID(这个ID相当于一个特殊的cookie,用于保存每一个Session对象独有的id值,他特殊就特殊在name = JSESSIONID, value = 这个id的值,普通的cookie的名字可以随意起,值可以随意更改,而由服务器创建的这个Session对象的ID名字是固定的,值也是唯一的。
  2. 服务器把这个特殊的cookie响应给客户端,等到下次用户访问的时候,Servlet可以获取到每个用户独有的JSESSIONID值,从而对数据进行存储记录。

三、ServletC代码具体要怎么实现呢

  1. 首先我要通过request对象调用getParameter()方法来获得访问服务器的用户信息。
  2. 紧接着,我调用request对象的getSession()方法来判断(是通过JSESSIONID的值来判断的)是否该用户是之前已经创建过的session,若是则不再重新创建,直接获取,若否,则自动重新创建并获取。
  3. 之后,我把获取到的用户信息存入Session对象中(相当于个人档案)。
  4. 最后,通过response对象向客户端响应JSESSIONID的值(特殊的cookie)。

具体代码实现如下:

package com.atguigu.servlet;

import com.sun.deploy.net.cookie.CookieUnavailableException;

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

@WebServlet(name = "ServletC", urlPatterns = "/ServletC")
public class ServletC extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        //接收请求中的用户参数的值,接收姓名
        String username1 = req.getParameter("username");//调用req对象的getParameter方法获得usrname参数的值
        //该方法传入参数名,获得参数值

        //创建Session对象
        HttpSession session1 = req.getSession();//具体含义上述已说

        //把用户信息存入Session对象中
        session1.setAttribute("username", "yzh");
        //查看该Session对象的JSESSION值
        String id01 = session1.getId();
        System.out.println("JSESSIONID = " + id01);
        //响应用户信息
        resp.getWriter().println("已响应");
    }
}

四、ServletB来获取已经创建的session对象存储的用户信息

我已经通过ServletC将用户信息存入创建的Session,那怎么来通过下次的访问,根据特殊的cookie来识别用户,并把用户信息提取打印出来呢?ServletB给我们答案(小嘲:有点小风范啊!哈哈)

package com.atguigu.servlet;

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

@WebServlet("/ServletD")
public class ServletD extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session2 = req.getSession();//再次判断session是否已经存在,已经存在,直接瞄准他
        System.out.println("上个session的id值是:" + session2.getId());
        String username2 = (String)session2.getAttribute("username1");//调用getAttribute()方法得到该用户的属性值
        resp.getWriter().println(username2);//来吧,展示!
    }
}

让我们每天进步一点点,稳才是长远之道!

标签:对象,创建,技术,session,会话层,import,servlet,javax
From: https://www.cnblogs.com/yzhShowTime/p/18487922

相关文章

  • 学习笔记—微服务—技术栈实践(1)—注册中心与配置中心
    注册中心什么是注册中心  注册中心是SpringCloud和SpringCloudAlibaba系列的第一步。服务的注册与发现是最基本的操作。  在微服务中,注册中心主要体现为三种角色。首先是服务注册中心,也就是Registry,用于保存服务提供者的注册信息,当服务提供者的节点发生变更的时候......
  • 项目解决方案:大型赛事视频监控接入汇聚管理系统技术实现方案
    目录一.项目背景1.1背景描述1.2需求分析二.设计原则和建设目标2.1设计原则2.2建设目标三.系统设计实现3.1系统方案设计3.2网络拓扑说明四.产品介绍4.1概述4.2设备接入4.2.1内部设备接入4.2.2外部设备接入4.2.3级联上级平台4.3视频资源管理4.4视频观看4.4.1客......
  • 20222423 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容1.1实践内容正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧使用msfvenom生成jar、apk等其他文件使用veil加壳工具使用C+shellcode进行编程通过组合应用各种技术实现恶意代码免杀用另一电脑实测,在杀软开启的情况下,可运行并回连......
  • 20222302 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    1.实验内容(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧(2)通过组合应用各种技术实现恶意代码免杀(3)用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本2.实验过程任务一:正确使用msf编码器,veil-evasion,自己利用shellcod......
  • 20222422 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    一.实验内容(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程(2)使用socat获取主机操作Shell,任务计划启动(3)使用MSFmeterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运......
  • 20222319 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容本周继续课堂学习了缓冲区溢出的相关知识,面向本次实验,主要学习了后门程序的生成方法,用ncat、socat实现两台计算机间互传文件的方法,体会了通过msf工具与执行好的后门程序实现对被攻击计算机的监听过程。1.1实验内容目录(1)使用netcat获取主机操作Shell,cron启动某项任......
  • pbootcms设置的会话目录创建失败!runtime/session/无法写入的解决方案
    当用户在安装PBootCMS模板时遇到报错信息:“pbootcms设置的会话目录创建失败!网站目录/runtime/session/无法接入”,可以尝试以下两种解决方案:解决方案一:检查网站目录权限登录服务器:通过SSH登录到你的服务器。更改目录权限:使用 chmod 命令更改 runtime/ 目录及其子目......
  • 20222302 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    1.实验内容本次实验旨在通过实际操作理解并实践网络攻击中的后门原理,包括使用不同的工具和技术来获取目标主机的操作Shell、执行特定任务、收集敏感信息以及进行权限提升;本次实验需要我们使用nc实现win,mac,Linux间的后门连接:meterpreter的应用、MSFPOST模块的应用,实验可以分为以......
  • python+flask框架的基于OA技术的办公文档归档系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于办公文档归档系统的研究,现有研究主要集中在传统档案管理系统以及大型企业级内容管理系统(ECM)方面,这些系统虽然功能强大,但往往复杂且成......
  • 神经技术:解码大脑与人机接口的未来
    神经技术(Neurotechnology)是一个涵盖广泛的领域,旨在研究、理解、增强或修复大脑与神经系统的功能。它结合了神经科学、工程学、计算机科学和生物技术,通过开发各种工具与技术,帮助我们更深入地理解大脑的运作机制,并为治疗神经疾病、增强人类认知能力、提升人机交互体验提供全新的......