Cookie对象、及JSP内置对象2
Cookie
cookie不是内置对象。使用时,需要先new。
定义
Cookie是由服务端生成,发送到客户端保存。当客户端第一次请求时,服务端会生成一个Cookie,里面包含客户端想要的信息,发送到客户端。客户端在本地将Cookie保存下来。在Cookie没有失效的情况下,客户端再次发出相同的请求时,直接在本地查找Cookie,获得信息,不需要经过服务器端,提高了效率。
功能
类似于本地缓存的作用。可以保存密码等信息。可以提高访问服务器的效率,但是安全性较差。
常见方法
Cookie内包含一个name变量、value变量。
public Cookie(String name , String value); //构造函数
String getName(); //返回属性名
String getValue(); //返回value值
void setMaxAge(int expiry); //设置最大的有效期,单位为秒
服务器端生成Cookie
Cookie cookie = new Cookie("name","zhangsan"); //声明一个Cookie类对象cookie,name=zhangsan
response.addCookie(cookie); //将cookie加到response对象中
服务端发送Cookie到客户端:页面跳转(重定向、转发均可)
客户端获取Cookie
request.getCookies();
注意:
- 客户端
不能获取某一个单独
的Cookie对象,只能获取全部的对象。 - 服务器增加Cookie对象: response对象,客户端获取Cookie对象:request对象。
- Cookie的值最好只用英文、数字;尽量不要用中文、特殊符号,不然要转换编码。
示例1:实现Cookie的过程
在根目录下,新建一个Cookie_Demo文件夹,在该文件夹下,新建response_addCookie.jsp 和 result.jsp 文件。
response_addCookie.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<% //服务端生成Cookie
Cookie cookie1 = new Cookie("name","zhangsan");
Cookie cookie2 = new Cookie("pwd","123456");
//response对象增加Cookie对象
response.addCookie(cookie1);
response.addCookie(cookie2);
//发送Cookie,页面跳转到客户端(重定向、转发都可以)
response.sendRedirect("result.jsp");
%>
</body>
</html>
result.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<%
//客户端获取全部的Cookie
Cookie [] cookies =request.getCookies();
for(Cookie cookie : cookies){
out.println(cookie.getName()+" "+cookie.getValue()+"<br>");
}
%>
</body>
</html>
测试
运行response_addCookie.jsp页面,显示如下:
可以发现除了自己设置的两个Cookie对象,还有一个name=JSESSIONID的Cookie。
为什么有这个Cookie?
原因见下文的 session对象的工作机制。
如何在浏览器中,查看Cookie
- 在谷歌浏览器中运行response_addCookie.jsp页面
- F12,进入开发者模式
- 点击Application,点击Cookies,点击当前网页,显示如下:
示例2:自动保存用户名信息
在Cookie_Demo文件夹下,新建login.jsp 和 check.jsp 文件。login.jsp 和 result.jsp 作为客户端,check.jsp作为服务器端。
login.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<%! //声明全局变量
String uname ="";
String pwd = "";
boolean flag = false ; //flag:标记Cookie是否有效
%>
<% //提取出uname的value值
Cookie [] cookies = request.getCookies();
for(Cookie cookie : cookies){
if(cookie.getName().equals("name")){
uname=cookie.getValue();
flag=true;
}
if(cookie.getName().equals("pwd")){
pwd=cookie.getValue();
}
}
if(flag){
out.print("Cookie : " + uname + "&l