zoukankan      html  css  js  c++  java
  • Servlet之ServletContext以及文件操作

    ServletContext

    ------------------------------------

    ServletContext是什么? 与cookie,session比较。 可以把它想象成一个共用的空间,可以被所有的客户访问。 可以被很多客户同时共享的(同时用不同浏览器访问该服务器可以得到),反正,session则不可以。

    servletContext的使用

    1.如何得到ServletContext实例  this.getServletContext()

    2.想象成一个表,两列,名字(String类型)+值(object类型)  

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

      得到值:getAttribute(String name)返回Object  

      删除属性:removeAttribute(String name)

    3.生命周期  

      ServletCongtext中的属性生命周期从创建开始,到服务器关闭结束。 存在servletContext中的数据会长时间保存在服务器,会占用内存,因此建议不要添加过大的数据。

    以下是简单代码:

        servletContextTest1:

    //req:用于获取客户端(浏览器)的信息
        //res:用于向客户端(浏览器)返回信息
        public void doGet(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException {
    
            res.setContentType("text/html;charset=gbk");
            PrintWriter pw = res.getWriter();
            
            //1.得到servletContext
            ServletContext sc=this.getServletContext();
            
            //2.添加属性
            sc.setAttribute("myInfo", "快乐的小尾巴");
            pw.println("给servletContext添加一个属性myInfo,对应的内容是--快乐的小尾巴<br>");
            
            //比较session
            HttpSession hs=req.getSession();
            hs.setAttribute("test", "快乐的小耳朵");
            hs.setMaxInactiveInterval(60*3);
            pw.println("向session中添加一个test属性,他的值是--快乐的小耳朵");
            
        }

          servletContextTest2

    //req:用于获取客户端(浏览器)的信息
        //res:用于向客户端(浏览器)返回信息
        public void doGet(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException {
    
            res.setContentType("text/html;charset=gbk");
            PrintWriter pw= res.getWriter();
            //1.得到servlet context
            ServletContext sc=this.getServletContext();
            //2.得到属性和对应的值
            String info=(String)sc.getAttribute("myInfo");
            pw.println("从servletContext中得到属性myInfo,内容是--"+info+"<br>");
        
            //比较session
            HttpSession hs=req.getSession();
            String val=(String)hs.getAttribute("test");
            pw.println("session中的test--"+val+"(换一个浏览器打开就不同了,相当于换了客户端)");
        }

    可从中看出servletcontext与session不同以及servletcontext基本使用

    servletcontext实例

    1、网站计数器  (在网站建设中,经常会统计某个网页被点击(浏览)的次数。 ) 

        怎样才算是有点的点击?   

        1、只要访问过该网页,就算是一次,刷新一次也算,这是最简单的,有点虚假。   

        2、不同的ip访问该网页,算一次有效点击;如果同一个ip在一定时间(比如一天),不管多少次算一次。   

        3、用户退出网站,在访问也算一次。

     方案:  

         1、某个用户访问网页时,就在数据库增加一次。    

            缺点:对数据库访问太频繁,服务器压力大。    优点:好实现。  

         2、设置一个静态变量,当服务器启动时,可以通过文件或表初始化该变量,当服务器关闭时,再将变量的值写到文件或者数据库中。    

            缺点:实现复杂,要求对文件操作。    优点:效率高,不会频繁访问文件或数据库。   

        3、使用ServletContext。实现和第二种很相似。

    2、网站在线用户提示

    3、简单的聊天系统。。。。 如果是涉及到不同用户共享数据,而这些数据量不大,同时又不希望写入数据库,我们就可以考虑使用servletContext来实现。

    servlet操作文件


    因为servlet本是一个java文件,因此servlet中操作文件和普通java文件操作一样。

    举例:

          ServletFileTest1:

    public void doGet(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException {
    
            
            try{
                res.setContentType("text/html;charset=gbk");
                PrintWriter pw = res.getWriter();
                //创建一个FileReader
                FileReader f=new FileReader("f:\test.txt");
                
                BufferedReader bw=new BufferedReader(f);
                
                //读出一行数据
                String numval=bw.readLine();
                
                //读完文件之后一定要关闭文件流,放在finally更好
                bw.close();
                
                pw.println("从文件中读取的数据是:"+numval);
            }catch(Exception e){
                e.printStackTrace();
            }
            
        }

          ServletFileTest2:

    public void doGet(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException {
            try{
                res.setContentType("text/html;charset=gbk");
                PrintWriter pw= res.getWriter();
            
                //创建一个FileReader 看内存数据——>磁盘文件(写入,输出)
                //磁盘->内存(读入,输入)
                FileWriter f=new FileWriter("f:\test2.txt");
                BufferedWriter bw=new BufferedWriter(f);
            
                //在文中写入数据
                bw.write("123");
            
                //关闭文件流
                bw.close();
            
                pw.print("在文中写入数据");
            }catch(Exception e){
                e.printStackTrace();
            }
        }
  • 相关阅读:
    【题解】字母 (letter)
    【题解】【原创题目】薇尔莉特
    【题解】Query on a tree III [SP1487] [Bzoj1803]
    11个炫酷的 Linux 终端命令
    A light-weight client-side OAuth library for Java
    android下的异步任务
    OAuth相关知识
    显示单位px、dip以及sp的区别
    Arduino连接SHT10温湿度传感器--返回值不正常解决办法
    blueterm蓝牙超级终端(源码)
  • 原文地址:https://www.cnblogs.com/adaonling/p/3558252.html
Copyright © 2011-2022 走看看