本帖最后由 小石姐姐 于 2018-5-30 15:23 编辑
cookie (域对象)
1.什么是会话:
用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
1.1常见的会话技术:
* Cookie :将数据保存到客户端浏览器.
* Session :将数据保存到服务器端.
1.2.为什么使用会话技术?
* 私有的数据,购物信息数据保存在会话技术中.
2.用户数据私有化
* Cookie : 由于每个人的设备不同,保证了数据的私有
* Session: 为每个人创建一个空间,每个空间都有不同的钥匙,保证了数据的私有
3.【Cookie技术的使用】
* 向浏览器保存数据:(从服务器向浏览器端保存数据)
**HttpServletResponse有一个方法:
void addCookie(Cookie cookie);
* 获得浏览器带过来的Cookie:
**HttpServletRequest有一个方法:
Cookie[] getCookies();
*创建一个Cookie对象:
Cookie(String name,String value);
* Cookie中存的也是键值对 name=value
* Name : 为cookie的名字
* Value : 为cookie的值
* 要保证cookie的名字不同
例:/*
* 创建Cookie
Cookie cookie1 = new Cookie(“a”,”aaa”);
Cookie cookie2 = new Cookie(“b”,”aaa”);
Cookie cookie3 = new Cookie(“c”,”aaa”);
* 向浏览器保存数据:
Response.addCookie(cookie1)
Response.addCookie(cookie2)
Response.addCookie(cookie3)
* 获得从浏览器端带过来的数据:
Cookie[] coolis = request.getCookies();
*/
* getName();获取名字
* getValue();获取值
* setDomain(String domain);
设置Cookie的有效域名. //www.baidu.com music.baidu.com
* setPath(String path);
设置Cookie的有效路径.(访问指定的资源是才获取cookie)
一般是为了删除持久性的cookie
一般传入工程名就行 "/工程名"
例:
/*
删除持久性cookie:
Cookie c = new Cookie(); //新建cookie
C.setPath(“/day10”); //通过
C.setMaxAge(60*60); //存活时间为1小时
*/
* setMaxAge(int maxAge); -- 设置Cookie的有效时间(默认的时间单位是秒).
4.Cookie的分类有关:
* 会话级别的Cookie: 默认的Cookie.关闭浏览器Cookie就会销毁.
* 持久级别的Cookie: 可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在.
* 手动销毁持久性 Cookie. setMaxAge(0)---前提是有效路径必须一致.
例:
/*
Cookie c = new Cookie(); //新建cookie
C.setPath(“/day10”); //设置有效路径
C.setMaxAge(60*60); //存活时间为1小时
*/
5.cookie存储中文的问题,cookie: 不能存储中文
/*
使用到了两个方法:
URLDecoder.decoder(String s ,charset);
URLEncoder.encoder(String s ,charset);
*/
public class CookieEncodeing extends HttpServlet{
private static final long serialVerionsUID = 1L;
protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletExvletException{
//获得cookie数组
Cookie[] cookies = request.getCookies();
Cookie aa = CookieUtils.findCookie(cookie,"aa");
if(aa != null){
String value = aa.getValue();
//既然存储的时候进行了编码
//因此取出的时候也要进行对应的解码
String a = URLDecoder.decoder(value,"utf-8");
}
//往cookie中存储中文时 , 先对其进行编码
String value = URLEncoder.encode("中文","utf-8");
Cookie cookie = new Cookie("aa",value);
response.addCookie(cookie);
}
}
6.记录最后登录时间
* 使用了Cookie 的方法:
getValue();
Cookie(String name , String value):的两个参数都是String类型
* ServletRequest 的方法:
getCookies()
* ServletResponse() 的方法:
addCookie();
* 获取系统时间: System.currentTimeMillis()
* Date的
构造 new Date(Long Millis);
toLocaleString();//格式化时间
public class CountServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
Integer count = (Integer) this.getServletContext().getAttribute("count");
// response.getWriter().println("<h1>现在网站被访问的次数为:"+count+"</h1>");
/**
* 获得浏览器中带过来的所有的Cookie信息,从数组中查找有没有指定名称的Cookie
* 判断用户是否是第一次访问:(从数组中没有找到指定名称的Cookie)
* * 如果是第一次:显示欢迎,记录当前访问的时间存入到Cookie中.
* * 如果不是第一次:显示欢迎,上一次访问时间,同时记录当前访问的时间存入到Cookie中。
*/
// 获得浏览器带过来的所有的Cookie:
Cookie[] cookies = request.getCookies();
// 从数组中查找指定名称的Cookie:
Cookie cookie = CookieUtils.findCookie(cookies, "lastVisit");
// 判断是否是第一次:
if(cookie == null){
// 第一次访问
response.getWriter().println("您是第"+count+"位访客!");
}else{
// 不是第一次
Long l = Long.parseLong(cookie.getValue());
Date d = new Date(l);
response.getWriter().println("您是第"+count+"位访客! 上次访问时间是:"+d.toLocaleString());
}
// 创建一个Cookie对象:
Cookie c = new Cookie("lastVisit",""+System.currentTimeMillis());//把时间long装换为字符串
// 保存到浏览器端:
response.addCookie(c);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
7.清空浏览的Cookie记录
* 通过设置一个与要删除的cookie的name值一样的cookie,有效路径相同,存储时间为零,
然后用respons.addCookie()存入cookie,将之前的cookie覆盖,由于新的cookie存储时间为0,
因此响应一结束,该cookie就会消毁;
删除持久性的Cookie:
/*
public class ClearServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("history",null);
cookie.setPath("/day11");
cookie.setMaxAge(0);
response.addCookie(cookie);
response.sendRedirect("/day11/demo2/product_list.jsp");
}
*/
8. * public void forward(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException
* 将请求从一个 servlet 转发到服务器上的另一个资源(servlet、JSP 文件或 HTML 文件)。
此方法允许一个 servlet 对请求进行初步处理,并使另一个资源生成响应。
|
|