4.session对象
4.1概念
Session称为一次会话,浏览器的打开及关闭
4.2方法
方法名 | 描述 |
---|---|
setAttribute(key,val) | 设置键值对 |
getAttribute(key) | 通过键获取值 |
getId() | 获取session的id |
setMaxInactiveInterval(time) | 设置session的过期时间[单位:秒](tomcat中默认配置的过期时间是30分钟) |
removeAttribute(key) | 从session中移除指定的key |
4.3案例
使用session实现页面访问权限控制
<!--login.jsp-->
<%
String errMsg = "";
//登录页面可能会被打开多次(用户想要切换账户)
Object object = session.getAttribute("errMsg");
if(object != null){//从登录失败后跳转过来的
errMsg = (String)object;
//移除session中的key
session.removeAttribute("errMsg");
}
%>
<p style="color:red;"><%=errMsg%></p>
<form action="control.jsp" method="post">
<input type="text" name="uname" placeholder="请输入用户名">
<input type="password" name="pwd" placeholder="请输入密码">
<input type="submit" value="登录">
</form>
<!--control.jsp-->
<%
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//获取表单中的参数
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//对用户名及密码进行验证(操作数据库)
if("admin".equals(uname) && "admin".equals(pwd)){
//将用户的用户名存储起来作为登录成功的标识
session.setAttribute("uname",uname);
//设置session的失效事件(单位:秒)
session.setMaxInactiveInterval(5);
//登录成功直接跳转到个人中心页面
response.sendRedirect("person.jsp");
}else{
//通过session存储一个错误信息
session.setAttribute("errMsg","用户名或密码错误");
//回到登录页面,并提示错误信息
response.sendRedirect("login.jsp");
}
%>
<!--个人中心-->
<%
//首先需要先验证用户是否已经登录
Object object = session.getAttribute("uname");
if(object == null){//代表用户未登录,跳转到登录页面
response.sendRedirect("login.jsp");
return;
}
%>
<h4>个人中心</h4>
<p>欢迎,<%=object%></p>
4.4Cookie对象
4.4.1概念
cookie是在本地进行数据存储的对象,访问速度快、效率高但是不安全
<%
//将name存储到Cookie中
Cookie nameCookie = new Cookie("name",name);
//将创建的cookie存储到响应头中
response.addCookie(nameCookie);
%>
<%
//获取cookie
Cookie[] cookies = request.getCookies();
for(Cookie cook : cookies){
String val = cook.getValue();
out.println(cook.getName()+":"+val+"<br/>");
}
%>
4.4.2Cookie生效时间
1.值为正数时,代表了cookie的存活时长(秒为单位)
2.值为0时,代表立即清除cookie
3.值为负数时,代表cookie的生命周期与当前会话一致
<%
Cookie nameCookie = new Cookie("name",name);
//设置cookie的生效时间setMaxAge() 秒
nameCookie.setMaxAge(10);
response.addCookie(nameCookie);
%>
<%
//获取cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cook : cookies){
String val = cook.getValue();
//设置cookie立马失效
cook.setMaxAge(0);
//更新response中的cookie对象
response.addCookie(cook);
//对获取到的数据进行解码
//val = URLDecoder.decode(val,"utf-8");
out.println(cook.getName()+":"+val+"<br/>");
}
}
%>
4.4.3Session与Cookie的区别
1.session是存储在服务端的,Cookie是存储在客户端
2.session数据安全,Cookie数据不安全
3.session效率较低,Cookie效率相对较高
5.application对象
5.1 概念
application是全局作用域对象,也称为web的上下文对象,通常用于存储一些全局参数
5.2 方法名
setAttribute(key,val) 设置全局参数
getAttribute(key) 获取全局参数
5.3 全局作用域案例
<%
//设置默认的阅读量
int count = 0;
//1.先从全局作用域中获取存储的已访问的数量
Object object = application.getAttribute("count");
if(object != null){
count = (Integer)object;
}
//2.在已有的阅读量的基础上+1
count++;
//3.将最新的阅读量存储到全局作用域中(更新)
application.setAttribute("count",count);
%>
阅读量:<%=count%>
6.jsp的四大作用域
作用域 | 描述 |
---|---|
pageContext | 只在当前页面生效 |
request | 在一次请求中生效 |
session | 在一次会话中生效 |
application | 在整个web中生效 |
1.示例:
//index页面
<%
//当前页
pageContext.setAttribute("pageContext","当前页生效");
//请求中
request.setAttribute("request","一次请求中生效");
//一次会话
session.setAttribute("session","一次会话中生效");
//全局作用域
application.setAttribute("application","整个web项目中");
%>
<hr>
pageContext:<%=pageContext.getAttribute("pageContext")%>
<hr>
request:<%=request.getAttribute("request")%>
<hr>
session:<%=session.getAttribute("session")%>
<hr>
application:<%=application.getAttribute("application")%>
在index页面是可以同时生效4个作用域
2.示例
//show页面
<hr>
pageContext:<%=pageContext.getAttribute("pageContext")%>
<hr>
request:<%=request.getAttribute("request")%>
<hr>
session:<%=session.getAttribute("session")%>
<hr>
application:<%=application.getAttribute("application")%>
show页面只有session作用域和全局作用域生效
3.示例:
将show页面网址换个浏览器打开就相当于是更换了一次会话
7.include指令
include指令用于引入其他的页面
<%@ include file="permission.jsp"%>
//或
<jsp:forward page="session/login.jsp"/>
动作标签(将jsp中的常见的一些功能以标签的形式进行使用)
1.<jsp:include /> 将另一个页面中的内容引入进来,include的指令会将整个jsp页面进行编译及翻译的过程,可以使用变量
(动作标签只是引入了页面的结果,指令是将整个jsp的逻辑等都加载进来)
2. <jsp:forward /> 以标签的形式替换了request在小脚本中的跳转形式