黑马程序员技术交流社区

标题: cookie_session [打印本页]

作者: 人生若梦    时间: 2019-8-5 16:27
标题: cookie_session
1.会话技术
        会话: 打开浏览器,不断的访问....然后关闭浏览器,这个过程称之为一次会话
        作用: 用来共享数据, 这个存储的方式很明显比request域要大,比ServletContext域要小,一般情况这个共享数据是一次会话有效
2.Cookie
        是一种客户端会话技术, 将数据保存到客户端浏览器中
       
        增: ----> 从服务器中写东西给浏览器, 找resp, 设置一个响应头 set-cookie       
                1.创建Cookie(String key,String value); ---->只能存字符串的键值对
                2.通过resp中addCookie(cookie对象);
               
        删: ----->
                将maxAge调整成"零"
        改: ---->
                1.创建Cookie(String key,String value); ---->只能存字符串的键值对
                2.通过resp中addCookie(cookie对象);
        查: ---->从浏览器会携带cookie过来, 找req ----> 设置了一个请求头 cookie
                Cookie[] arr = req.getCookies();
       
        1.常见的方法:
                1.构造:
                        Cookie(String key,String value)
                2.方法
                        String getName(); ---->获取cookie的键
                        String getValue(); ---->获取cookie的值
                        void setMaxAge(int seconds) ---->调整cookie的存活时间
                                正数: -----> 指定时间有效, 默认单位是秒
                                负数 --->默认一次会话有效
                                零: ---->删除cookie
                                        Cookie c = new Cookie("aaa","123");
                                        Cookie c1 = new Cookie("aaa","");
                        setPath("路径") ------> 如果不给值, 默认当前项目的虚拟路径, 也就是有效范围是当前项目;
                        setDomain("路径") ---->可以在不同的服务器之间共享cookie
                               
        2.cookie的有效时间
                默认是一次会话有效, 原因默认MaxAge的值是一个负数
        3.是否能够存中文
                tomcat8以后可以存中文的, 但是我们不用, 原因是他不能存特殊字符!!!!所以还是延用之前的做法
                        如果有特殊字符要存, 建议用URLEncode编码一下, 取的时候记得要用URLDecode去解码一下
                        URLEncoder.encode(要编码的字符串,"原来的编码")
                        URLDecoder.decode(要解码的字符串,"组成的编码")
        4.Cookie的范围
                默认只在当前项目有效
                可以通过setPath做到在同一个服务器中,不同项目来共享数据  day15和day16项目之间想要共享数据,我们可以将setPath("/")
                可以通过setDomain("一级域名"),可以在不同的服务器中共享cookie
3.JSP
        作用: 为了弥补HTML的缺陷而得到东西, HTML不能写逻辑, html没有办法写java代码, jsp可以, 能够简化书写
        本质: 其实JSP本质就是一个Servlet, 如果没有他的话, 我们动态资源只有Servlet, 所有的书写标签的动作都的由我们自己去写很恶心
                  而jsp老厉害, 既可以写HTML的代码还可以java的代码, 而jsp引擎自动帮我们生成jsp对应的Servlet类, 所有输出动作,由jsp引擎帮
                  我们自动生成!!!!!
        jsp中如何书写java代码
                <%%> : 生成的代码在service方法内部
                <%!%>: 在成员区域
                <%=%>: 输出页面上面,他也是service方法中,out.print(内容);
        面试:
                1.        <%
                                public void method(){
                                       
                                }
                        %>
                        分析: 这个典型错误, 因为<%%>在service方法里面, 方法不能嵌套方法
                2.
                        <%
                                private String name;
                        %>
                        分析: 这个典型错误,因为<%%>在service方法里面,不用权限修饰符修饰
                3.
                        <%! int a; %>
                        分析:正确,相当于定义一个成员变量
                4.
                        <%
                                int a;
                        %>
                        <%
                                System.out.println(a);
                        %>
                        分析: 典型错误,a是局部变量, 局部没有赋值不能使用
                5.
                        <%
                                int a;
                        %>
                        <%
                                int a = 10;
                                System.out.println(a);
                        %>
                        分析: 典型错误, 在一个方法中不能出现重名的变量
                6.
                        <%= System.out.println("你好") %>
                        分析: 典型错误, 因为<%=%> 是out.print()小括号里面的东西
                7.
                        <%
                                int a = 10;
                        %>
                        <%= a;%>
                        分析:典型错误,因为<%=%> 是out.print()小括号里面的东西
        如何学好jsp
                jsp = HTML + JAVA + 内置对象
        内置对象       
                9个内置对象
                        request
                        response
                                有缓冲区d
                        out
                                有缓冲区abc
                       
                        out.write("a");
                        out.write("b");
                        out.write("c");
                        resp.getWrite().write("d");
4.Session(HttpSession)
        服务器端的技术,说白了, 他的数据保存到服务器中,而且是一个域对象
        方法:
                setAttr...
                getAttr...
                removeAttr...
        获取:
                req.getSession();
        原理:
                服务器怎么保证张三用户拿到永远的"张三的数据"
                他底层基于cookie的, 每个客户的浏览器中保存cookie这个可以看成打开session的钥匙
        1.当浏览器关闭后,服务器不关闭,我们获取的session是不是同一个?
                答:不是, 因为session基于cookie, 而浏览器关闭后, cookie就消失了, 钥匙失效了, 在次打开浏览器,就不会带着原来的钥匙过去!!!
                解决: 我们可以延长cookie的有效时长
                面试:session的销毁时机是一次会话结束!
                答:错误的, session 默认存活时间是30min, 让session失效并不是session销毁了, 是cookie不见了!!!!
        2.当浏览器不关闭, 服务器关闭,
                获取的session不是同一个, 但是我们知道数据可以得到,tomcat有活化和钝化机制, 而且tomcat自带的!!!!!!
                注意: idea能够完成钝化, 不能完成活化, 原因是因为当idea启动之后会将work目录删除掉, 也会连钝化的文件也会被删掉
       
                       




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2