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 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 }
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 }
030_会话技术
1)什么是会话?
名词解释:会话描述的是通信双方之间一次交流过程。
特点:某个时刻对之前的会话内容都有记忆,可以基于这些记忆进行交流。
2)什么是web会话?
web会话:浏览器和服务器之间的交互过程,包含多次请求和响应。
3)会话技术:Cookie和Session
为会话存储数据的技术。Cookie把数据存储在客户端,Sessionba把数据存储在服务器。
核心:
即对数据跨请求的记忆和基于这些记忆的操作。
对数据跨请求存储和基于数据的操作。