各位老师们好,我刚接触servlet,这里有一个问题要请教一下各位前辈。Servlet中:
HttpSession session = request.getSession(true);
 ServletContext scx = session.getServletContext();
 scx.setAttribute("session1","MYsession11");

HttpSession session = request.getSession(true);
  session.setAttribute("session1","MYsession11");
问题1:
以上两种方式同样能设定session,那么第一种设定session的方法中为什么要用ServletContext对象来设定session啊?
问题2:
ServletContext具体含义是什么?谢谢给位前辈能在百忙之中回答我的问题,谢谢了。 

解决方案 »

  1.   

    你的范围不一样哈ServletContext只是当前页面有效
    session是全局变量
      

  2.   

    ServletContext:
           Servlet上下文
           A.服务器启动时,为每个应用创建一个唯一的Servlet上下文对象,
           该对象一直存在。除非服务器关闭或者停止该应用(即卸载)。
           B.其作用是servlet可以通过该对象去调用容器的部分功能。
          作用:
      ServletContext.setAttribute(String,Object);
            ServletContext.getAttribute(String)//找不到就返回null
            ServletContext.removeAttribute(String);    
            ServletContext访问全局的配置参数。
            ServletContext.getInitParameter(String);
           C.如何获得ServletContext
             GenericServlet.getServletContext();
             session.getServletContext();
           D.比较ServletContext,HttpSession,HttpSession的三个对象的生命周期。
      

  3.   

    ServletContext是全局的,相当于jsp页面的application对象。一个web应用就一个。session是会话级的。
      

  4.   

    楼主需要明白jsp中的四种内置对象和 servlet中相关接口的关系 简单来说
    jsp中的request 是被包装为servlet中的HttpServletRequest接口
    response 则被包装为servlet中的httpServletResponse接口的实例
    session对象则是接口httpSession的实例
    application则是接口ServletContext的实例这些内置对象在jsp中可以直接使用.所以楼主的代码意思分别是在application和session中保存对象...至于application,session,request 这几个范围的区别 楼主可以上网搜索     
      

  5.   

    ServletContext在Servlet中使用,在官方文档中是这样解释的:Defines a set of methods that a servlet uses to communicate with its servlet container,也就通过它与你的servlet、jsp容器(Tomcat之类)进行通信,在理解ServletContext之前,你先弄清楚application和ServletContext的区别,application对象保存所有应用系统中的公有数据,但是要记住一点,我们实在jsp页面中使用这9大对象,但是,假如如果我们要在Servlet中使用session、request、application那应该怎么办,也就是如何获得已经为我们创建好的这些对象?我要在Servlet中把session中的内容显示出来,如何做?应该用什么样类型的变量来接收它,我们又知道内置对象session是HttpSession型的对象,request是HttpServletRequest的类型的对象(肯定的,Tomcat为我们自动生成这些对象,那这些对象总要有什么类之类的生成把,总不能凭空就生成来吧,就算生成来了,它总要有类型标志吧),所以像HttpSession session = request.getSession(true);这样我们就把当前的请求的session取得了,但是我问一下,如果我想在Servlet中定义一个像application一样有全局作用的变量,应该怎么办,它又应该是什么类型的,对它就是ServletContext类型的,也就是说ServletContext在Servelt中使用,application在jsp中使用。
    ServletContext scx = session.getServletContext();这个就创建了一个像application一样的全局变量了,
     scx.setAttribute("session1","MYsession11");就是将值加入到这个对象中,任何人都可以使用这个值了,而
    HttpSession session = request.getSession(true);
      session.setAttribute("session1","MYsession11");
    这个”session1“就只能是当前会话的用户使用了,
    写了这么多不知道你懂了没有,可能有些地方说得不准确,不过就是这个意思了,1楼的兄弟知道是和”范围“有关,不过没说清楚了
      

  6.   

    同上,建议看看application,session,request 三者范围的区别
      

  7.   

    这样给你解释一下:一个用户连接到服务器会创建一个会话(即:session),这个里面设置的key—value只能作用在这个用户和服务器之间,当这个用户断开连接(session需要销毁),这个里面设置的信息就消失掉。ServletContext作用域则是全局的,也就是说A用户在这个对象中设置的key—value不仅作用与A用户和服务器之间,还能作用域其他用户和服务器之间,当某一个用户和服务器断开连接的时候ServletContext里面设置的信息不会消失,只有当服务器重启(初始化)的时候,里面的信息才会消失。在这一块就是要区别两者的作用范围:ServletContext(服务器与多用户)  session(服务器与一个用户)
      

  8.   

    谢谢各位前辈,通过各位前辈的帮助,我已经明白了ServletContext, Session,cookie这三者的含义了,非常感谢。