servlet中三大容器详解

request session application 这三个对象可以在服务器内部帮我们保存数据以及传递数据.

request 可以从请求行中获取数据 getParameter()
    也可以从容器中获取数据
    在jsp页面获取:  ${key}
例如:
商店: 服务器
你  : 客户端

买多次物品:  一次会话 (session)
会员卡:


类型              对象名 在jsp页面获取相应容器的值

HttpServletRequest   request    ${requestContext.msg}
HttpSession      session    ${sessionContext.msg}
ServletContext   application    ${applicationContext.msg}

   request:     request.getParameter("");
保存数据: key必须是String,value是Object类型 request.setAttribute("key",value);
取数据: 通过key拿到value值,需要的话可以强转 Object o = request.getAttribute("key");

request.setAttribute("name","tom");
String name = request.getParameter("name");
Object  obj = reqeust.getAttribute("name");

    作用范围:request的存/取数据只能在一次请求之内起作用.比如服务器内部跳转的时候(因为内部跳转客户端只发一次请求).
    注意:客户端重定向是不行的,因为客户端重定向会发出多个请求.


总结:1, reqeust   请求行/请求体/容器  获取值
            get/  post/  
    把数据放到reqeust容器中:request.setAttribute("key",Object);

    在后台代码 取: 
        Object o = request.getAttribute("key");
    在jsp页面:取:

        el表达式:${key}

登入成功:在下一个页面显示名字

login.jsp
–> form url->LoginServlet
req.getParameter(“key”)–> 登入成功

LoginServelt-跳转->success.jsp –> 显示 用户名
把数据从后台传到前台页面 就需要用到容器
request容器 :
setA…(“key”,value)
页面:获取:
${key}

    eg:
    存:
    request.setAttribute("name","tom");


    容器 :map

    取:
String name =(String)request.getAttribute("name");




第一次执行getSession() 服务器就会给浏览器一个标识
在接下来的所有请求都是属于一次会话(Session)

session容器 一般用来做 有隔断的数据传输

获取session: 通过 reqeust.getSession(); 当第一次执行这句代码的时候
怎么把数据放到session容器中:  session.setAttribute("key","value");
从session中获取数据: Object o  = session.getAttribute("key")
在页面中获取session中的值:
    el表达式 : ${key}

session有生命周期:
    1,创建:第一次调用reqeust.getSession();
    2,死亡:1,正常 时间到了死亡 正常一个session时间是30分钟
        2,手动死亡  session.invalidate();session就销毁(数据被清空)标识结束
        3,手动设置session的生命时长。
            web.xml配置
            
                1
             

终结:
session创建:
当代码执行getSession();
没有jsessionid 然后服务器给创建一个jsessiondid 然后通过response写回给浏览器
下次访问的时候 就会携带cookie中的jsessiondid到服务器端

   浏览器每次发送请求的时候就会携带cookie

  保存数据:
    保存数据: key必须是String,value是Object类型 session.setAttribute("key",value);
    取数据: Object o = session.getAttribute("key");

  作用范围:在一个会话之中起作用.一个会话可以包括很多个request请求,所以放在session中的数据,可以被多个请求所共享.
  当程序第一次调用到request.getSession()方法时说明客户端明确的需要用到session此时创建出对应客户端的Session对象.
  当session超过30分钟(这个时间是可以在web.xml文件中进行修改的)没有人使用则认为session超时销毁这个session.
  程序中明确的调用session.invalidate()方法可以立即杀死session. 当服务器被非正常关闭时,随着虚拟机的死亡而死亡.


注意:在浏览器关闭的时候会把jsesionid删除掉,这样就导致浏览器重启以后再次访问servlet就相当于创建了新的会话,但是上一个浏览器的session会话还存在服务器中。


***  session的钝化与活化:就是说服务器被很多的session访问,内存不足,为了更好的运行,只好把一部分比较长时间没有变动的session从内存中放到了硬盘(钝化),等该session的用户重新使用的时候,那么该session就会自动的被调用到内存中,用户在整个过程中发觉不出来session又被调动的影响(活化)

序列化: 对象--->字符串---> 保存到文件
      session序列化:session生命周期没有结束,但是tomcat正常关闭
反序列化: 字符串--->对象---> 放到服务器中

  关于session的实现原理之后讲到Cookie的时候会说到!

   application:--->获取三种方法:
    第一种:ServletContext application =req.getSession().getServletContext();

    第二种:ServletConfig config = getServletConfig();//这个ServletConfig 就是init(...)
        ServletContext application = config.getServletContext();

    第三种:ServletContext application = this.getServletContext();

    保存数据: key必须是String,value是Object类型 application.setAttribute("key",value);
    取数据: Object o = application.getAttribute("key");

  作用范围:整个项目在运行期间,只有一个application对象,所以这个对象是所有人所有会员共享的,大家都可以向这个对象里面存值,也可以再拿出来.因为 这个对象一个项目中只有一个.

  作用范围比较: request < session < application (page < request < session < application
 这page是之后我们在jsp中要学习的另一个范围,页面范围,只在一个页面中起作用。)

注意:getParameter(“key”)方法和getAttribute(“key”)方法
getParameter是接收客户端在请求中传过来的数据 key-value
getAttribute方法是从容器中取值,取到之前调用setAttribute方法保存到这个对象里面的值.

掌握:
1,容器的作用范围
2,怎么获得容器
3,怎么使用容器传值(获取/传到页面)

你可能感兴趣的:(servlet中三大容器详解)