JSP简介和会话技术

课程回顾:request和response对象

response对象

1.代表的响应的对象(从服务器端到客户端),由Tomcat服务器创建的.
2.ServletResponse接口,子接口HttpServletResponse

重定向的例子

1.重定向,完成页面的跳转!!
2.登陆的例子
    * 设置302的状态码
    * 设置location的响应头(客户端绝对路径--包含项目名称)
3.response提供了方法
    * 直接完成重定向  sendRedirect("路径")

refresh头

1.完成页面定时刷新
2.值response.setHeader("refresh","5;url=客户端绝对路径")

禁用浏览器的缓存

1.记住三个头 C E(值-1) P
2.设置日期的头方法  setDataHeader(-1)

response对象乱码的问题

1.输出中文两种方式
    * 字节流
        * response.getOutputStream().print("哈罗我的".getBytes());
        * 可能会有乱码的问题(编码不一致)
            * getBytes("UTF-8")
            * 设置浏览器打开文件的时采用的编码
                * response.setHeader("Content-Type","text/html;charset=UTF-8")
    * 字符流
        * 一定会产生。
        * response缓冲区输出内容,response对象由Tomcat服务器创建的,Tomcat服务器默认编码ISO-8859-1
        * 设置response缓冲区的编码
            * setCharacterEncoding("UTF-8")
        * 设置浏览器打开文件的编码
            * response.setHeader("Content-Type","text/html;charset=UTF-8")

        * 简便的方式
            * response.setContentType("text/html;charset=UTF-8");

文件下载的案例

1.记住一句话:两个头,一个流
2.两个头
    * Content-Type          使用ServletContext.getMimeType(文件名称);
    * Content-Disposition       值是固定的:attachment;filename= +文件名称
3.一个流
    * 获取下载文件的输入流

验证码的案例

1.BufferedImage  画布
2.获取画笔
3.画一些内容
4.ImageIO

request对象

1.从客户端到服务器端

获取客户端的信息

1.http://locatlhost:8080/demo1?username=xxx&password=yyy
2.就可以通过一些方法来获取上面链接的中的每一块的信息
3.获取IP,获取项目名称  request.getContentPath()

获取请求头的信息

1.request.getHeader("")
2.referer       记住当前网页的来源
    * 防止盗链
3.user-agent    判断浏览器的版本
    * 文件下载的时候

获取请求的参数

1.获取text  password   request.getParameter("name")
2.Map map = request.getParameterMap();
    * map的key是表单中name的名称
    * map的value是用户输入的内容
3.request.getPatameterValues("name")  获取的复选框

获取请求参数会乱码

1.分成两种情况
    * POST
        * 设置request缓存的编码
        * request.setCharacterEncoding("UTF-8")
    * GET
        * 设置Tomcat整体环境(不推荐)
        * 先获取到请求的参数
            * name = new String(name.getBytes("ISO-8859-1"),"UTF-8")

request域对象

1.域对象的范围
    * 代表的一次请求的范围!!(发送一次请求,得到一次响应)
    * 传递一些数据(提示的信息,或者展示的数据)

今天内容:JSP简介和会话技术 ##

转发和重定向的区别

1.会编写转发的代码,理解转发的含义。
2.掌握转发和重定向的区别(什么使用转发,什么使用重定向)

3.转发:和重定向的功能比较类似的,转发也可以完成页面的跳转的功能!!
4.转发代码怎么写?
    * 重定向 response.sendRedirect("路径");
    * 转发,找request对象,提供了一个方法
        * RequestDispatcher getRequestDispatcher(String path)  ,返回的是RequestDispatcher一个对象
        * RequestDispatcher提供了一个方法,void forward(ServletRequest request, ServletResponse response)  
            * forward帮咱们转发的功能!!
    * 代码怎么写?
        * request.getRequestDispatcher("").forward(request,response)        -- 转发的代码的编写!!

5.转发和重定向路径的写法
    * 重定向的地址(客户端的绝对路径,包含项目名称)
    * 转发的路径(服务器端的绝对路径,不包含项目名称) 

6.转发和重定向区别
    * 共同点:都可以完成页面跳转的功能!
    * 不同点
        * 重定向是两次请求,两次响应,转发是一次请求,一次响应,就可以request域来传递一些数据!!
        * 重定向的地址栏会发生变化,转发的地址栏不会发生变化。
        * 重定向可以定向到任何的页面(项目的中的页面,网络上的资源),转发只能在服务器的内部完成跳转!!

JSP的简介

