### 域对象
* request
* 一次请求
* servletContext
* 整个WEB项目
### Cookie
* 会话技术
* 用户打开一个浏览器访问页面,到将浏览器关闭的整个过程称为会话
* 常见会话技术
* Cookie
* 将数据保存到客户端浏览器.
* Session
* 将数据保存到服务器端.
* Cookie常用的API
* 想浏览器保存数据
* httpServletResponse对象.addCookie(Cookie cookie)
* 获取浏览器带过来的是Cookie
* Cookie[] httpServletRequest对象.getCookies();
* 创建一个Cookie
* Cookie (String name,String value)
### JSP
* 概述
* JAVA Servlet Pages(java服务器页面)
* JSP的执行过程
* JSP会被翻译成Servlet,编译成class进行执行的.
* JSP中写入java代码
* <%! %>---成员部分(为了保证线程安全,尽量少定义成员属性)---加分号
* <% %>---service方法的内部内容---加分号
* <%= %>---service方法内部的out.print() ---不能加分号
### 记录用户上次访问时间
* 工具类
* public static Cookie findCookie(Cookie[] cookies, String name) {
if (cookies == null) {
return null;
} else {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
return cookie;
}
}
return null;
}
}
* // 获得浏览器带过来的所有的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());
// 保存到浏览器端:
response.addCookie(c);
### 持久化Cookie
* Cookie的常用API
* getName()
* getValue()
* setDomain(String domain)--设置Cookie的有效域名
* setPath(String path)---设置有效路径
* SetMaxAge(int maxAge)---设置Cookie有效时间
* Cookie的分类
* 会话级别
* 打开到关闭浏览器
* 持久级别
* 设置Cookie的有效时间,关闭浏览器还会在
* 可手动销毁Cookie.setMaxAge(0);
* 前提是有效路径一样
## session
### session(原理基于Cookie)
* Cookie与 Session的区别
* Cookie
* 本身是有大小和个数的限制.
* 数据保存在客户端.
* Session
* 没有限制
* 数据保存在服务器端
* 创建Session
* request.getSession()
### Session域对象
* 生命周期
* 创建:第一次去调用getSession()
* 销毁:三种情况
* 过期:默认为30分钟
* 非正常关闭服务器,如果正常关闭会序列化保存(文件类型)
* 手动调用session.invalidate();
* 作用范围
* 多次请求
### 验证码
* // 获取输入框的数据
String code1 = request.getParameter("code");
// 获得图片中的验证码信息
String code2 = (String) request.getSession().getAttribute("code2");
// 清除Session
request.getSession().removeAttribute("code2");
// 判断两个数据是否相同
if (!code1.equalsIgnoreCase(code2)) {
// 将文本数据存到request域中
request.setAttribute("msg", "验证码输入错误!");
request.getRequestDispatcher("/demo/chekimg.jsp").forward(request, response);
return;
}
response.getWriter().println("ss");
* request域中的数据可以由 ${...}取出
* 点击验证码更换图片
* document.getElementById("img1").src="/day15/CheckImgServlet?time="+new Date().getTime();
* 需要添加时间戳,否则图片由于本地缓存的问题不会改变
### 购物车
* // 接收商品名称:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
// 创建Map集合用于保存购物信息.Map<String,Integer> Map的key是商品的名称 value是购买的数量.
Map<String,Integer> map = (Map<String, Integer>) request.getSession().getAttribute("cart");
if(map == null){
map = new LinkedHashMap<String,Integer>();
}
// 判断购物车中是否已经买了该商品.
if(map.containsKey(name)){
// map中已经有该商品:// * 如果购物车中已经有该商品: 获得到Map中该商品的数量+1。 存回到Map集合中.
Integer count = map.get(name);
count++;
map.put(name, count);
}else{
// map中没有该商品.// * 如果购物车中没有改商品: 将商品添加到Map集合中 数量1.
map.put(name, 1);
} |
|