session – 用户会话
服务器无法识别每一次HTTP请求的出处(不知道来自哪个终端),它只会接收到一个请求信号
所以就存在一个问题:将用户的响应发送给其他人。因此就必须有一种技术来让服务器知道请求来自哪里,这就是会话技术。
会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程
会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来
实现会话的两种方式:
- session
- 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已经被销毁