JSP详解(5) -内置对象之session

session – 用户会话

服务器无法识别每一次HTTP请求的出处(不知道来自哪个终端),它只会接收到一个请求信号
所以就存在一个问题:将用户的响应发送给其他人。因此就必须有一种技术来让服务器知道请求来自哪里,这就是会话技术。

会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程
会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来
实现会话的两种方式:
  1. session
  2. cookie

属于同一次会话的请求都有相同的标识符

新建项目

(1)在index.jsp中写入代码

在这里插入图片描述
编译运行,显示id
在这里插入图片描述
(2)在同一个浏览器中新打开一个页面,重新访问
在这里插入图片描述
id值是一样的
在一个浏览器中不管打开多少个网页,这都属于一次会话
(3)打开一个新的浏览器,重新访问,id值就会不同

session常用方法

1. getId()方法

获得当前session的id

2. setMaxlnactiveInterval()方法
void setMaxlnactiveInterval(int interval)
//设置session的失效时间,单位为秒
3. getMaxlnactiveInterval()方法
void getMaxlnactiveInterval(int interval)
//获取session的失效时间,单位为秒

在这里插入图片描述

4. invalidate()方法
void invalidate()
//设置session立即失效
5. setAttribute()方法
void setAttribute(String key, Object value)
//通过键值对的形式来存储数据
6. getAttribute()方法
Object getAttribute(String key)
//通过键获取对应的数据
7. removeAttribute()方法
void removeAttribute(String key)
//通过键删除对应的数据

实例

创建一个登陆界面,输入用户名和密码,如果用户名和密码与默认的不同,就重定向到登录界面;如果与默认用户密码的相同,就返回欢迎回来的界面

1.新建一个Java web项目
2.在web目录下新建文件login.jsp文件,完成登录页面设置

在这里插入图片描述
在这里插入图片描述

3.在文件web.xml文件中设置默认用户名和密码,并通过xml方法来实现与Servlet的映射

在这里插入图片描述

4.在src下新建包,包下新建Java普通类文件LoginServlet

在这里插入图片描述
在该文件内实现逻辑判断功能
使LoginServlet继承HttpServlet类,并重写init()、doGet()、doPost()方法
(1)在init()方法内获得我们在xml文件中设置的默认用户名与密码
调用方法getInitParameter并传入参数获得该参数对应的值
在这里插入图片描述
此处之所以把myusername和mypassword定义为成员变量,是因为该变量会在其他方法内与其他变量进行比较
(2)在doPost()方法内获得用户在登陆界面输入的用户名和密码,并与默认用户名和密码进行比较,若相同则跳转至登陆成功的界面;若不相同,就重定向至登录界面
在这里插入图片描述

5.登录成功页面设置

在web目录下新建welcome.jsp文件
在这里插入图片描述

6.编译运行,在登录页面输入默认的用户名密码、任意用户名密码查看效果
7.输入默认的用户名密码登陆成功后,页面会返回用户名

在这里插入图片描述
这个时候我们是从login.jsp中开始访问,最后跳转到welcome.jsp中的
我们新打开一个网页,在地址栏中直接输入welcome.jsp进行访问
在这里插入图片描述
这时会发现用户名是null
原因:
这是因为我们先访问login.jsp时,输入默认的用户名密码,这是一次请求
在Servlet中判断输入的用户名密码与默认的相同时,会将页面跳转至welcome.jsp,这表示对刚才请求的响应,此时此次的请求已经得到响应,该请求的声明周期已经结束
我们再打开一个新的网页输入welcome.jsp时,这是一次新的请求,这次请求会直接进入welcome.jsp中执行其内的代码,而此时该文件内的request已经失效,所以用户名就是null

在这里插入图片描述

由上可知,request的声明周期太短,这个时候可以使用session来代替

8.在Servlet中使用session代替request

session是JSP的内置对象,在.jsp文件中使用session可以不用手动创建,但是在Servlet中使用session,就必须先创建给对象
在这里插入图片描述
再将welcome.jsp中的request修改为session
在这里插入图片描述

9.编译运行

1.首先访问login.jsp,输入默认用户名密码
在这里插入图片描述
2.打开一个新的网页,直接输入访问welcome.jsp
在这里插入图片描述
之前我们使用request时,是将用户名存到了请求里,随着一次请求生命周期的结束,用户名自然也不会存在了;而使用session时,我们就是将用户名存在了一次会话里,只要会话生命周期不结束,无论在会话中有多少次请求,用户名依然存在

10.销毁session

1.在文件welcome.jsp文件中新增一个超链接
在这里插入图片描述
2.新建java文件LogoutServlet.java
在这里插入图片描述
销毁session
编译运行
输入正确用户名密码
在这里插入图片描述
点击退出登录,再打开新网页,直接访问welcome.jsp
在这里插入图片描述
可以看到,用户名已经为null,session已经被销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值