(第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、Session、Cookie

ServletContext、Session、Cookie都可以用于存储数据,不过三者存储数据的位置及作用域不同。

session与cookie区别精选

  • 2017-09-12 10:29
  • 20KB
  • 下载

session和cookie的区别

  • 2014-02-20 18:49
  • 15KB
  • 下载

java之辨析Session Cookie Servletcontext

今天聊聊Session,Cookie,Servletcontext三者的区别,因为概念是很容易混淆的!        首先Session:会话,是保存在服务器端的,常用于登录状态的判定,之所以网站能...

cookie与session的区别

  • 2014-06-16 13:45
  • 19KB
  • 下载

session、cookie、ServletContext

一、session

session 和cookie 区别

  • 2013-03-24 22:17
  • 112KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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