请求转发与重定向,cookie与session



ServletContext上下文对象:

 

  1. 可以获取全局参数

  2. 可以作为一个域对象(request,ServletContext,HttpSession)

  3.  获取上下文路径:简写方式:request.getContextPath()

  4. 请求转发:简写方式:request.getRequestDispatcher(“服务器行为项目的:根目录/”).forward(rquest,response);

     

    请求转发和重定向的区别?

  1. 请求转发只能访问当前项目的资源,而重定向它可以访问外部的项目的资源

  2. 请求转发只有一个request对象(一次请求),重定向是两次请求(两次请求,request对象不一样)

  3. 请求转发属于服务器行为,重定向属于浏览器行为(站点的根目录(默认tomcat安装目录里面webapps里面的站点))

  4. 使用请求转发,使用request域对象获取参数数据(请求转发整个过程只有一个request对象),而重定向,使用request域对象保存了数据,但是获取不到数据(重定向的整个过程产生两个request对象,不一样的对象)

     

     

    Cookie技术:

               存储在浏览器端的

    开发步骤:

               1)创建一个Cookie对象:Cookie(String name,String value)

             2)服务器发送cookie数据到浏览器端(原理就是设置一个set-cookie响应头)

    response.addCoookie(cookie对象) ;

         3)浏览器端自发的会将cookie数据存储起来,然后方便服务器下次传递数据

               4)服务器获取cookie数据(原理获取请求头getHeader(“name”))

               Cookie[]  cookies = request.getCookies() ;

             获取cookie数据一定要对cookie数据做非空判断!,然后进行遍历,获取

               cookie对象.getName():获取cookie名称

               getValue():获取cookie名称对应的内容

               setValue(“内容”):设置cookie数据

     

    URLEncorderURLDecorder类进行加密和解密

    Cookie的细节:

  1. 浏览器端不能存储中文,需要对中文进行加密,否则非法的参数异常(500)

  2. 设置Cookie的有效时间

    setMaxAge(int num):

    如果参数是一个正整数,经过整数秒后,cookie无效了

    如果参数是一个负整数,(-1),关闭浏览器,cookie数据就没有了

    如果参数是一个0,设置同名的cookie数据,那么会删除掉这个cookie

  3. 设置cookie的有效路径setPath(“不设置,默认情况就是当前web项目名称”):/web项目名称/

 

Cookie的案例:访问过的商品列表(获取cookie内容,(商品编号)不同的情况的算法)

 

 

存储会话数据有两种方式:

         Cookie

  1. 存储在浏览器端,通过服务器发送cookie数据

  2. 使用cookie存储会话数据,相对不安全(可以cookie查到一些用户安全)

  3. 从存储数据类型来看,cookie只能存储String类型的数据,

  4. 存储数据大小有限制

         Session(用户登录案例)

  1. 存储在服务器端的,占用的服务器的资源

  2. 存储在服务器端(Session对象,JSESSIONID),相对是安全的

  3. 可以存储任意类型的数据

  4. 存储读数据无限制

 

Sesison:

本身在HttpServletRequest对象中就存储在一个方法:

                  HttpSession getSession():创建或者获取session对象

 

         可以作为域对象,

                            保存数据:setAttribute(“数据名称”,”数据的内容”)

                            获取数据:getAttribute(“数据名称”) ;

 

  1. 使用Session域对象保存数据和获取数据

 

服务器时如何区分Session对象?

前提:创建Session对象--àsession对象才会在服务器内存存在

 

  1. 火狐浏览器 窗口1(session对象是 001)

 

保存数据

 

HttpSessionsession = request.getSession() ;

          

          

           //2)使用session域对象保存数据

           session.setAttribute("name","eric");

 

  1. 火狐浏览器 窗口2

//1)获取域对象中的数据,获取Session对象

           HttpSession session =request.getSession()

//2)获取数据

Stringname = (String) session.getAttribute("name") ;

                   

                   

         System.out.println("name="+name);                       ---à可以获取到数据(可以得到session对象--à001)

 

  1. 关闭火狐浏览器-à重新打开à窗口

    HttpSessionsession = request.getSession()

    //2)获取数据

    String name = (String)session.getAttribute("name") ;

                       

                       

             System.out.println("name="+name);                        -àsession获取不到:null(session对象可能会丢失)

  2. 使用新的IE浏览器

    HttpSessionsession = request.getSession()

    //2)获取数据

    String name = (String)session.getAttribute("name") ;

                       

              

             System.out.println("name="+name);                       -àsession获取不到:null

     

     

Session的原理:

         1)服务器解析doGet(),创建了Session对象,会给session分配一个唯一的JESSIONID(地址值)

         2)服务器会将JESEESIONID发送到浏览器端,

 

3)在浏览器端会将JESEESIONID作为cookie存储

4)服务器端通request.getSession()对象,获取的是JESSIONID这个session的内存地址(唯一标识的ID)

 

session对象始终是在服务器端存储,当我们服务器挂掉了或者启动失败了(500),session对象就会从服务器内存资源中消失掉!

 

 

session的细节:

  1. 设置Session的有效时间

    注意:关闭浏览器的时候,session对象不会销毁,一个session如果被销毁

    web.xml文件中配置

    默认情况下:session的有效时间30分钟

    设置session对象过期时间

                  

                   1

 

细节2:

           手动设置JSESSIONID的有效时间(JSESSIONID作为cookie名称使用服务器发送)

;//创建一个Cookie对象

                   Cookie c = new Cookie("JSESSIONID", session.getId()) ;

                  

                   //cookie的细节:设置它的有效时间

                   c.setMaxAge(1*30*24*60*60);

                  

                   //服务器发送cookie数据到浏览器端

                   response.addCookie(c);

 

 

  1. 细节3:销毁Session对象:

void invalidate():直接sesison对象删除掉

setAttribute(String name,String value):使用域对象保存数据

getAtttibute(String name):获取域对象中的数据

voidremoveAttribute(java.lang.String name):删除session域对象中的数据

 

 

关于两个方法

HttpSessionsession = rquest.getSession() ;

在实际开中使用第二种方式(规范)

创建Session对象:默认的格式:request.getSession(true) ; 

获取Session对象:默认的格式:requestgetSession(false)

HttpSessionsesison = request.getSession(boolea create) ;

 

你可能感兴趣的:(summary)