JSP状态管理 及 Cookie实例
HTTP协议的无状态性
无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端的请求。
但是当同一个浏览器再次发送请求给了服务器的时候,服务器并不知道它就是刚才那个浏览器。
简单地说,就是服务器不回去记得你,所以就是无状态协议。
保存用户状态的两大机制:Session和Cookie。
什么是Cookie?
Cookie:中文名称“小甜饼”,是Web服务器保存在客户端的一系列文本信息。
典型应用一:判定注册用户是否已经登录网站。
典型应用二:“购物车”的处理。
Cookie的作用:
对特定对象的追踪
保存用户网页浏览记录和习惯
简化登录
安全风险:容易泄露用户信息
JSP页面中创建与使用Cookie
创建Cookie对象
Cookie newCookie = new Cookie(String key, Object value);
写入Cookie对象
reponse.addCookie(newCookie);
读取Cookie对象
Cookie[] cookies = request.getCookie();
JSP中创建和使用Cookie的常用方法
方法名称 |
说明 |
void setMaxAge(int expiry) |
设置cookie的有效期,以秒为单位 |
void setValue(String value) |
在cookie创建后,对cookie进行赋值 |
String getName() |
获取cookie的名称 |
String getValue() |
获取cookie的值 |
int getMaxAge() |
获取cookie的有效时间,以秒为单位 |
案例:实现记忆用户名和密码功能
登陆的时候会提示是否记住用户。
首先是用户的一个登陆界面login.jsp,登录界面中除了有用户名和密码,还有一个checkbox,用于提示用户是否记住用户名和密码。如果点选了这个checkbox,那么Cookie将会记住这个用户名和密码。
用户登录界面提交的表单将会传递到dologin.jsp页面中,这个页面负责Cookie相关的处理,并且将数据传递到user.jsp页面中。
这个页面需要通过login.jsp提交的表单判断checkbox是否勾选了,如果勾选了,那么我们需要设置username和password对应的cookie的生存时间为10天;如果没有勾选,则我们需要删除username和password对应的cookie。
user.jsp页面负责显示用户的用户名和密码。如果cookie保存了用户的用户名和密码,那么user.jsp页面中将会得到我的用户名和密码信息(by cookie)。
在user.jsp中我们只需要获取cookie中的信息就可以了。
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login page</title>
</head>
<body>
<%
//request.setCharacterEncoding("utf-8");
String username = "";
String password = "";
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0)
for (Cookie cookie : cookies)
if (cookie.getName().equals("username"))
username = URLDecoder.decode(cookie.getValue(), "utf-8");
else if (cookie.getName().equals("password"))
password = URLDecoder.decode(cookie.getValue(), "utf-8");
%>
<form name="regForm" action="dologin.jsp" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="<%=username %>"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value="<%=password %>"></td>
</tr>
<tr>
<td colspan="2"><input type="checkbox" name="isUseCookie" value="tenDays">十天内记住用户名和密码</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
login.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>do login page</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String[] isUseCookie = request.getParameterValues("isUseCookie");
if (isUseCookie != null && isUseCookie.length > 0) {
String username = URLEncoder.encode(request.getParameter("username"), "utf-8");
String password = URLEncoder.encode(request.getParameter("password"), "utf-8");
Cookie usernameCookie = new Cookie("username", username);
usernameCookie.setMaxAge(864000); // 864000 seconds == 10 days
Cookie passwordCookie = new Cookie("password", password);
passwordCookie.setMaxAge(864000);
response.addCookie(usernameCookie);
response.addCookie(passwordCookie);
}
else {
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0)
for (Cookie cookie : cookies)
if (cookie.getName().equals("username") || cookie.getName().equals("password")) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
request.getRequestDispatcher("user.jsp").forward(request, response);
%>
</body>
</html>
dologin.jsp
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String username = "";
String password = "";
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0)
for (Cookie cookie : cookies)
if (cookie.getName().equals("username"))
username = URLDecoder.decode(cookie.getValue(), "utf-8");
else if (cookie.getName().equals("password"))
password = URLDecoder.decode(cookie.getValue(), "utf-8");
%>
用户名:<%=username %><br>
密码:<%=password %><br>
<a href="login.jsp">返回登录页面</a>
</body>
</html>
user.jsp
效果:
session与cookie的对比
Session |
Cookie |
在服务器端保存用户信息 |
在客户端保存用户信息 |
Session中保存的是Object类型 |
Cookie中保存的是String类型 |
随会话的结束而将其存储的数据销毁 |
Cookie可以长期保存在客户端 |
保存重要的信息 |
保存不重要的用户信息 |
JSP状态管理 及 Cookie实例的更多相关文章
- JSP 状态管理 -- Session 和 Cookie
Http 协议的无状态性 无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求.但是同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器 session sessio ...
- 状态管理之cookie使用及其限制、session会话
# 1.什么是状态管理? 将浏览器与web服务器之间多次交互当作一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来.(cookie浏览器所涉及到的访问数据保存下来)# 2.如何进行状态管理? ...
- Redux状态管理方法与实例
状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...
- jsp状态管理
http无状态协议 服务器记不住你 每次浏览器访问,服务器不会特点保存相应信息,故记不住你 jsp状态存储的两种机制 cookie 存储在客户端 用途: 1.简化登陆 2.追踪特定对象 3.保存用户常 ...
- React + MobX 状态管理入门及实例
前言 现在最热门的前端框架,毫无疑问是React. React是一个状态机,由开始的初始状态,通过与用户的互动,导致状态变化,从而重新渲染UI. 对于小型应用,引入状态管理库是"奢侈的&qu ...
- JSP | 基础 | JSP状态管理 | Cookie
Cookie : 是web服务器保存在客户端的一系列文本信息. Cookie的作用: 1.对特定的对象的追踪 2. 3. JSP中创建Cookie以及使用 创建Cookie对象 写入Cookie对象 ...
- Java遇见HTML——JSP篇之JSP状态管理
一.http协议的无状态 无状态性是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求.但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道他就是刚才的那个浏览器.简单的说,就是服务器不 ...
- JSP状态管理_1_Cookie
http协议的无状态性:当浏览器发送请求飞服务器时,服务器相应客户端请求:但当同一个浏览器再次发送请求给浏览器时,服务器并不知道它就是刚才那个客户端. 保存用户状态的两大机制:Session,Cook ...
- JAVA遇见HTML——JSP篇(JSP状态管理)
案例:Cookie在登录中的应用 URL编码与解码的工具类解决中文乱码的问题,这个工具类在java.net.*包里 编码:URLEncoder.encode(String s,String enc)/ ...
随机推荐
- android的NDK和java进行本地socket通信
关于Android应用与Framework的socket通信,相信关心这个问题的朋友们已经看过<android使用socket使底层和framework通信>这篇文章,美中不足的是作者只贴 ...
- 使用meta属性禁用手机浏览器的缩放功能
在移动设备浏览器上,通过为视口(viewport)设置 meta 属性为 user-scalable=no 可以禁用其缩放(zooming)功能.这样禁用缩放功能后,用户只能滚动屏幕,就能让你的网站看 ...
- Makefile生成器,使用C++和Boost实现
今天学习了一下Boost的文件遍历功能,同一时候发现GNU编译器有-MM选项.能够自己主动生成依赖关系,于是利用以上两点写了一个Makefile生成器. 能够生成一般的单个可运行文件的Makefile ...
- POJ 3279 Fliptile (二进制+搜索)
[题目链接]click here~~ [题目大意]: 农夫约翰知道聪明的牛产奶多. 于是为了提高牛的智商他准备了例如以下游戏. 有一个M×N 的格子,每一个格子能够翻转正反面,它们一面是黑色,还有一面 ...
- 数据流图(DFD)画法
数据流图(DFD)画法要求 一.数据流图(DFD) 1.数据流图的基本符号 数据流图由四种基本符号组成,见图5-4-1所示. 图5-4-1 数据流图的基本符号 例:图5-4-2是一个简单的数据流图, ...
- Mysql主从同步(1)-主从/主主环境部署梳理
转 :https://www.cnblogs.com/kevingrace/p/6256603.html
- laravel多条件查询,及分页
$res = DtkModel::where('ID','>','1')->select("ID")->get()->paginate(20);//不成立 ...
- atitit.窗体静听esc退出本窗体java swing c# .net php
atitit.窗体静听esc退出本窗体java swing c# .net php 1. 监听esc 按键 1 1.1. 监听一个组件 1 1.2. 监听加在form上 1 2. 关闭窗体 2 1. ...
- CentOS安装使用git
yum install git yum install git-gui (可选) git config --global user.name "gg" git config --g ...
- vue2.0项目的环境配置以及有哪些的坑
npm run dev项目运行:$ git pull origin master 更新代码项目的提交代码git push -u origin master 这里就开始准备提交到网络上了 项目的地址gi ...