JavaWeb
第一章 Cookie技术(重要)
今日内容
1,之前学习了WEB核心技术servlet,request和response
2,今天接着学习WEB核心技术,第一部分会话技术,第二部分是JSP
3,会话技术包含了两部分内容,cookie和session
4,我们今天先学习cookie,然后学习JSP,最后再来学习Session,因为我们的JSP要充当叶一个页面展示层的作用
会话技术_概述
1,会话是一门非常重要的技术,在服务器端开发过程中,他可以解决非常重要的问题
2,会话和我们生活中的谈话或者是交谈非常的类似,一次会话就喝我们的一次谈话是一个意思
3,HTTP每次的请求和响应都是独立的,不能共享数据,交换状态,会话就可以解决这个问题
4,其他的编程语言也有会话技术的实现,就不再叫cookie和session了
5,客户端会话技术,就是把数据存到客户端的,服务器端会话技术,其实就是把数据存到服务器端,我们叫做服务器端会话技术
会话技术_Cookie_快速入门
1,学习了会话技术的基本概念和功能之后,接下来我们就来学习第一门会话技术,客户端会话技术,他的体现是cookie
2,每次的servlet都要写一些重复的代码,IDEA里边是可以修改servlet的模版的
package cn.itcast.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * * Cookie快速入门 * */ @WebServlet("/cookieDemo1") public class CookieDemo1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.创建Cookie对象 Cookie c = new Cookie("msg","hello"); //2.发送Cookie response.addCookie(c); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
package cn.itcast.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * * Cookie快速入门 * */ @WebServlet("/cookieDemo2") public class CookieDemo2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //3. 获取Cookie Cookie[] cs = request.getCookies(); //获取数据,遍历Cookies if(cs != null){ for (Cookie c : cs) { String name = c.getName(); String value = c.getValue(); System.out.println(name+":"+value); } } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
3,同一个浏览器访问,会实现数据共享
会话技术_Cookie_原理分析
1,cookie快速入门的代码还是很简单的,但是深入的理解cookie的技术,使用,原理
2,JavaWeb封装好的API来做的操作cookie,服务器帮我们做了很多的事,HTTP协议和浏览器帮我们做了很多的事
3,我们需要关注的非常的少,通过API去发送cookie,以及通过API来接受cookie,现在我们可以通过抓包工具来看看是不是这么些头在作用
4,浏览器关了,会话就全部结束了
5,以上就是cookie的原理,知道了这个原理之后,以后就可以更好的来使用cookie消息了
会话技术_Cookie_细节1_发送多个Cookie
1,介绍完cookie的实现原理,我们发现cookie其实是基于,响应头set-cookie和请求头cookie来实现的
2,下面我们来进行细节性的学习,可以学习到cookie的一些规则以及一些常用的API
3,cookie在浏览器中保存多长时间?
4,不是只有访问demo2才可以获取这些cookie,访问其他的也可以,再次访问demo1也是有的
package cn.itcast.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * * Cookie快速入门 * */ @WebServlet("/cookieDemo3") public class CookieDemo3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.创建Cookie对象 Cookie c1 = new Cookie("msg","hello"); Cookie c2 = new Cookie("name","zhangsan"); //2.发送Cookie response.addCookie(c1); response.addCookie(c2); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
会话技术_Cookie_细节2_Cookie存活时间
1,想要持久化,就需要文件了,设置cookie的生命周期,使他来持久化的存储
2,默认就是负数,不需要单独设置
package cn.itcast.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * * Cookie快速入门 * */ @WebServlet("/cookieDemo4") public class CookieDemo4 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.创建Cookie对象 Cookie c1 = new Cookie("msg","setMaxAge"); //2.设置cookie的存活时间 //c1.setMaxAge(30);//将cookie持久化到硬盘,30秒后会自动删除cookie文件 //c1.setMaxAge(-1); //c1.setMaxAge(300); c1.setMaxAge(0);//删除Cookie //3.发送Cookie response.addCookie(c1); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
会话技术_Cookie_细节3_Cookie存储中文
1,tomcat 8之前的版本,建议使用URL编码就是%E8类似这种的,才可以显示中文
会话技术_Cookie_细节4_Cookie共享
package cn.itcast.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * * Cookie快速入门 * */ @WebServlet("/cookieDemo5") public class CookieDemo5 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.创建Cookie对象 Cookie c1 = new Cookie("msg","你好"); //设置path,让当前服务器下部署的所有项目共享Cookie信息 c1.setPath("/"); //3.发送Cookie response.addCookie(c1); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
1,新闻的百度和贴吧的百度不可能部署在同一台tomcat的服务器上,如果同一台,不可能支持这么大的访问两
2,他们之间的cookie 怎么共享呢?
3,将来我们学习了电商项目之后,如果要去做一些域名的映射和分布式部署,那么这个点可能会用得到,这儿先不掩饰了,大家有个印象就可以了
会话技术_Cookie_特点&作用
1,介绍文cookie的使用方式和他的细节性问题之后,下来我们来聊一聊cookie的最后一个问题,cookie的特点
2,掌握了cookie的特点,你就知道了cookie到底有什么作用
3,数据存在客户端还是存在服务器他的差异还是比较大的,存储在服务器得话,服务器的防卫级别,安全级别都非常的高,存在服务器的数据安全性就要高很多,存在客户端的数据很容易丢失,也很容易被篡改,所以存在客户端的数据不是那么安全
4,下面看一下浏览器存储的cookie,这个地方指的是持久化存储,就是存储在硬盘上的
5,他可以在我设置之后,把我设置的这些信息,以cookie的形式存储到我的浏览器,下次我再次访问的时候,他可以拿到我的cookie信息完成我的设置信息
6,我第一次设置之后,服务器就会把这些cookie信息发送给浏览器保存,下一次只要是我带着这些cookie来了,服务器就知道是哪些设置了,显示的时候就相对的显示,这就是不登陆的时候,身份识别
7,如果是登陆的情况,那么这些设置可以放到数据库里面存储,那我我登陆以后,服务器就知道是我来了
8,以上cookie的作用和特点我们就介绍完了,最后我们来做一个案例
会话技术_Cookie_案例_分析
1,案例:记住上一次的访问时间
2,这样的案例在我们的服务器开发过程中,网站开发过程中经常我们会见到这样的案例
3,比方说我们登陆了这个网站之后,会自动告诉你,上一次是什么时候登陆的
4,案例需求:
会话技术_Cookie_案例_代码实现
1,分析完之后,我们来建立一个servlet
2,invalid character 32 代表空格,5XX代表服务器端错误
3,问题就是,原来cookie支持中文数字了,但是对于这种特殊的字符,他还是不支持
4,需要了解一下URL编码了,tomcat8支持中文了,但是对于特殊字符还是不支持的,建议使用URL编码
5,只有addcookie需要编码,getwriter.write不需要
package cn.itcast.cookie; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; /** 在服务器中的Servlet判断是否有一个名为lastTime的cookie 1. 有:不是第一次访问 1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20 2. 写回Cookie:lastTime=2018年6月10日11:50:01 2. 没有:是第一次访问 1. 响应数据:您好,欢迎您首次访问 2. 写回Cookie:lastTime=2018年6月10日11:50:01 */ @WebServlet("/cookieTest") public class CookieTest extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应的消息体的数据格式以及编码 response.setContentType("text/html;charset=utf-8"); //1.获取所有Cookie Cookie[] cookies = request.getCookies(); boolean flag = false;//没有cookie为lastTime //2.遍历cookie数组 if(cookies != null && cookies.length > 0){ for (Cookie cookie : cookies) { //3.获取cookie的名称 String name = cookie.getName(); //4.判断名称是否是:lastTime if("lastTime".equals(name)){ //有该Cookie,不是第一次访问 flag = true;//有lastTime的cookie //设置Cookie的value //获取当前时间的字符串,重新设置Cookie的值,重新发送cookie Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String str_date = sdf.format(date); System.out.println("编码前:"+str_date); //URL编码 str_date = URLEncoder.encode(str_date,"utf-8"); System.out.println("编码后:"+str_date); cookie.setValue(str_date); //设置cookie的存活时间 cookie.setMaxAge(60 * 60 * 24 * 30);//一个月 response.addCookie(cookie); //响应数据 //获取Cookie的value,时间 String value = cookie.getValue(); System.out.println("解码前:"+value); //URL解码: value = URLDecoder.decode(value,"utf-8"); System.out.println("解码后:"+value); response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+value+"</h1>"); break; } } } if(cookies == null || cookies.length == 0 || flag == false){ //没有,第一次访问 //设置Cookie的value //获取当前时间的字符串,重新设置Cookie的值,重新发送cookie Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String str_date = sdf.format(date); System.out.println("编码前:"+str_date); //URL编码 str_date = URLEncoder.encode(str_date,"utf-8"); System.out.println("编码后:"+str_date); Cookie cookie = new Cookie("lastTime",str_date); //设置cookie的存活时间 cookie.setMaxAge(60 * 60 * 24 * 30);//一个月 response.addCookie(cookie); response.getWriter().write("<h1>您好,欢迎您首次访问</h1>"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
1,cookie的名称如果相同得话,值会被覆盖掉
2,如果cookie如果要存储一些特殊的字符,我们需要对他进行一些URL的编解码
第二章 Jsp入门(理解)
第三章 Session技术(重要)
JSP_概念
JSP_原理
JSP_脚本
JSP_入门学习
JSP_案例_改造Cookie案例
会话技术_Session_快速入门
会话技术_Session_原理分析
会话技术_Session_细节1
会话技术_Session_细节2
会话技术_Session_细节3_session销毁
会话技术_Session_特点
案例_验证码_需求&分析
案例_验证码_代码实现
案例_验证码_细节处理