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()
        /////////////////////////////////
  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/chenyanlong/p/9976074.html
Copyright © 2011-2022 走看看