zoukankan      html  css  js  c++  java
  • Document

    回顾:
    response:响应
        往浏览器写东西
        响应行
            操作状态码
            常用方法:
                setStatus(int code): 1 2 3
        响应头
            格式: 
                key:value(value可以是多个)
            常用方法:
                setHeader(String key,String value):设置字符串形式的响应头
                addHeader(String key,String value):添加字符串形式的响应头 若没有设置则设置,若设置过则追加
        响应体
            浏览器展示的内容
            常用方法:
                getWriter()
                getOutputStream()
            注意:
                俩流互斥,服务器会把我们关闭
        //////////////////////////////////////////
        常见的响应头
            location:重定向 配合302
                开发中:response.sendRedirect("路径");
            refresh:定时刷新 
                response.setHeader("refresh","秒数;url=路径");//java
                meta//html
            content-type:设置文件的mimetype,设置响应流的编码且告诉浏览器用什么编码打开
                开发中:response.setContentType("text/html;charset=utf-8");
            content-disposition:设置文件下载
                response.setHeader("content-disposition","attachment;filename="+文件名称);
        文件下载:
            设置两个头一个流
                content-type
                content-disposition
                
                getOutputStream()
        //////////////////////////////////////
    request:请求
        获取从浏览器发送过来数据
        请求行
            常用方法:
                获取项目名:getContextPath()
        请求头
            格式:
                key:value(value可以是多个)
            常用方法:
                getHeader(String key)
        请求参数
            String getParameter(String key)
            String[] getParameterValues(String key)
            Map<String,String[]> getParameterMap()
            获取参数中文乱码:
                通用方式:
                    new String(参数.getBytes("iso-8859-1"),"utf-8");
                针对于post:
                    request.setCharacterEncoding("utf-8");
        ////////////////////
        常用的头信息:
            user-agent:获取浏览器内核
            referer:页面从那里跳转过来
    ///////////////////////////
    request域对象:
        xxxAttribute()
        请求转发:
            request.getRequestDispatcher("/内部路径").forward(request,response);
            
    ////////////////////////////////////////////////////////////////////////        
    ////////////////////////////////////////////////////////////////////////        
    ////////////////////////////////////////////////////////////////////////        
    jsp cookie session
    ////////////////////
    案例1-记录用户上次访问时间
    需求:
        当用户第一次登录的时候,提示:你是第一次访问,且记录该次访问时间,
        下一次访问的时候,获取上一次访问时间且展示出来
    技术分析:
        会话技术
        cookie
        jsp
    //////////////////////////////////
    jsp:
        java server pages(java服务器页面)
        本质上jsp就是一个servlet,在html代码中嵌套java代码,
        运行在服务器端,处理请求,生成动态的内容.
        对应的java和class文件在tomcat目录下的work目录
        后缀名 .jsp
        
        执行流程:
            1.浏览器发送请求,访问jsp页面
            2.服务器接受请求,jspSerlvet会帮我们查找对应的jsp文件
            3.服务器将jsp页面翻译成java文件.
            4.jvm会将java编译成.class文件
            5.服务器运行class文件,生成动态的内容.
            6.将内容发送给服务器,
            7.服务器组成响应信息,发送给浏览器
            8.浏览器接受数据,解析展示
        
        jsp的脚本:    
            <%...%> java程序片段
                生成成jsp的service方法中
            <%=...%> 输出表达式
                生成成jsp的service方法中,相当于在java中调用out.print(..)
            <%!...%> 声明成员
                成员位置.
    /////////////////////////////////////////////////        
    会话技术
        当用户打开浏览器的时候,访问不同的资源,知道用户将浏览器关闭,可以认为这是一次会话.        
        作用:
            因为http协议是一个无状态的协议,它记录不论上次访问的内容.用户在访问过程中难免会产生一些数据,
            通过会话技术就可以将起保存起来.
        例如:
            用户登录
            验证码
            购物车
            访问记录
            .....
    分类:
        cookie:浏览器端会话技术
        session:服务器端会话技术
    //////////////////////////
    cookie:
        小饼干 小甜点
        cookie是由服务器生成,通过response将cookie写回浏览器(set-cookie),保留在浏览器上,
        下一次访问,浏览器根据一定的规则携带不同的cookie(通过request的头 cookie),我们服务器就可以接受cookie
        cookie的api:
            new Cookie(String key,String value)
        写回浏览器:
            response.addCookie(Cookie c)
        获取cookie:
            Cookie[] request.getCookies()
        cookie的常用方法:
            getName():获取cookie的key(名称)
            getValue:获取指定cookie的值
    /////////////////////////
    案例1-步骤分析:
        1.创建一个serlvet RemServlet 路径:/rem
        2.在servlet中:
            获取指定cookie 例如:名称为 lastTime
                request.getCookies()
            判断cookie是否为空
                若为空:提示信息 第一次访问
                若不为空:
                    获取此cookie的value
                    展示信息:你上次访问时间是....
            
            将这次访问时间记录,写会浏览器
    ////////////////////////
    cookie-总结:
        常用方法:
            setMaxAge(int 秒):设置cookie在浏览器端存活时间  以秒为单位
                若设置成 0:删除该cookie(前提必须路径一致)
            setPath(String path):设置cookie的路径.
                当我们访问的路径中包含此cookie的path,则携带
                默认路径: 
                    访问serlvet的路径,从"/项目名称"开始,到最后一个"/"结束
                    例如:
                        访问的serlvet路径:
                            /day11/a/b/hello
                        默认路径为:
                            /day11/a/b
                手动设置路径:以"/项目名"开始,以"/"结尾;
    /////////////////////////////
    案例2:记录用户浏览历史
    需求:
        当用户访问一个商品的时候,需要将该商品保留在浏览记录中
    技术分析:
        cookie
    步骤分析:
        1.先将product_list.htm转成jsp
        2.点击一个商品,展示该商品的信息,将该商品id记录到cookie  (GetProductById)
            获取之前的浏览记录 例如名称:ids
            判断cookie是否为空
                若为空 将当前商品的id起个名称 ids 放入cookie中  ids=1
                若不为空,获取值 例如:ids=2-1  当前访问的id=1  使用"-"分割商品id
                    判断之前记录中有无该商品
                        若有:
                            将当前的id放入前面  结果 ids=1-2
                        若没有:
                            继续判断长度是否>=3>=3,移除最后一个,将当前的id放入最前面
                                若<3,直接将当前的id放入最前面.
                
                若 ids=3-2-1 现在访问1 结果 ids=1-3-2
                若 ids=4-3-2 现在访问1 结果 ids=1-4-3
    
        3.再次回到product_list.jsp页面,需要将之前访问商品展示在浏览记录中
            获取ids  例如:ids=2-3-1
            切割
    /////////////////
    扩展:删除浏览记录
    技术分析:
        cookie.setMaxAge(0)
    步骤分析:
        1.在浏览器记录中添加一个超链接 
            <a href="/day1101/clearHistroy">清空</a>
        2.创建servlet clearHistroy
            创建一个cookie 
                名称路径保持一致
                setMaxAge(0)
            写回浏览器
        3.页面跳转
            重定向 product_list.jsp
            
    /////////////
    注意:
        cookie不能跨浏览器
        cookie中不支持中文
    /////////////////////
    案例3-添加到购物车
    需求:
        在商品详情页面有一个添加到购物车,点击则将该商品添加到购物车,点击购物车连接将里面的所有商品展示出来
    技术分析:
        session
    //////////////
    session:
        服务器端会话技术.
        当我们第一次访问的服务器的时候,服务器获取id,
            能获取id
                要拿着这个id去服务器中查找有无此session
                    若查找到了:直接拿过来时候,将数据保存,需要将当前sessin的id返回给浏览器
                    若查找不到:创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器
            不能获取id
                创建一个session,将你的数据保存到这个session中,将当前session的id返回给浏览器
        
        获取一个session:
            HttpSession  request.getSession()
        
        域对象:
            xxxAttribute
            生命周期:
                创建:第一次调用request.getsession()创建
                销毁:
                    服务器非正常关闭
                    session超时
                        默认时间超时:30分钟  web.xml有配置 
                        手动设置超时:setMaxInactiveInterval(int 秒) 了解
                    手动干掉session
                        ★session.invalidate()
            存放的私有的数据.
    ////////////////////////////////
    步骤分析:
        1.点击添加到购物车的时候,提交到一个servlet add2CartServlet
            需要将商品名称携带过去
        2.add2CartServlet中的操作
            获取商品的名称
            将商品添加到购物车 购物车的结构 Map<String 名称,Integer 购买数量>
                将购物车放入session中就可以了
            
            将商品添加到购物车分析:
                获取购物车
                判断购物车是否为空
                    若为空:
                        第一次添加
                        创建一个购物车
                        将当前商品put进去.数量:1
                        将购物车放入session中
                    若不为空:继续判断购物车中是否有该商品
                        若有:
                            取出count 将数量+1 
                            将商品再次放入购物车中
                        若没有:
                            将当前商品put进去 数量:1
                        
            提示信息:你的xx已添加到购物车中
        
        
        3.点击购物车连接的时候 cart.jsp
            从session获取购物车
                判断购物车是否为空
                    若为空:提示信息
                    若不为空:遍历购物车即可
                
    //////////////////
    案例2-扩展清空购物车:
        思路1:将购物车移除
        思路2:将session干掉
    步骤分析:
        在cart.jsp上添加一个超链接 清空购物车
            <a href="/day1101/clearCart">清空购物车</a>
        在clearCart中需要调用session.invalidate()
        重定向到购物车页面
        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
            
            
            
            
            
    ////////////////////////////////////////////////////////////////////        
    ////////////////////////////////////////////////////////////////////        
    ////////////////////////////////////////////////////////////////////    
    上午回顾:
    jsp:
        java 服务器页面
        就是在html代码嵌套java代码,
        本质上就是一个servlet,运行在服务器,接受请求,处理业务逻辑,生成动态内容
        jsp三个脚本:
            <%...%> java片段 
                生成在jsp的service方法中
            <%=...%> 输出表达式
                生成service方法中
                不能";"结尾
            <%!...%> 声明成员
    cookie:浏览器端会话技术
        由服务器生成,key=value格式,通过响应头(set-cookie)写回浏览器
        保存在浏览器端,当浏览器下一次访问的时候,根据一定的规则携带不同的cookie,通过请求头(cookie)携带
    常用方法:
        构造:
            new Cookie(String key,String value);
        写回浏览器:
            response.addCookie(Cookie c)
        获取:
            Cookie[] request.getCookies();
        cookie的api:
            getName():获取cookie的名称
            getValue():获取cookie的值
            
            setMaxAge(int 秒):设置cookie在浏览器的存活时间
                若设置为0:删除cookie(前提必须路径保持一致)
            setPath(String path):设置cookie的路径  /day1101/
                若访问的路径中包含cookie的path,则携带过去
        注意:
            cookie不能跨浏览器
            cookie中不支持中文
    ///////////////////////
    session:
        服务器端会话技术:
        依赖于cookie
            浏览器访问服务器,服务器获取jsessionid
                若获取不到
                    创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器
                若获取到
                    拿着该jsessionid去session池中查找有无该session
                        若查找到:
                            直接拿过来使用,将jsessionid写回浏览器
                        若查找不到
                            创建一个sesion,将数据保存,将当前session的jsessionid通过cookie返回浏览器
        
        常用方法:
            获取session:
                HttpSession request.getSession():
                
        域对象:
            session
            生命周期
                创建:java代码中可以认为 第一次使用request.getSession创建
                销毁:
                    服务器关闭
                    session超时
                        默认超时
                        手动设置超时
                    ★手动干掉session 
                        session.invalidate()
        /////////////////////////////////
  • 相关阅读:
    Java日期相关操作
    Java中this的功能与作用
    DCL双检查锁机制实现的线程安全的单例模式
    Java 二分查找
    Java冒泡排序
    Java多线程编程(二)
    SSH小结
    Python快速上手JSON指南
    趣谈、浅析CRLF和LF
    linux开发神器--Tmux
  • 原文地址:https://www.cnblogs.com/chenyanlong/p/9976074.html
Copyright © 2011-2022 走看看