JavaEE——Servlet中的session

news2024/11/24 8:55:28

之前的博客中提到,cookie是为了浏览器能够在本地保存数据而产生的机制,是在浏览器工作的。而session则是与之对应的,在客户端工作的。一个服务器对应多个客户端,每个客户端都有自己的session,以sessionId为key,session对象为值,存放在内存的哈希表中

session和cookie相关api

HttpRequest

方法功能
HttpSession getSession()在服务器中获取会话. 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null
Cookie[] getCookies()返回一个数组, 包含客户端发送该请求的所有的 Cookie 对象. 会自动把Cookie 中的格式解析成键值对.

HttpResponse

方法功能
void addCookie(Cookie cookie)把指定的 cookie 添加到响应中

HttpSession类

方法功能
Object getAttribute(String name)返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null.
void setAttribute(String name, Object value)使用指定的名称绑定一个对象到该 session 会话
boolean isNew()判定当前是否是新创建出的会话

cookie类

方法功能
String getName()返回 cookie 的名称。
String getValue()获取与 cookie 关联的值
void setValue(String newValue)设置与 cookie 关联的值。

实例

实现用户登陆界面

login.html

使用form表单,实现用户名和密码的post请求提交

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登陆</title>
</head>
<body>
    <form action="login" method="post">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="登陆">
    </form>
</body>
</html>

LoginServlet

获取前端提交的username和password,与正确的username和password进行比较,如果正确就创建会话,将username和123的键值对存入哈希表,然后页面重定向到index,

package login;

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("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if("123".equals(username) && "1234".equals(password)){
            //创建会话
            HttpSession session = req.getSession(true);
            session.setAttribute("username","123");
            resp.sendRedirect("index");
        } else {
            resp.setStatus(403);
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("用户名或密码错误!");
        }
    }
}

IndexServlet

获取session,如果session为空就退出,否则获取哈希表中username对应的值,将其打印在页面上

package login;

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("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //此处是false表示,如果不存在,就不创建,返回空
        HttpSession session = req.getSession(false);
        resp.setContentType("text/html; charset=utf8");
        if(session == null){
            resp.getWriter().write("尚未登陆!禁止访问!");
            resp.setStatus(403);
            return;
        }
        String username = (String) session.getAttribute("username");
        resp.getWriter().write(username + "欢迎回来!");
    }
}

项目展示

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python进阶(28)import导入机制原理

前言 在Python中&#xff0c;一个.py文件代表一个Module。在Module中可以是任何的符合Python文件格式的Python脚本。了解Module导入机制大有用处。 1. Module组成 一个.py文件就是一个module。Module中包括attribute, function等。 这里说的attribute其实是module的global vari…

[ros2实操]2-ros2的消息和ros1的消息转换

记录一下ros2和ros1消息互传的操作 !!!需要注意的是,只有ros1订阅了相关ros2的消息时,ros1_bridge节点才会转发相关消息. 参考链接 1,docker镜像链接:待定 2,github教程:Bridge communication between ROS 1 and ROS 2 一.准备步骤 为在自己原来的系统ubuntu1804上同时安装…

[附源码]SSM计算机毕业设计基于ssm的电子网上商城JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

通过五个维度比较分析关键容灾技术

【摘要】每一种容灾技术方案,可以从实现的技术复杂度、需要投入的成本、需要承担的风险、技术的先进性、技术的成熟度等几个方面来综合评估,寻求适合企业的最佳技术组合方案。本文对几类关键容灾技术进行了比较分析。(文中涉及相关技术产品最新参数请以官网最新发布为准) …

【SpringBoot】SpringBoot开启MyBatis缓存+ehcache(一二级缓存和myBatis的差不多,第三方缓存是jar包的不一样)

文章目录第三方缓存1、导jar包2、配置文件ehcache.xml3、EnableCaching开启缓存4、application.yml读取配置文件5、使用缓存&#xff08;注解Cacheable&#xff09;Cacheable的三个属性&#xff1a;value、key和condition▶测试&#xff1a;root对象可以用来生成keyCachePutCac…

LeetCode HOT 100 —— 4.寻找两个正序数组的中位数

题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 思路 正序数组&#xff0c;立即推—>二分查找 如果本题不要求时间复杂度O&#xff08;log…

光点数据可视化解决方案,助力新型智慧城市打造_光点科技

随着城市化进程的快速发展&#xff0c;智慧城市逐渐从理论理念演变为实践。智慧城市作为一个极其复杂的城市数字化建设和运营系统&#xff0c;涵盖了大量的智能交通、智能物流、智能公园等子系统。对于智慧城市解决方案提供商和集成商来说&#xff0c;其数据可视化产品的统一监…

View的绘制流程

