吴鹏
总结
---------------------------------------------------
熟练掌握Cookie几个常用API
getName();
getValue();
setDomain(String domain); 设置Cookie的有效域名
setPath(String path);设置Cookie的有效路径
setMaxAge(int maxAge);设置Cookie的有效时间
向浏览器保存数据:HttpServletResponse有一个办法,
void addCookie(Cookie cookie);
获得浏览器带过来的Cookie:
HttpServletRequest有一个办法,
Cookie[] getCookies();
创建一个Cookie对象:
Cookie(String name,String value);
--------------------------------------------------
学会在JSP中嵌入Java代码
jsp中嵌套Java代码的三种方式(JSP的脚本元素):
<% int a = 5; %>;翻译成类中的service方法内部的内容,可以定义变量,定义类,直接写一些代码块;
<%! int i = 3; %>;翻译成Servlet中的成员部分,可以定义变量,定义方法,定义类;Servlet线程不安全,尽量少在类中定义成员属性;
<%= Java的表达式 %>;翻译成service内部的out.println();表达式后面不能加";"
--------------------------------------------------
会话技术:
用户打开浏览器访问页面,访问了网站了很多页面,访问侯将浏览器关闭的过程,称为一个会话;
为什么要使用会话技术:
使用会话技术,可以将访问的一些记录保存在浏览器;
因为不在ServletContext中,是针对整个项目的,会导致不同的用户选择相同的商品内容,而request域对象,在选择一个商品后,
再选择其它商品的话,会发送一次新的请求,这样之前存放的内容就消失了,最后剩下的只有最后选中的那件商品,如果使用转发,
只能转发到结账页面,用户体验不好;
------------------------------------------------
掌握显示用户的上次访问时间案例
思考方向:
//获得浏览器中带的所有的cookie信息,从数组中查找有没有指定的cookie;
//判断是否第一次访问:
//如果是第一次,显示欢迎,记录当前访问的时间,存入到cookie
//如果不是第一次,显示欢迎,上一次访问时间,同时记录当前访问的时间存入到cookie中;
后台代码实现:
response.setContentType("text/html;charset=UTF-8");
Integer count = (Integer) this.getServletContext().getAttribute("count");
response.getWriter().println("<h1>现在网站被访问的次数为:"+count+"</h1>");
Cookie[] cookies = request.getCookies();
Cookie cookie =null;
if(cookies != null) {
for(Cookie c : cookies) {
if("lastvisit".equals(c.getName())) {
cookie = c;
}
}
}
if (cookie == null){
response.getWriter().println("<h1>欢迎,你是第"+count+"位访问此网站的用户</h1>");
} else {
long l = Long.parseLong(cookie.getValue());
Date d = new Date(l);
response.getWriter().println("<h1>欢迎,你是第"+count+"位访问此网站的用户,上次的访问时间是"+d.toLocaleString()+"</h1>");
}
Cookie c1 = new Cookie("lastvisit",""+System.currentTimeMillis());
response.addCookie(c1);
-----------------------------------------------------------------------------------
掌握显示商品浏览记录案例 思考方向: // 接收商品id;
// 接收从客户端带过来的所有Cookie
// 从Cookie的数组中查找制定名称的Cookie
// 判断是否是第一次浏览商品:
// 第一次浏览商品
// 直接将商品的ID存入到Cookie
// 将Cookie回写到浏览器
// 不是第一次浏览商品:
// 判断当前商品是否已经在浏览记录中
// 已经存在:移除当前元素,将当前元素添加到最开始
// 没在浏览记录中:
// 判断是否已经超过了最大长度:如果超过:删除最后一个 将当前元素添加到最前面
// 没有超过:直接将该元素添加到最前面位置
// 将转换的id的只存入到Cookie中,回写到浏览器;
代码实现:
String id = request.getParameter("id");
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtils.findCookie(cookies, "history");
if (cookie == null) {
Cookie c = new Cookie("history", id);
c.setPath("/day0605");
c.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(c);
} else {
String[] strs = cookie.getValue().split("-");
// List<String> list = Arrays.asList(strs);
LinkedList<String> list2 = new LinkedList<String>(Arrays.asList(strs));
if (list2.contains(id)) {
list2.remove(id);
list2.addFirst(id);
} else {
if (list2.size() >= 5) {
list2.removeLast();
list2.addFirst(id);
} else {
list2.addFirst(id);
}
}
StringBuffer sb = new StringBuffer();
for (String s : list2) {
sb.append(s).append("-");
}
String str = sb.substring(0, sb.length() - 1).toString();
Cookie c1 = new Cookie("history", str);
response.addCookie(c1);
}
其中使用到的方法 CookieUtils.findCookie(Cookie[] cookies, String name)的实现代码如下:
public static Cookie findCookie(Cookie[] cookies, String name) {
if (cookies == null) {
return null;
} else {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie;
}
}
return null;
}
}
|