Java遇见HTML——JSP篇之JSP状态管理
2016-03-17 22:26
489 查看
一、http协议的无状态
无状态性是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求。但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道他就是刚才的那个浏览器。
简单的说,就是服务器不会去记得你,所以就是无状态协议。
既然http是一种无状态的传输协议,无法记录用户的状态,就要想办法保存用户的状态。
那么,如何保护用户状态呢?
保护用户状态的两大机制:
第一种方法:用JSP的九大内置对象之一Session。
第二种:就是一种客户端技术:Cookie
二、Cookie概述
Cookie:中文名称为“小甜饼”,是Web服务器保存在客户端的一系列文本信息。<%@page import="java.net.URLDecoder"%> <%@page import="java.net.URLEncoder"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'user.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h1>用户信息</h1> <hr> <br> <br> <% request.setCharacterEncoding("utf-8"); String userName=""; String passWord=""; Cookie[] cookies=request.getCookies(); if(cookies !=null && cookies.length>0){ for(Cookie c:cookies){ if(c.getName().equals("userName")){ /* userName=c.getValue(); */ userName=URLDecoder.decode(c.getValue(), "utf-8");//URLDecoder解码 } if(c.getName().equals("passWord")){ /* passWord=c.getValue(); */ passWord=URLDecoder.decode(c.getValue(), "utf-8"); } } } %> 用户名:<%=userName %><br> 密码:<%=passWord %><br> </body> </html>
View Code
运行结果:
具体分析:
1、在login.jsp中使用checkbox来记录用户是否需要保存cookies
2、在dologin页面进行cookies是否需要被保存的判定。
(1)通过request.getParamter()获取填写的用户名和密码;
(2)将获取的用户名和密码保存在cookie中;
Cookie usernameCookie = new Cookie("username",username); [键值对形式]
......
(3)将cookie保存在浏览器中。
使用response.addCookie(usernameCookie);
同时设置cookie的有效期:
使用usernameCookie.setMaxAge(648000); [单位为秒]
3、在登录成功后的用户界面调用cookie显示用户名和密码。(将客户端保存的cookie保存在数组中,然后赋值给字符串后用来输出显示)
4、保存中文cookie需要进行编码和解码,需要引入java的net包。(添加cookie时编码URLEncode,读取cookie后解码URLDecode)
for(Cookie c:cookies)
{
if(c.getName().equals("username"))
{
username = URLDecoder.decode(c.getValue(),"utf-8");
}
if(c.getName().equals("password"))
{
password = URLDecoder.decode(c.getValue(),"utf-8");
}
}
ps:java.net包中:
URLEncoder.encode();字符编码工具类
URLDecoder.decode();字符解码工具类
cookie在登录过程中出现的乱码问题解决方式
a:在对应页面中导入java.net.*包,并将相应的字符用转码URLEncode.encode(String,要转的编码)
b.在对应页面中导入java.net.*包,并将相应的字符用编码解码URLDecode.decode(String ,解码用的编码)
五、Session与Cookie的对比
即:
1、保存位置:session在服务器端内存,cookie在客户端文本
2、保存对象:session保存Object类,cookie保存String
3、生存权:session会话结束即销毁,cookie可以长期保存在客户端
4、重要性:session安全性更高,保存重要信息,cookie保存不重要的信息
ps:
Cookie中对保存对象的大小是有限制的.Session可以保存任意大小的的对象类型。
相关文章推荐
- Spring之AOP
- Java技术_Java千百问(0006)_如何用记事本编写Java程序
- Java面向对象03-对象内存管理,继承的意义
- Eclipse中给jar包导入JavaDoc的方法
- Java---软件试用次数(Properties类的简单使用)
- Java---软件试用次数(Properties类的简单使用)
- Java CopyOnWriteArrayList 源码分析
- Java流程控制语句
- eclipse中访问hdfs时候问题总结(hadoop-2.7.1)
- Eclipse中给jar包导入JavaDoc的方法
- Java多线程
- 矩阵翻硬币(2014年蓝桥杯Java-B组第十题)
- springMvc基本注解:@Component、@Repository(持久层) 、@Service(业务逻辑) 、@Controller(控制层)
- 【SSH网上商城】MyEclipse10激活
- JAVA WEB新进展
- mybatis和spring整合
- struts2获得原始request、response、session的两种方法
- 【JDK源码分析】浅谈HashMap的原理
- JAVA流程控制语句
- Spring AOP 注解和xml实现 --转载