servletcontext 订阅
servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承GenericServlet的关系,GenericServlet类和HttpServlet类同时具有该方法。 展开全文
servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承GenericServlet的关系,GenericServlet类和HttpServlet类同时具有该方法。
信息
所属方
Servlet
作    用
呈现了web应用的Servlet视图
性    质
最大的一个接口
外文名
servletContext
servletContext概要
每个应用都会有一个ServletContext对象与之关联,当容器分布在多个虚拟机上时,web应用在所分布的每个虚拟机上都拥有一个ServletContext实例。缺省情况下,ServletContext不是分布式的,并且只存在于一个虚拟机上。通过ServletContext可以访问应用范围的初始化参数和属性:1).初始化参数ServletContext对象是在Web应用程序装载时初始化的。正像Servlet具有初始化参数一样,ServletContext也有初始化参数。Servlet上下文初始化参数指定应用程序范围内的信息。 [1]  在web.xml中配置初始化参数:adminEmailwebmaster元素是针对整个应用的,所以并不嵌套在某个元素中,该元素是元 素的直接子元素。 [1]  从Servlet中访问初始化参数:ServletContext application=this.getServletContext();out.println("send us your")out.println(application.getInitParameter("email"));out.println("'>email");2).属性可以通过编程的方式绑定,也可以作为web应用的全局变量被所有Servlet和JSPs访问设置Context属性:ServletContext application=this.getServletContext();application.setAttribute("person1",new Person("Jim"));application.setAttribute("person2",new Person("Green"));获取Context属性:ServletContext application=this.getServletContext();Enumberation persons=application.getAttributeNames();while(persons.hasMoreElements()){String name=(String)persons.nextElement();Person p=(Person)persons.getAttribute(name);application.removeAttribute(name);
收起全文
精华内容
下载资源
问答
  • servletcontext
    2021-02-28 19:22:17

    一、ServletContext概述

     ServletContext代表当前web应用

    WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

    ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext()方法获得ServletContext对象。

    由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象,在本WEB应用中共用ServletContext对象。

     

    二、ServletContext的作用

    1、ServletContext做为域对象可以在整个web应用范围内共享数据

    域对象:在一个可以被看见的范围内共享数据用到的对象。域对象有作用范围和生命周期。

    ServletContext的作用范围:整个web应用范围内。

    ServletContext的生命周期:

    当服务器启动web应用加载后创建出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁域销毁。

     

        ServletContext的主要方法:

      void           setAttribute(String strObject obj);

      Object     getAttribute(String str);

      void          removeAttribute(String str) ;

     

    /*------------------------ ServletContext域演示---------------------------- */

    package com.chuxiaoming;

        import java.io.IOException;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class Demo2Servlet extends HttpServlet {

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException

     {

              ServletContext context = this.getServletContext();

              context.setAttribute("apple", "red apple");

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }

     

     

     

    2、用来获取web应用的初始化参数

        可以在web.xml文件根目录下设置:

    <context-param>

    <param-name>username</param-name>

    <param-value>张三</param-value>

    </context-param>

    <context-param>

    <param-name>password</param-name>

    <param-value>123</param-value>

    </context-param>

     

     

    三种参数:

    请求参数 parameter --- 浏览器发送过来的请求中的参数信息

    初始化参数 initparameter --- 在web.xml中为Servlet或ServletContext配置的初始化时带有的基本参数

    域属性 attribute --- 四大作用域中存取的键值对

     

    获取web应用的初始化信息:

    package com.chuxiaoming;

    import java.io.IOException;

    import java.util.Enumeration;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    public class Demo4Servlet extends HttpServlet {

     

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException

     {

              ServletContext context = this.getServletContext();

              Enumeration enumeration = context.getInitParameterNames();

             

    while(enumeration.hasMoreElements())

    {

                     //enumeration中存放的是Object类,所以需要强制类型转换

                String name = (String) enumeration.nextElement();

                     String value = context.getInitParameter(name);

                     System.out.println(name+":"+value);

              }

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }     

    }

     

     

     

    3、实现Servlet的转发       

    重定向 : 302错误代码+Location,让浏览器自动访问另一个地址。

    请求转发 : 服务器内部进行资源流转    

     不同之处:请求转发是一次请求一次响应,实现资源流转。请求重定向两次请求两次响应。

    /**

     * -------------------------------------ServletContext实现请求转发------------------------------------

     */

    package com.chuxiaoming;

    import java.io.IOException;

    import javax.servlet.RequestDispatcher;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class Demo5Servlet extends HttpServlet {

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

    //servlet本身无法转发,而ServletContext可以转发

    //获取请求转发器

                 RequestDispatcher dispatcher =       this.getServletContext().getRequestDispatcher("/servlet/Demo6Servlet");           //带着请求和响应转发出去

      dispatcher.forward(request, response);

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }

     

     

     

    /**

     *   ------------------上例对应的 /servlet/Demo6Servlet.java文件-----------------

     */

    package com.chuxiaoming;

    import java.io.IOException;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class Demo6Servlet extends HttpServlet

     {

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              response.getWriter().write("100000000000000000000000yuan");

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }

    }

     

     

     

    4、加载资源文件

    在Servlet中读取资源文件时:如果写相对路径和绝对路径,由于路径将会相对于程序启动的目录--在web环境下,就是tomcat启动的目录即tomcat/bin,所以找不到资源。

    如果写硬盘路径,可以找到资源,但是只要一换发布环境,这个硬盘路径很可能是错误的,同样不行。

    (1)为了解决这样的问题,ServletContext提供了getRealPath()盘路径从而得到当前资源的硬盘路径,这种方式即使换了发布环境,方法的底层也能得到正确的web应用的路径从而永远都是正确的资源的路径。

     this.getServletContext().getRealPath("config.properties")

    //this.getServletContext().getRealPath()方法会拼接当前WEB应用的绝对路径

                   

    (2)如果在非Servlet环境下要读取资源文件时可以采用类加载器加载文件的方式读取资源

                                  Service.class.getClassLoader().getResource("../../../config.properties").getPath()

    //ClassLoader的getResource()方法:

    URL getResource(String name) 查找具有给定名称的资源。

     

     

     /**

     * ------------------------------通过ServletContext读取资源文件-----------------------------------

     */  

    package com.chuxiaoming;

    import java.io.File;

    import java.io.FileReader;

    import java.io.IOException;

    import java.util.Properties;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class Demo7Servlet extends HttpServlet

     {

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

    //              File file = new File("config.properties");

    //              System.out.println(file.getAbsolutePath());

    /*  如果写相对路径,则会到程序启动目录 即tomcat/bin目录下去找资源,找不到

    如果写绝对路径,则会到程序启动目录的根目录,即tomcat/bin 目录的磁盘目录,我的机器tomcat在e:/workspace/tomcatt6 所以找到了e:/下去找资源,找不到

    如果用硬盘路径,则能找到资源,但是一旦换一个运行环境,很可能硬盘路径就是不正确的了,也不行

    所以,在web环境下如果读取资源文件,必须使用ServletContext提供的方法进行读取。

    原理是在传入的路径前拼接当前web应用的硬盘路径从而得到当前资源的硬盘路径,

    由于web应用的硬盘路径是动态获取的,即使换了发布环境也是正确的,所以路径就保证了永远是正确的

    */

              Properties prop = new Properties();

         //this.getServletContext().getRealPath()方法会拼接当前WEB应用的绝对路径

           //此时config.properties文件放置在WEB应用目录下

       prop.load(new FileReader(this.getServletContext().getRealPath("config.properties")));

             

              System.out.println(prop.getProperty("username"));

              System.out.println(prop.getProperty("password"));

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }      }    

     

               

    /**

     * --------------------------通过类加载器方式读取资源文件--------------------------

     */

    package com.chuxiaoming;

    import java.io.IOException;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import com.chuxiaoming.service.Service;

    public class Demo8Servlet extends HttpServlet {

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              Service service = new Service(); //创建下面Service类的实例

              service.method1();

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request, response);

       }      }

     

     

     

    package com.chuxiaoming.service;

    import java.io.FileNotFoundException;

    import java.io.FileReader;

    import java.io.IOException;

    import java.util.Properties;

    public class Service {

       public void method1() throws FileNotFoundException, IOException{

              //在没有ServletContext的环境下,如果想要读取资源,可以使用类加载器classload以加载类的方式加载资源,

         //这里要注意,类加载器从哪个目录加载类,就从哪个目录加载资源,这里是classes目录。所以此处的路径一定要给一个相对于类加载目录的路径

              Properties prop = new Properties();

    prop.load(newFileReader

    (Service.class.getClassLoader().getResource("config.properties").getPath()));

     

     //此时config.properties放置在src目录下,发布之后会复制粘贴到classes目录

              System.out.println(prop.getProperty("username"));

              System.out.println(prop.getProperty("password"));

       }}

     

     

    更多相关内容
  • 本篇文章是对ServletContext中的常用方法进行了详细的分析介绍,需要的朋友参考下
  • 主要介绍了Spring实战之ServletContextResource访问资源文件,结合实例形式分析了spring使用ServletContextResource读取与遍历资源文件相关操作技巧,需要的朋友可以参考下
  • 本篇文章是对javax.servlet.Servlet,ServletContext接口进行了纤细的分析介绍,需要的朋友参考下
  • ServletContext

    2015-11-06 17:19:34
    ServletContext代码,开发工具 Myeclipse
  • 当服务器停掉后,重新启动。这个网页计数器又要重新开始计数。这显然不符合逻辑。故需要想一个办法,即使在服务器被停掉后,网页计数器也能正常计数。(使用了io流技术)
  • 超全面javaweb教程28天第9天_14_获取ServletContext对象
  • Servlet----ServletContext

    多人点赞 热门讨论 2022-03-12 19:40:44
    ServletContext是什么 ServletContext是一个接口,是Servlet规范中的一员, ServletContext对象的创建也是Tomcat服务器来完成的。启动webapp的时候创建的。 ServletContext对象的创建也是Tomcat服务器来完成的...

    在正式讲解之前,先让大家有一个整体印象。在这里插入图片描述
    之前讲过ServletConfig,我发现他们有两个共同的方法,我对他们的区别做了小小的总结
    在这里插入图片描述

    JavaWeb系列的其他教程,持续更新中

    JavaWeb系列教程
    JavaWeb—Servlet
    模拟Servlet本质
    使用IDEA开发Servlet程序
    Servlet对象的生命周期
    适配器(GenericServlet)改造Servlet
    ServletConfig
    Servlet–ServletContext
    HTTP协议,get和post的区别
    web站点欢迎页
    一篇学会HttpServletRequest

    上面的思维导图是对下面内容的总结,大家可以先看看,对等会的内容有一个大概印象,看完后,可以再回头看看这个思维导图。

    如果大家觉得有帮助的话,不妨动动小手,点赞收藏一波,也方便后面的复习哈
    在这里插入图片描述

    ServletContext是什么

    • ServletContext是一个接口,是Servlet规范中的一员,

    • ServletContext对象的创建也是Tomcat服务器来完成的。启动webapp的时候创建的。

    • ServletContext是谁实现的

      Tomcat服务器(WEB服务器)实现了ServletContext接口
      public class org.apache.catalina.core.ApplicationContextFacade implements ServletContext{}

    • Servlet对象是谁创建的,在什么时候创建的

    ServletContext对象是WEB服务器启动的时候创建的
    ServletContext对象是WEB服务器创建的

    ServletContext的生命周期

    • 对于一个WEBAPP来说,ServletContext对象只有一个

    • 一个web应用对应一个ServletContext实例,这个实例是应用部署启动后,servlet容器为应用创建的。

    • 在这里插入图片描述

      ServletContext对象在服务器关闭的时候销毁

      • 一个Servlet对象对应一个ServletConfig。100个Servlet对象则对应100个ServletConfig对象。
    • 只要在同一个webapp当中,只要在同一个应用当中,所有的Servlet对象都是共享同一个ServletContext对象的。

    • ServletContext对象在服务器启动阶段创建,在服务器关闭的时候销毁。这就是ServletContext对象的生命周期。ServletContext对象是应用级对象。

    • Tomcat服务器中有一个webapps,这个webapps下可以存放webapp,可以存放多个webapp,假设有100个webapp,那么就有100个ServletContext对象。但是,总之,一个应用,一个webapp肯定是只有一个ServletContext对象。
      接下来,通过程序验证一下

            ServletContext servletContext = this.getServletContext();
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
            writer.print("ServletContext对象:"+servletContext+"<br>");
    
    

    在这里插入图片描述

    一个webapp应用共享一个ServletContext对象

            ServletContext servletContext = this.getServletContext();
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
            writer.print("ServletContext对象:"+servletContext+"<br>");
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • ServletContext被称为Servlet上下文对象。(Servlet对象的四周环境对象。)

    • 一个ServletContext对象通常对应的是一个web.xml文件。

    • ServletContext对应显示生活中的什么例子呢?

      • 一个教室里有多个学生,那么每一个学生就是一个Servlet,这些学生都在同一个教室当中,那么我们可以把这个教室叫做ServletContext对象。那么也就是说放在这个ServletContext对象(环境)当中的数据,在同一个教室当中,物品都是共享的。比如:教室中有一个空调,所有的学生都可以操作。可见,空调是共享的。因为空调放在教室当中。教室就是ServletContext对象。

      • Tomcat是一个容器,一个容器可以放多个webapp,一个webapp对应一个ServletContext对象

      • ServletContext接口中常用的方法

    public String getInitParameter(String name); // 通过初始化参数的name获取value
    public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name
    
            ServletContext servletContext = this.getServletContext();
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
            writer.print("ServletContext对象:"+servletContext+"<br>");
            String initParameter = servletContext.getInitParameter("pageSize");
            writer.println("pageSize=  "+initParameter);
    
      Enumeration<String> names = servletContext.getInitParameterNames();
            while (names.hasMoreElements()){
    
                String s = names.nextElement();
                //通过name获取value
                String initParameter = servletContext.getInitParameter(s);
                writer.println(s+"--->"+initParameter+"<br>");
    
    
            }
    
    

    在这里插入图片描述
    在这里插入图片描述

    <!--以上两个方法是ServletContext对象的方法,这个方法获取的是什么信息?是以下的配置信息-->
    <context-param>
        <param-name>pageSize</param-name>
        <param-value>10</param-value>
    </context-param>
    <context-param>
        <param-name>startIndex</param-name>
        <param-value>0</param-value>
    </context-param>
    <!--注意:以上的配置信息属于应用级的配置信息,一般一个项目中共享的配置信息会放到以上的标签当中。-->
    <!--如果你的配置信息只是想给某一个servlet作为参考,那么你配置到servlet标签当中即可,使用ServletConfig对象来获取。-->
    

    获取应用的根路径(非常重要),因为在java源代码当中有一些地方可能会需要应用的根路径,这个方法可以动态获取应用的根路径
    在java源码当中,不要将应用的根路径写死,因为你永远都不知道这个应用在最终部署的时候,起一个什么名字。

     获取项目的根路径
     获取应用的根路径(非常重要),因为在java源代码当中有一些地方可能会需要应用的根路径,这个方法可以动态获取应用的根路径
     在java源码当中,不要将应用的根路径写死,因为你永远都不知道这个应用在最终部署的时候,起一个什么名字。
            writer.print("获取项目的根路径:");
            String contextPath = servletContext.getContextPath();
            //  /servlet04
            writer.println(contextPath+"<br>");
    

    在这里插入图片描述

    获取文件的绝对路径
     String realPath = servletContext.getRealPath("AServlet.java");
            writer.println(realPath+"<br>");
    

    在这里插入图片描述

      通过ServletContext对象也是可以记录日志的
    public void log(String message);
    public void log(String message, Throwable t);
      这些日志信息记录到哪里了?
      localhost.2022-03-12.log
    
      Tomcat服务器的logs目录下都有哪些日志文件?
     catalina.2022-03-12.log 服务器端的java程序运行的控制台信息。
     localhost.2022-03-12.log ServletContext对象的log方法记录的日志信息存储到这个文件中。
     localhost_access_log.2022-03-12.txt 访问日志
    

    应用域(重点)

    ServletContext对象还有另一个名字:应用域(后面还有其他域,例如:请求域、会话域)

    如果所有的用户共享一份数据,并且这个数据很少的被修改,并且这个数据量很少,可以将这些数据放到ServletContext这个应用域中

    为什么是所有用户共享的数据? 不是共享的没有意义。因为ServletContext这个对象只有一个。只有共享的数据放进去才有意义。

    为什么数据量要小? 因为数据量比较大的话,太占用堆内存,并且这个对象的生命周期比较长,服务器关闭的时候,这个对象才会被销毁。大数据量会影响服务器的性能。占用内存较小的数据量可以考虑放进去。

    为什么这些共享数据很少的修改,或者说几乎不修改?
    所有用户共享的数据,如果涉及到修改操作,必然会存在线程并发所带来的安全问题。所以放在ServletContext对象中的数据一般都是只读的。

    数据量小、所有用户共享、又不修改,这样的数据放到ServletContext这个应用域当中,会大大提升效率。因为应用域相当于一个缓存,放到缓存中的数据,下次在用的时候,不需要从数据库中再次获取,大大提升执行效率。

      存(怎么向ServletContext应用域中存数据)
    public void setAttribute(String name, Object value);   map.put(k, v)
      取(怎么从ServletContext应用域中取数据)
    public Object getAttribute(String name);   Object v = map.get(k)
      删(怎么删除ServletContext应用域中的数据)
    public void removeAttribute(String name);   map.remove(k)
    
    • 注意以后我们编写Servlet类的时候,实际上是不会去直接继承GenericServlet类的,因为我们是B/S结构的系统,这种系统是基于HTTP超文本传输协议的,在Servlet规范当中,提供了一个类叫做HttpServlet,它是专门为HTTP协议准备的一个Servlet类。我们编写的Servlet类要继承HttpServlet。(HttpServlet是HTTP协议专用的。)使用HttpServlet处理HTTP协议更便捷。但是你需要知道它的继承结构:
    
    >    jakarta.servlet.Servlet(接口)【爷爷】
    >     jakarta.servlet.GenericServlet implements Servlet(抽象类)【儿子】
    >     jakarta.servlet.http.HttpServlet extends GenericServlet(抽象类)【孙子】
    >     
    >    我们以后编写的Servlet要继承HttpServlet类。
    

    大家到目前为止都接触过哪些缓存机制了?

    • 堆内存当中的字符串常量池。
      • “abc” 先在字符串常量池中查找,如果有,直接拿来用。如果没有则新建,然后再放入字符串常量池。
    • 堆内存当中的整数型常量池。
      • [-128 ~ 127] 一共256个Integer类型的引用,放在整数型常量池中。没有超出这个范围的话,直接从常量池中取。
    • 连接池(Connection Cache)
      • 这里所说的连接池中的连接是java语言连接数据库的连接对象:java.sql.Connection对象。
      • JVM是一个进程。MySQL数据库是一个进程。进程和进程之间建立连接,打开通道是很费劲的。是很耗费资源的。怎么办?可以提前先创建好N个Connection连接对象,将连接对象放到一个集合当中,我们把这个放有Connection对象的集合称为连接池。每一次用户连接的时候不需要再新建连接对象,省去了新建的环节,直接从连接池中获取连接对象,大大提升访问效率。
      • 连接池
        • 最小连接数
        • 最大连接数
        • 连接池可以提高用户的访问效率。当然也可以保证数据库的安全性。
    • 线程池
      • Tomcat服务器本身就是支持多线程的。
      • Tomcat服务器是在用户发送一次请求,就新建一个Thread线程对象吗?
        • 当然不是,实际上是在Tomcat服务器启动的时候,会先创建好N多个线程Thread对象,然后将线程对象放到集合当中,称为线程池。用户发送请求过来之后,需要有一个对应的线程来处理这个请求,这个时候线程对象就会直接从线程池中拿,效率比较高。
        • 所有的WEB服务器,或者应用服务器,都是支持多线程的,都有线程池机制。
    • redis
      • NoSQL数据库。非关系型数据库。缓存数据库。
    • 向ServletContext应用域中存储数据,也等于是将数据存放到缓存cache当中了。

    本次内容到这里就结束了,感谢大家的支持,javaweb系列的教程正在持续更新

    希望得到大家的支持在这里插入图片描述

    展开全文
  • JavaWeb-ServletContext对象

    2022-03-23 16:06:04
    ServletContext对象 代表的是当前web应用(web项目)对象 在web应用被加载以后,服务器会立刻创建出代表当前web应用的ServletContext对象,创建后对象会一直驻留在内存中,直到服务器关闭或者web应用移出服务器为止,...

    ServletContext对象

    代表的是当前web应用(web项目)对象

    在web应用被加载以后,服务器会立刻创建出代表当前web应用的ServletContext对象,创建后对象会一直驻留在内存中,直到服务器关闭或者web应用移出服务器为止,随着web应用的销毁,ServletContext对象也会跟着销毁。

    1)获取ServletContext对象

    方法一:先获得ServletConfig,然后通过ServletConfig
    在获得ServletContextServletConfig scf=this.getServletConfig();
    ServletContext sct=scf.getServletContext();
    方法二:通过this直接获取
              ServletContext sct=this.getServletContext();
    

    2)ServletContext中的方法

    方法一

    	getInitParameter(String name) ---->value
    	根据name来获得value的值
    	getInitParameterNames()  ---->Enumeration
    	获得所有的name值
    
    package servletcontext;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //演示ServletContext对象的使用
    public class ServletContextDemo extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//1、获取ServletContext对象
    		//方法一:通过ServletConfig来获取
    		ServletConfig scf=this.getServletConfig();
    		ServletContext sct=scf.getServletContext();
    		
    		//方法二:通过this直接获取
    		ServletContext sct=this.getServletContext();
    		
    		//根据name来获得value
    		String s1=sct.getInitParameter("data1");
    		String s2=sct.getInitParameter("data2");
    		System.out.println(s1+" "+s2);
    		
    		//获得所有的name的值
    		Enumeration<String> ns=sct.getInitParameterNames();
    		while(ns.hasMoreElements()){
    			String name=ns.nextElement();
    			String value=sct.getInitParameter(name);
    			System.out.println(name+","+value);
    		}
    		
    	}
    	
    }
    

    方法二

    	ServletContext对象也是一个域对象,利用这个对象可以在整个	web应用内实现资源的共享
    	setAttribute(String name, Object obj)
    	getAttribute(String name)  --->Object obj
    
    package servletcontext;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //演示ServletContext作为域对象的功能:实现范围内的资源共享
    public class ServletContextDemo1 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		System.out.println("我是ServletContextDemo1...");
    		
    		/*
    		//复习:使用request域对象,request对象的作用域是一次请求中的范围,
    		//只要在一次请求中的范围就可以实现资源的共享,否则资源无法实现共享
    		request.setAttribute("a", 1);
    		//同一个Servlet类中,能够获取到request域对象存储的值(同一个Servlet类上下依次执行,是同一个请求)
    		Integer strA=(Integer)request.getAttribute("a");
    		System.out.println(strA);//1
    		//通过转发,由ServletContextDemo1转发跳转到ServletContextDemo2
    		//如果是转发,就是一次请求,就能使用request域对象实现资源的共享
    		RequestDispatcher rd=request.getRequestDispatcher("context2");
    		rd.forward(request, response);
    		*/
    		
    		//使用ServletContext域对象:ServletContext对象的最用是整个web应用
    		//获取ServletContext对象
    		ServletContext sct=this.getServletContext();
    		//往ServletContext域对象中存储数据
    		sct.setAttribute("b", 2);
    		Date time=new Date();
    		System.out.println("time:"+time);
    		sct.setAttribute("t", time);
    		//同一个Servlet中,ServletContext可以实现资源共享
    		Integer itgB=(Integer)sct.getAttribute("b");
    		System.out.println("context1中的itgB的值为:"+itgB);
    		//通过转发技术,由ServletContextDemo1跳转到ServletContextDemo2
    		//RequestDispatcher rd=request.getRequestDispatcher("context2");
    		//rd.forward(request, response);
    		
    	}
    
    }
    
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //演示从域对象中获取值
    //获取从ServletContextDemo1中存储的值
    public class ServletContextDemo2 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		System.out.println("我是ServletContextDemo2....");
    		//从request域对象中获取数据
    		/*
    		Integer itgA=(Integer)request.getAttribute("a");
    		System.out.println(itgA);
    		*/
    		
    		//从ServletContext域对象中获取数据
    		//获得ServletContext对象
    		ServletContext sct=this.getServletContext();
    		Integer itgB=(Integer)sct.getAttribute("b");
    		System.out.println("context2中的itgB的值为:"+itgB);
    		Date date=(Date)sct.getAttribute("t");
    		System.out.println(date);
    	
    	}
    
    }
    

    方法三

    	//获取web资源文件的路径
    	String path=sct.getRealPath(“xx文件”)
    	获得的是一个绝对路径,传入一个相对于web应用跟目录的资源文件路径,这个方法会在传入的路径前面动态的拼接上当前web应用跟目录的磁盘路径,这种路径称为动态获取的路径,换个环境,也能够正确的获取路径。
    
    package servletcontext;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    //演示ServletContext来获取资源文件的路径
    public class ServletContextDemo3 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//获取ServletContext对象
    		ServletContext sct=this.getServletContext();
    		//()里设置的是资源文件,该方法返回该资源文件对应的动态路径
    		String path=sct.getRealPath("/aa.txt");
    		System.out.println(path);
    		//C:\Users\qingd\mywork\tomcat\apache-tomcat-7.0.68\webapps     tomcat服务器的磁盘路径
    		//\servlet   web项目名
    		//\aa.txt    资源文件名
    	}
    }
    
    展开全文
  • ServLetContext基础

    2021-01-08 09:00:54
    ServLetContext 解决的问题:不同的用户使用相同的数据 就是不同的用户,访问网页的时候能看到某一个相同的数据,例如该网站被访问的次数 其他特征: 特点:服务器创建;用户共享 作用域:整个项目 生命周期:服务器...
  • ServletContext详解

    2022-05-09 09:50:02
    ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。为了方便大家理解,我们将ServletContext和Cookie、Session做一个简单对比,如下图: 我们可以把ServletContext当成一个公用的...

    概述

    ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。为了方便大家理解,我们将ServletContext和Cookie、Session做一个简单对比,如下图:
    在这里插入图片描述

    我们可以把ServletContext当成一个公用的空间,可以被所有的客户访问,如上图,A、B、C三个客户端都可以访问。
    WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且它被所有客户端共享。

    由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。公共聊天室就会用到它。

    当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁

    在这里插入图片描述

    代码一【获取全局配置信息】

    如果有一段配置信息希望多个servlet都可以使用,可以为多个servlet都配置相关信息,这个操作会造成代码冗余。可以把这段配置信息抽取成一个全局配置这样所有的servlet都可以获取这个信息。

    全局配置信息(web.xml文件中来进行配置)

    在这里插入图片描述
    在这里插入图片描述

    代码实现

    @WebServlet("/servlet/ServletContextDemo1")
    public class ServletContextDemo1 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //创建ServletContext对象
            ServletContext context = getServletContext();
            //通过ServletContext对象获取全局配置信息
            String driver = context.getInitParameter("driver");
            System.out.println(driver);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    }
    
    

    在这里插入图片描述

    代码二【域对象】

    域对象—如果一个对象有可以看见的范围,在这个范围之内通过对象身上的map实现数据共享

    在这里插入图片描述

    代码三【路径】

    @WebServlet("/servlet/ServletContextDemo4")
    public class ServletContextDemo4 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //相对路径---从当前位置往下查找资源
            //String path="conf.properties";
            //绝对路径---从当前位置的根目录往下查找
            //String path="/conf.properties";
            //全路径(一般不推荐)
            //String path="D:\\workspace\\JAVAWEB\\Day12\\src\\conf.properties";
            //给定从web到资源的路径才能返回一个完成路径信息
            /*ServletContext context = getServletContext();
            String path = context.getRealPath("/web/WEB-INF/classes/conf.properties");*/
            //通过字节码对象获取类加载器再去获取src里资源路径转成String类型
            String path = ServletContextDemo4.class.getClassLoader().getResource("conf.properties").getPath();
    
    
            //全路径名称
            System.out.println(new File(path).getAbsolutePath());
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • ServletConfig与ServletContext

    多人点赞 热门讨论 2022-06-25 10:13:18
    ServletConfig与ServletContext
  • servletContext的学习,并使用实例进行了实战。完成了一个登录和统计登录人数的功能。
  • 文章目录1、ServletContext1.1、ServletContext 对象的作用1.1.1、相对路径转绝对路径1.1.2、获取容器的附加信息1.1.3、读取配置信息1.1.4、全局容器Servletconfig 1、ServletContext ServletContext 官 方 叫 ...
  • ServletContext介绍和用法1、介绍 ServletContext2、用法(1)getInitParameterNames 和 getInitParameter(2)getMajorVersion 和 getMinorVersion(3)getRealPath 和 getContextPath(4)getRequestDispatcher(5...
  • ServletContext

    2021-12-19 14:40:50
    什么是ServletContext 1.servletcontext是一个接口,它表示servlet的上下文对象 2.一个web工程中,只有一个servletcontext对象实例 3.servletcontext是一个域对象。 什么是域对象 域对象,是可以想map一样存取...
  • ServletContext对象

    2021-08-14 17:28:49
    1.每一个web应用都有且仅有一个ServletContext对象,又称Application对象,在web容器启动时,会为每一个web应用程序创建一个对应的ServletContext对象。 2.作用: -作为域用来共享数据,此时数据在整个应用程序中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,765
精华内容 57,106
关键字:

servletcontext