1.SUN公司提供Servlet的技术,后来提供JSP的技术。这两个技术都属于动态WEB资源的技术。
2.为什么有Servlet,又提供了JSP的技术?
    * Servlet存在缺点
        * Servlet技术需要配置的。
        * 在Servlet中向页面输出一个表单。response.getWriter().write("
"); * 编写前台的页面非常非常麻烦的!!不好维护!! * 美工添加样式 * SUN推出JSP的技术,很好去解决上述这些个问题!!刚推出的时候比较火的,使用JSP已经完全把Servlet给替代了!! 3.JSP * java server pages java服务器的网页们 * 和servlet一样,也是运行在服务器端!! 4.JSP的组成 * java代码 + HTML的代码(CSS JS) + JSP本身自己的代码 5.JSP创建文件时,可以指定文件的编码 * 设置创建文件时的编码 * window -- 首选项 -- 搜素jsp -- 选择JSP -- 修改编码,选择UTF-8编码!!

JSP的执行原理(理解)

1.执行的原理
    * 把demo1.jsp的程序翻译成.java的文件
        * 把页面上写的HTML的内容,使用输出流输出到页面上。
        * 以后输出的内容不用咱们自己编写,JSP后台的源文件帮咱们去输出了
        * 正常编写HTML的代码。

    * 把.java的文件编译成.class的文件
    * 执行了   

JSP的脚本元素

1.JSP中提供脚本元素,目的:就可以在脚本元素中编写Java代码!!
2.JSP的脚本元素
    * <%!   %>      -- 不常用,把JSP的文件翻译.java的文件,翻译类的全局的变量
    * <%=   %>      -- 输出的语句
    * <%    %>      -- 定义的变量,编写语句(if  for)

JSP开发中占用的角色

1.JSP已经入门了,Servlet学习两天了!!
2.JSP的功能和HTML的功能是一样的,但是不同点是JSP属于服务器端的技术,在JSP的页面中就可以读取域对象中的内容,就可以完成前后台的页面的交互工作!!
3.JSP的功能
    * 收集用户输入的数据
    * 显示提示的信息

cookie和session 会话技术(重要) ##

会话的概念(理解)

1.概念:打开浏览器,点击超链接(发送请求,得到响应),可以点击多次链接。最后把整个浏览器都关闭,这个过程称为一次会话!!
2.什么的样的应用?
    * 使用会话的技术可以保存用户相关的数据(每个不同的用户)
3.例子:去网上的商城购买商品,第一次点击了手电筒的商品,把手电筒保存起来,下一次购买了冰箱,冰箱保存起来。最后去结账,需要把手电筒和冰箱同时拿出来,去结账!!
    * 讨论的问题:Servlet把手电筒和冰箱保存在哪呢?

Cookie的技术

理解cookie原理(理解)

1.cookie的原理
    * 基于客户端的技术。把数据保存到客户端上!!
    * cookie的技术基于Http的头信息来完成的。(set-cookie(从服务器端到客户端)  cookie(从客户端到服务器端))
    * 点击购买商品,在后台程序中把商品保存到cookie中,回写cookie(把cookie回写到客户端上)
    * 客户端默认把cookie的内容保存在浏览器的缓存中。
    * 下一次再点击购买其他的商品,默认携带cookie的信息过去的,在后台,通过cookie来获取之前购买的商品。再回写
    * 浏览器就把最新的cookie的内容覆盖掉缓冲区的cookie的内容!!

cookie对象的api

1.查找JavaEE的文件,搜索Cookie的类。
2.Cookie提供的一些方法
    * Cookie(String name, String value)         -- 例子:Cookie c = new Cookie("product","sdt");Cookie中不能存在中文!
    * String getName()                      -- 获取的Cookie的名称,c.getName() 返回的内容 product
    * String getValue()                     -- 获取的Cookie的值,c.getValue() 返回的内容 sdt

    * response.void addCookie(Cookie cookie)    -- 回写Cookie,把创建的Cookie回写到浏览器端!
    * Cookie[] getCookies()                     -- 获取所有的Cookie,返回的是Cookie的数组!!

显示用户上次访问的时间(和Cookie的原理)

1.需求:显示用户上一次的访问时间!!弄明白需求!!
2.看图

cookie的api(另外)

1.设置Cookie的相关的信息!!
2.方法
    * void setValue(String newValue)            -- 设置Cookie的值
    * void setMaxAge(int expiry)                -- 设置有效时间
        * 默认的Cookie,把Cookie默认的保存在浏览器的缓存中。一旦关闭浏览器,Cookie就被清除了。
        * 通过setMaxAge(秒),把Cookie持久的Cookie。把Cookie保存在磁盘上。关闭浏览器是不会清除掉。
        * 应用在哪?保存用户名。

    * void setPath(String uri)                  -- 设置有效路径
        * 有效路径决定什么问题?
            * 访问其他资源的时候,是否会携带cookie的信息!!

        * 现在没有设置过有效路径,说明默认的有效路径。/day11
        * 结论:现在访问/day11/目录下的任何的资源,都会携带cookie的信息!!

        * 修改内容:LasttimeServlet的访问路径。/web/lasttime
        * 默认的有效路径已经改变了:/day11/web
        * 现在再去访问demo1.jsp  没有携带cookie.

        * 下面我要手动设置有效路径了。
            * c.setPath("/day11")

3.删除持久的cookie
    * 假如:cookie.setMaxAge(60*60*24);    设置过一天的时间。如果之前设置过有效路径的话
    * 时间刚过3个小时,就想把刚才的cookie删除掉。需要再设置一遍有效路径。cookie.setMaxAge(0);

商品的浏览记录

1.需求:显示商品的浏览记录。
2.分析:
    /**
     * 1.先判断是否是第一次访问
     * 2.如果是第一次
     *  * 创建cookie,把点击的商品的id保存在cookie中。回写cookie
     *  * Cookie c = new Cookie("product","1");
     * 3.如果不是第一次访问
     *  * 从cookie中获取到手电筒
     *  * 判断cookie中是否包含点击的商品的id。
     *      * 如果cookie中包含,不用处理
     *      * 如果不包含,做追加的操作
     *          * 用户点击了冰箱。获取冰箱的id。追击的操作。product=1,2
     * 4.可以使用重定向获取转发
     * 5.在页面中可以cookie中获取值。显示到页面上就可以了!!
     */
3.代码:看程序!!

session的技术

seesion的原理

1.session的概述
    * 大家去访问服务器,服务器为每一个用户的浏览器持久一个session(在服务器的内部创建的)。
    * 大家就可以把和用户相关的一些数据,保存在各自的浏览器中。
    * cookie基于客户端的技术,session基于服务器端的技术

2.session的原理
    * 服务器为浏览器创建一个session的空间,有一个为唯一的id值。就可以把东西存入在session的空间中。返回到页面上,把id通过cookie的方式保存在浏览器的缓存中。下一次再访问,通过cookie的头信息传递id值。通过id的值就可以找到session的空间。

    * session的空间创建在服务器端。
    * 如果我关闭了浏览器,session空间还有吗?有!!但是钥匙没了!!唯一的id值没有了!!会你再创建一个session的空间。
    * session有默认的销毁的时间30分钟。

session对象的api

1.相关的方法
    * HttpSession getSession()          -- HttpServletRequest接口中的一个方法。如果第一次访问服务器端,调用该方法,那么为你的浏览器创建一个session的空间。如果是的第二次访问(钥匙没丢呢),不会创建session的空间,找空间。如果是第二次访问,但是钥匙丢了,会你再创建一个新的session的空间。

2.HttpSession接口的方法
    * Object getAttribute(String name) 
    * void setAttribute(String name, Object value)  
    * void removeAttribute(String name)  
    * String getId()                            -- session有一把钥匙,获取钥匙。
    * void invalidate()                             -- 销毁session

购物车的案例(代码需要编写)

1.需求:完成购物的功能。
2.分析
    /**
     * 1.传过来参数,接收参数,但是传过来好像是id。购物车中存的是商品的名称和数量。
     * 2.向购物车中存放商品
     *  * 先判断是否是第一次访问
     *      * 如果是第一次访问,创建一个购物车,把商品和数量存放在购物中,存放在session。
     *      * 如果不是第一次访问,判断购物车中是否已经包含该商品了
     *          * 如果包含,数量+1
     *          * 如果不包含,直接存放商品和数量就OK了。
     * 3.继续购物还是去去结算
     */

session的追踪(了解)

1.session的追踪的技术?
2.session基于cookie的技术,使用cookie技术传输钥匙。如果浏览器关闭了,钥匙丢了。但是session的空间还存在!session的追踪通过钥匙找到session的空间。

session域对象(掌握)

1.session域对象的范围
    * 一次会话范围(可以发送多次请求,得到多次响应)

2.学习3个域对象
    * 域对象的作用传递数据(可以每个域对象中存入值,从域对象中取值,不同每个域对象的范围不同 )
    * request           -- 代表一次请求的范围,显示提示的信息,前台后数据的交互。
    * session           -- 代表一次会话的范围,每个用户,为每个用户的浏览器创建一个独享的session空间。保存用户相关的数据。
    * ServletContext    -- 代表整个WEB应用。所有的资源都共享该对象。共享的信息存放该对象。

session的创建和销毁(掌握)

1.session的创建
    * 发送请求,第一次访问后台,request.getSession()方法执行了,为浏览器创建session的空间。
2.session的销毁
    * 手动销毁,调用invalidate()方法。
    * 非正常原因关闭服务器。
    * 默认的销毁的时间(30分钟,不操作)
        
            1
        

你可能感兴趣的:(总结)