(第7讲)session、cookie、servletContext区别联系

原创 2016年08月31日 16:31:17

cookie:是指存储在客户端上的信息,浏览器一旦关闭cookie就被清除。每个用户都有独立的存储cookie的空间,互相独立,只能自己访问自己的cookie

session:是指存储在服务器端的信息。每个用户都有独立的存储session的空间,互相独立,只能自己访问自己的session

servletContext:servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承GenericServlet的关系,GenericServlet类和HttpServlet类同时具有该方法。所有用户都可以访问servletContext,比如说我用谷歌给ServletContext

传递了信息,不仅在谷歌页面能获得ServletContext中的信息,在IE浏览器输入正确的网址也能得到ServletContext中的信息。

ServleContext使用方法

(1)得到ServletContext实例:this.getServletContext();

(2)添加属性:  setAttribute(String name,Object ob);

(3)获得信息:  getAttribute(String name);  返回Object

(4)删除属性:  removeAttribute(String name);

(5)生命周期:  ServletContext中的属性的生命周期从创建开始,一直到服务器关闭的时候结束。

(6)因为存在ServletContext中的数据会长时间的保存在服务器,会占用内存,因此不建议往ServletContext中添加过大的数据。

(7)在ServletContext中操作文件的过程和   .java  文件一样,因为ServletContext本来就是  .java 文件

————————————————————————————————————————

例子:在页面往ServletContext中添加信息,在另外一个页面取出信息,程序如下:

/**
 *  向ServletContext添加属性
 */

package  com.weiya;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class ServletContext1  extends HttpServlet{

     public void doGet(HttpServletRequest req,HttpServletResponse res){
                    try{
                            res.setContentType("text/html;charset=UTF-8");
                            PrintWriter pw = res.getWriter();
                            //得到ServletContext
                            ServletContext sc = this.getServletContext();
                            //添加属性
                            sc.setAttribute("myInfo","weiya");
                            pw.println("给ServletContext添加一个属性");





                    }catch(Exception e){
                        e.printStackTrace();
                    }
     }
     public void doPost(HttpServletRequest req,HttpServletResponse res){
             this.doGet(req,res);
     }

}

————————————————————————————————————————

/**
 * 从ServletContext中得到属性
 */
package  com.weiya;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class ServletContext2  extends HttpServlet{

     public void doGet(HttpServletRequest req,HttpServletResponse res){
                    try{
                            res.setContentType("text/html;charset=UTF-8");
                            PrintWriter pw = res.getWriter();
                            //得到ServletContext
                            ServletContext sc = this.getServletContext();
                            //得到属性
                            String info  =  (String)sc.getAttribute("myInfo" );
                            pw.println("从ServletContext得到一个属性"+info);



                    }catch(Exception e){
                        e.printStackTrace();
                    }
     }
     public void doPost(HttpServletRequest req,HttpServletResponse res){
             this.doGet(req,res);
     }

}

————————————————————————————————————————

部署文件如下:

<!--ServletContext1开始-->
    <servlet>
        <servlet-name>ServletContext1</servlet-name>    <!--给你的servlet取名字,名字是任意的,且不是必须的-->
        <servlet-class>com.weiya.ServletContext1</servlet-class>  <!-- 指明servlet路径,即包名+类名-->
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContext1</servlet-name>   <!-- 与上边的映射,复制下来-->
         <url-pattern>/servletcontext1</url-pattern>    <!-- 这是在浏览器中输入的访问该servlet的URL-->
    </servlet-mapping>
    <servlet>
        <servlet-name>ServletContext2</servlet-name>    <!--给你的servlet取名字,名字是任意的,且不是必须的-->
        <servlet-class>com.weiya.ServletContext2</servlet-class>  <!-- 指明servlet路径,即包名+类名-->
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContext2</servlet-name>   <!-- 与上边的映射,复制下来-->
         <url-pattern>/servletcontext2</url-pattern>    <!-- 这是在浏览器中输入的访问该servlet的URL-->
    </servlet-mapping>