view的绘制流程主要为measure&#xff0c;layout&#xff0c;draw三个阶段 View与window的逻辑结构如图所示&#xff1a; ViewRootImpl&#xff08;替代ViewRoot&#xff09;类&#xff0c;是连接WindowMannager和DecorView的纽带&#xff0c;View的三大流程均是通过ViewRoot完…

godoc安装与go文档查询

前言 最近在用go语言做项目&#xff0c;语法还是很简单的&#xff0c;但是API不熟悉&#xff0c;&#x1f605;&#xff0c;另外也没有类似Java的Spring这样的独秀的IOC和AOP框架&#xff0c;灵活度很大&#xff0c;经常需要查询文档&#xff0c;但是godoc从go1.14.2开始就从内…

【CNN】MobileNet——卷积神经网络中轻量级的经典

前言 MobileNet 系列 是 Andrew G. Howard&#xff08;Google Inc.&#xff09; 等人于 2017 年&#xff08;其实是 2016 年先于 Xception 已经提出&#xff0c;但是直到 2017 年才挂到 arXiv 上&#xff09;在 MobileNets: Efficient Convolutional Neural Networks for Mobi…

干货 | 如何在子查询和联接之间选择

在 联接与子查询&#xff1a;哪个更快&#xff1f;文章我们了解到连接往往比子查询执行得更快。话虽如此&#xff0c;这并不是一条通用准则&#xff0c;因此你可能不希望自动假设联接更可取。正如那篇文章中提到的&#xff0c;如果你需要在查询添加许多联接&#xff0c;数据库服…

分治算法Divide and Conquer

评价 它可以减少运行的时间&#xff0c;很多问题如果暴力求解需要O(n^2)的复杂度&#xff0c;而通过分治可以减少到O&#xff08;nlogn&#xff09; 当与随机化技术相结合时&#xff0c;分治的功能很强大 分治算法的步骤 1.先将大的问题分解为一个个小的子问题 2.对每一个子…

swift内存绑定

swift提供了3种不同的API来绑定/重新绑定指针 assumingMemoryBound(to:)bindMemory(to: capacity:)withMemoryRebound(to: capacity: body:) 绕过编译器检查 - assumingMemoryBound 就是假定内存绑定 func testPointer(_ p: UnsafePointer<Int>) {print(p) } let tup…

Tomcat运行流程、Servlet运行原理以及常用API

文章目录Servlet原理Tomcat 的定位Tomcat 的伪代码Tomcat 初始化流程Tomcat处理请求总结Servlet的核心APIHttpServletHttpServletRequestHttpServletResponseCookie 和 SessionServlet原理 Servlet终究是属于应用层&#xff0c;它是在应用层进行的一系列操作&#xff0c;它的底…

Prometheus Operator 实战 监控 etcd 集群

上节课和大家讲解了 Prometheus Operator 的安装和基本使用方法&#xff0c;这节课给大家介绍如何在 Prometheus Operator 中添加一个自定义的监控项。 除了 Kubernetes 集群中的一些资源对象、节点以及组件需要监控&#xff0c;有的时候我们可能还需要根据实际的业务需求去添…

Java 后端 本地调试-获取微信公众号 openId

Java 后端 本地调试-获取微信公众号 openId申请测试微信公众号内网穿透工具配置公众号获取用户 openId申请测试微信公众号 微信测试公众号 内网穿透工具 netapp 配置公众号 搜索网页账号选项 点击修改&#xff0c;填写内网穿透的域名 获取用户 openId 1 第一步&#xff…

国家高新技术企业的好处

国家高新技术企业的好处&#xff1a;享受税收减免优惠政策&#xff1b;国家科研经费支持和财政拨款&#xff1b;国家级的资质认证硬招牌&#xff1b;提升企业品牌形象&#xff1b;促进企业科技转型&#xff1b;提高企业市场价值&#xff1b;提高企业资本价值&#xff1b;吸引市…

【电脑讲解】电脑如何实现双系统

核心提示&#xff1a;电脑双系统&#xff0c;大家应该不会太陌生&#xff0c;有的网吧就装的是双系统&#xff0c;双系统可以满足不同人群的需要&#xff0c;可以这样说&#xff0c;一个系统可以专门工作使用&#xff0c;另一个可以供玩游戏使用&#xff0c;&#xff08;电脑硬…

[Linux打怪升级之路]-环境变量

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识环…

一文详解JVM的内存结构

目录 前言 内存结构 程序计数器 虚拟机栈 本地方法栈 堆内存 方法区 内部组成 前言 Java的JVM解决的问题是跨操作系统问题。程序员只需要专注于代码的编写&#xff0c;这些代码能够在不同的操作系统Mac&#xff0c;Linux和Windows运行的前提是JVM。JVM还提供了垃圾回收机制…