JavaWeb案例:上次访问时间 Cookie技术

 1 package cn.itcast.access;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.Cookie;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.io.IOException;
10 import java.text.SimpleDateFormat;
11 import java.util.Date;
12 
13 @WebServlet("/lastTime")
14 public class LastTimeServlet extends HttpServlet {
15     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
16         /*
17         案例需求:
18         1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
19         2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
20 
21         1.用户访问Servlet资源
22         2.从记忆中获取访问时间
23             Servlet中getCookies()
24             判断是否为null
25                 判断是否存在lastTime
26                     存在,则获取用户时间,并将当前时间存入,显示上次访问
27 
28             用户是第1次访问,显式首次访问
29 
30         如果没有,说明第1次访问,则提示:您好,欢迎您首次访问。
31         如果有,则提示:欢迎回来,您上次访问时间为:显示时间字符串
32          */
33 
34         //编码
35 
36         response.setContentType("text/html;charset=utf-8");
37         //从记忆中获取访问时间
38         Cookie[] cookies = request.getCookies();
39         if(cookies != null){
40             //判断是否存在lastTime
41             for (Cookie cookie : cookies)
42                 if (cookie.getName().equals("lastTime")) {
43                     String lastTimeMillisStr = cookie.getValue();
44                     //存入当前时间
45                     Cookie currentTime = new Cookie("lastTime", String.valueOf(System.currentTimeMillis()));
46                     //保存1天
47 //                    currentTime.setMaxAge(60 * 60 * 24);
48                     response.addCookie(currentTime);
49 
50                     //用户已经访问,输出上次访问
51                     Date lastTimeDate = new Date();
52                     lastTimeDate.setTime(Long.parseLong(lastTimeMillisStr));
53 
54                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
55                     String lastTimeStr = sdf.format(lastTimeDate);
56                     response.getWriter().write("欢迎回来,您上次访问时间为:" + lastTimeStr);
57 
58                     return;
59                 }
60         }
61 
62         //首次访问
63         //存入当前时间
64         Cookie currentTime = new Cookie("lastTime", String.valueOf(System.currentTimeMillis()));
65         //保存1天
66 //        currentTime.setMaxAge(60 * 60 * 24);
67         response.addCookie(currentTime);
68 
69         response.getWriter().write("您好,欢迎您首次访问。");
70     }
71 
72     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
73         doPost(request, response);
74     }
75 }
版本1 直接就写
 1 package cn.itcast.access;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.Cookie;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.io.IOException;
10 import java.text.SimpleDateFormat;
11 import java.util.Date;
12 
13 @WebServlet("/lastTime2")
14 public class LastTimeServlet2 extends HttpServlet {
15     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
16         /*
17         案例需求:
18         1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
19         2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
20 
21 
22         1.用户访问Servlet资源
23         2.从记忆中获取访问时间
24             Servlet中getCookies()
25             判断是否为null
26                 判断是否存在lastTime
27                     存在,则获取用户时间,并将当前时间存入,显示上次访问
28 
29             用户是第1次访问,显式首次访问
30 
31         如果没有,说明第1次访问,则提示:您好,欢迎您首次访问。
32         如果有,则提示:欢迎回来,您上次访问时间为:显示时间字符串
33          */
34 
35         //编码
36         response.setContentType("text/html;charset=utf-8");
37 
38         //1.存入访问时间(毫秒值形式)
39         Cookie currentTime = new Cookie("lastTime", String.valueOf(System.currentTimeMillis()));
40 //        currentTime.setMaxAge(60 * 60 * 24);
41         response.addCookie(currentTime);
42 
43         //2.从记忆中获取上次访问时间
44         Cookie lastTimeCookie = null;
45         Cookie[] cookies = request.getCookies();
46         if(cookies != null){
47             //判断是否存在lastTime
48             for (Cookie cookie : cookies)
49                 if (cookie.getName().equals("lastTime")) {
50                     lastTimeCookie = cookie;
51                     break;
52                 }
53         }
54 
55         //3.判断lastTimeCookie是否存在
56         if(lastTimeCookie != null){
57             //是,上次访问
58             Date lastTimeDate = new Date();
59             lastTimeDate.setTime(Long.parseLong(lastTimeCookie.getValue()));
60 
61             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
62             String lastTimeStr = sdf.format(lastTimeDate);
63             response.getWriter().write("欢迎回来,您上次访问时间为:" + lastTimeStr);
64         }else{
65             //否,首次访问
66             response.getWriter().write("您好,欢迎您首次访问。");
67         }
68 
69     }
70 
71     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
72         doPost(request, response);
73     }
74 }
版本2 使用毫秒值
 1 package cn.itcast.access;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.Cookie;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.io.IOException;
10 import java.net.URLDecoder;
11 import java.net.URLEncoder;
12 import java.text.SimpleDateFormat;
13 import java.util.Date;
14 
15 @WebServlet("/lastTime3")
16 public class LastTimeServlet3 extends HttpServlet {
17     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18         /*
19         案例需求:
20         1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
21         2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
22 
23 
24         1.用户访问Servlet资源
25         2.从记忆中获取访问时间
26             Servlet中getCookies()
27             判断是否为null
28                 判断是否存在lastTime
29                     存在,则获取用户时间,并将当前时间存入,显示上次访问
30 
31             用户是第1次访问,显式首次访问
32 
33         如果没有,说明第1次访问,则提示:您好,欢迎您首次访问。
34         如果有,则提示:欢迎回来,您上次访问时间为:显示时间字符串
35          */
36 
37         //编码
38         response.setContentType("text/html;charset=utf-8");
39 
40         //1.存入访问时间(日期字符串形式)
41 
42         //获取当前日期字符串
43         Date currentDate = new Date();
44         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
45 
46         //将当前日期字符串,存入cookie
47         Cookie currentTime = new Cookie("lastTime", URLEncoder.encode(sdf.format(currentDate), "UTF-8"));
48 //        currentTime.setMaxAge(60 * 60 * 24);
49         response.addCookie(currentTime);
50 
51         //2.从记忆中获取上次访问时间
52         Cookie lastTimeCookie = null;
53         Cookie[] cookies = request.getCookies();
54         if(cookies != null){
55             //判断是否存在lastTime
56             for (Cookie cookie : cookies)
57                 if (cookie.getName().equals("lastTime")) {
58                     lastTimeCookie = cookie;
59                     break;
60                 }
61         }
62 
63         //3.判断lastTimeCookie是否存在
64         if(lastTimeCookie != null){
65             //是,上次访问
66             response.getWriter().write("欢迎回来,您上次访问时间为:" + URLDecoder.decode(lastTimeCookie.getValue(),"UTF-8"));
67         }else{
68             //否,首次访问
69             response.getWriter().write("您好,欢迎您首次访问。");
70         }
71 
72     }
73 
74     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
75         doPost(request, response);
76     }
77 }
版本3 使用日期字符串

030_会话技术

1)什么是会话?
名词解释:会话描述的是通信双方之间一次交流过程。
特点:某个时刻对之前的会话内容都有记忆,可以基于这些记忆进行交流。

2)什么是web会话?
web会话:浏览器和服务器之间的交互过程,包含多次请求和响应。

3)会话技术:Cookie和Session
为会话存储数据的技术。Cookie把数据存储在客户端,Sessionba把数据存储在服务器。

核心:
即对数据跨请求的记忆和基于这些记忆的操作。
对数据跨请求存储和基于数据的操作。

posted @ 2019-05-08 17:10  没有理由不会呀  阅读(439)  评论(0编辑  收藏  举报