您的位置:首页 > 编程语言 > Java开发

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可以保存任意大小的的对象类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: