ServletContext(重要)

目录
    一、ServletContext概述
    二、获取ServletContext
    三、域对象的功能
    四、获取项目初始化参数
    五、获取资源相关方法
    6 练习:访问量统计
=====================================        
一、ServletContext概述
    服务器会为每一个项目建立一个ServletContext对象,一个项目只有一个ServletContext上下文对象!
    咱们能够在N多个Servlet中来获取这个惟一的对象,使用它能够给多个Servlet传递数据!
    与服务器同寿!!!这个对象在Tomcat启动时就建立,在Tomcat关闭时才会被销毁死去!
    做用: 在整个Web应用的动态资源之间共享数据!
    例如:在AServlet中向ServletContext对象中保存一个值,而后在BServlet中就能够获取这个值,这就是共享数据了。html

二、获取ServletContext
    * ServletConfig 接口中 getServletContext()方法;
    * GenericServlet 类中 getServletContext()方法;web

    在Servlet接口中获取ServletContext对象:
    * 在void init(ServletConfig config)中:
            ServletContext context = config.getServletContext();
            ServletConfig类的getServletContext()方法能够用来获取ServletContext对象;
    在GenericeServlet或HttpServlet中获取ServletContext对象:
    * GenericServlet类有getServletContext()方法,因此能够直接使用this.getServletContext()来获取;
    public class MyServlet implements Servlet {
        public void init(ServletConfig config) {
            ServletContext context = config.getServletContext();
        }
        …
    }
    public class MyServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response) {
            ServletContext context = this.getServletContext();
        }
    }tomcat

三、域对象的功能
    ServletContext是JavaWeb四大域对象之一:
        * PageContext;
        * ServletRequest;
        * HttpSession;
        * ServletContext;
    全部域对象都有存取数据的功能,由于域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操做数据的方法:
    * void setAttribute(String name, Object value):用来存储一个对象,也能够称之为存储一个域属性。
    * Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取以前须要先去存储才行。
    * void removeAttribute(String name):用来移除ServletContext中的域属性,若是参数name指定的域属性不存在,
                那么本方法什么都不作;
    * Enumeration getAttributeNames():获取全部域属性的名称;服务器

四、获取项目初始化参数
    * 一个Servlet只能获取本身的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!
    * 能够配置公共的初始化参数,为全部Servlet而用!这须要使用ServletContext才能使用!
    还可使用ServletContext来获取在项目web.xml文件中配置的应用初始化参数!
    注意,项目初始化参数与Servlet初始化参数不一样:
    web.xml
    <web-app>
        ...
        <context-param>    [配置了两个应用初始化参数]
            <param-name>paramName1</param-name>
            <param-value>paramValue1</param-value>
        </context-param>app

        <context-param>
            <param-name>paramName2</param-name>
            <param-value>paramValue2</param-value>
        </context-param>
    </web-app>
    ServletContext context = this.getServletContext();  [获取ServletContext对象]
    String value1 = context.getInitParameter("paramName1");
    String value2 = context.getInitParameter("paramName2");webapp

    Enumeration names = context.getInitParameterNames();[获取全部应用初始化参数名称]
    while(names.hasMoreElements()) {
        System.out.println(names.nextElement());  //会获得 paramName1,paramName2
    }网站

五、获取资源相关方法
    5.一、获取真实路径(*****)
        还可使用ServletContext对象来获取Web应用下的资源,例如在hello应用的根目录下建立a.txt文件,
    如今想在Servlet中获取这个资源,就可使用ServletContext来获取。
        * 获取a.txt的真实路径:String realPath = servletContext.getRealPath(“/a.txt”),
                realPath的值为a.txt文件的绝对路径:F:\tomcat6\webapps\hello\a.txt;
        * 获取b.txt的真实路径:String realPath = servletContext.getRealPath(“/WEB-INF/b.txt”);this

    5.二、获取资源流
        不仅能够获取资源的路径,还能够经过ServletContext获取资源流,即把资源以输入流的方式获取:
        * 获取a.txt资源流:InputStream in = servletContext.getResourceAsStream(“/a.txt”);
        * 获取b.txt资源流:InputStream in = servletContext.getResourceAsStream(“/WEB-INF/b.txt”);编码

    5.三、获取指定目录下全部资源路径
        还可使用ServletContext获取指定目录下全部资源路径,例如获取/WEB-INF下全部资源的路径:
            Set set = context.getResourcePaths("/WEB-INF");
            System.out.println(set);
            [/WEB-INF/lib/, /WEB-INF/classes/, /WEB-INF/b.txt, /WEB-INF/web.xml]
        注意,本方法必须以“/”开头!!!xml

6 练习:访问量统计
    一个项目中全部的资源被访问都要对访问量进行累加!
    建立一个int类型的变量,用来保存访问量,而后把它保存到ServletContext的域中,这样能够保存全部的Servlet均可以访问到!

    相信各位必定见过不少访问量统计的网站,即“本页面被访问过XXX次”。由于不管是哪一个用户访问指定页面,     都会累计访问量,因此这个访问量统计应该是整个项目共享的!很明显,这须要使用ServletContext来保存访问量。     ServletContext application  = this.getServletContext();   [获取ServletContext对象]     Integer count = (Integer)application.getAttribute("count")   [获取ServletContext对象中的count属性];     if(count == null) {         count = 1; [若是在ServletContext中不存在count属性,那么设置count的值为1,表示第一次被访问。]     } else {         count++; [若是在ServletContext中存在count属性,说明之前被访问过,那么让count在原来的基础上加1。];     }     response.setContentType("text/html;charset=utf-8");     // response.setHeader("Content-Type","text/html;charset=utf-8"); 设置头信息(文本类型和编码),等同于上面     response.getWriter().print("<h1>本页面一共被访问" + count + "次!</h1>")[向客户端响应本页面被访问的次数。];     application.setAttribute("count", count);[覆盖保存count的值到ServletContext对象中。] ---------------------   

相关文章
相关标签/搜索