<!--ServletContext2结束-->

————————————————————————————————————————

结果是:

在浏览器中输入:http://localhost:8080/myWebSite/servletcontext1,可以看到:

给ServletContext添加一个属性

在浏览器中输入:http://localhost:8080/myWebSite/servletcontext2,可以看到:

从ServletContext得到一个属性weiya

用Servlet写网络计数器

方法1:每次访问都加1,然后写入到一个文件中,但是效率太低

方法2:在Servlet的生命周期中,init函数中初始化;在destroy函数中写入文件,这样就比上边的效率高

    public void init( )  {
         try{
             //创建一个fileReader
             FileReader f = new FileReader("D:\\test\\a.txt");
             BufferedReader br = new BufferedReader(f);
             String num = br.readLine();
             br.close();
             this.getServletContext().setAttribute("visitTimes",num+"");

         }catch(Exception e){
             e.printStackTrace();
         }

    }


public void destroy() {
         try{
             FileWriter f = new FileWriter("D:\\test\\a.txt");
             BufferedWriter bf = new BufferedWriter(f);
             bf.write(this.getServletContext().getAttribute("visitTimes").toString() );
             bf.close();

         }catch(Exception e){
             e.printStackTrace();
         }
    }


Servlet——ServletContext 对象

本文详细介绍了ServletContext对象的概念以及使用方法,介绍了一些ServletContext的比较重要的应用,最后也介绍了一个实际的案例——网站计数器...
  • ggGavin
  • ggGavin
  • 2016年05月13日 22:59
  • 10583

ServletContext的添加与获取

(1)关于对ServletContext的理解: (2)向servletcontext中添加属性 package com.tsinghua; import javax.servlet.htt...
  • u010870518
  • u010870518
  • 2014年09月01日 08:56
  • 2153

Session与Cookie的区别与联系

Session与Cookie的区别与联系
  • u014336799
  • u014336799
  • 2015年11月01日 23:58
  • 1753

cookie ,session,servletContext的区分

cookie ,session,servletContext的区分 刚刚学完servlet,感觉也没什么东西,只是用到了api中的几个类。这几个类能够作为一门技术来被人学习,可见他们是很重要的。 ...
  • u011057506
  • u011057506
  • 2013年07月22日 10:17
  • 568

Servlet 中的 Cookie 、 Session 和 ServletContext

1、Cookie 核心业务逻辑应该使用更加稳靠的 Session,而使用 Cookie 是不可靠的,因为 Cookie 是可以被禁用的,也可以被清除,但我们可以依靠 Cookie 实现某些不是很重要...
  • mzule
  • mzule
  • 2011年01月29日 09:32
  • 1652

[Servlet]事件监听,ServletContext的事件监听

1.
  • Lirx_Tech
  • Lirx_Tech
  • 2015年11月16日 21:28
  • 2233

session和cookie的联系

其实session和cookie的区别大家都知道,这里着重讲联系。 区别: cookie存储在客户端,session存储在服务器端cookie不安全 大家很少了解到session和coo...
  • Lingphper
  • Lingphper
  • 2015年07月22日 14:23
  • 498

浅谈Session与Cookie的区别与联系

一、Session的概念Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识...
  • duan1078774504
  • duan1078774504
  • 2016年07月14日 21:02
  • 25833

ServletConfig和ServletContext以及读取资源的方法

ServletConfig对象当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的ini...
  • u011702171
  • u011702171
  • 2016年03月16日 20:59
  • 2696

ServletContext

http://tomcat.apache.org/tomcat-8.5-doc/servletapi/javax/servlet/ServletContext.html 1.可以由ServletC...
  • studious110
  • studious110
  • 2017年03月04日 19:30
  • 233
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(第7讲)session、cookie、servletContext区别联系
举报原因:
原因补充:

(最多只允许输入30个字)