关于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被称为Servlet上下文对象。(Servlet对象的四周环境对象。)

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

* ServletContext是一个接口,Tomcat服务器对ServletContext接口进行了实现。

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

* ServletContext接口中常用的方法:

        public String getInitParameter(String name); // 通过初始化参数的name获取value

        public Enumeration<String> getInitParameterNames(); // 获取所有的初始化参数的name

        <!--以上两个方法是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源码当中,不要将应用的根路径写死,因为你永远都不知道这个应用在最终部署的时候,起一个什么名字。

        public String getContextPath();

        //String contextPath = application.getContextPath();

        // 获取文件的绝对路径(真实路径)

        public String getRealPath(String path);

        // 通过ServletContext对象也是可以记录日志的

        public void log(String message);

        public void log(String message, Throwable t);

        // 这些日志信息记录到哪里了?

        // localhost.2021-11-05.log

        // Tomcat服务器的logs目录下都有哪些日志文件?

        //catalina.2021-11-05.log 服务器端的java程序运行的控制台信息。

        //localhost.2021-11-05.log ServletContext对象的log方法记录的日志信息存储到这个文件中。

        //localhost_access_log.2021-11-05.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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ServletContextJava Web中的一个重要接口,它代表了Web应用程序在服务器中的上下文环境。在一个Web应用程序中,每个Servlet都可以访问同一个ServletContext对象,从而实现Servlet之间的数据共享和通信。 在Java中,可以使用ServletConfig对象的getServletContext()方法来获取ServletContext对象,然后使用该对象的方法来实现一系列操作,例如: 1. 获取Web应用程序的初始化参数:可以使用ServletContext对象的getInitParameter()方法来获取Web应用程序的初始化参数,例如数据库连接等配置信息。 ```java String username = context.getInitParameter("username"); ``` 2. 获取Web应用程序的真实路径:可以使用ServletContext对象的getRealPath()方法来获取Web应用程序的真实路径,例如获取Web应用程序中的一个文件的绝对路径。 ```java String path = context.getRealPath("/WEB-INF/config.properties"); ``` 3. 在ServletContext中保存数据:可以使用ServletContext对象的setAttribute()方法来在ServletContext中保存数据,从而实现Servlet之间的数据共享。 ```java context.setAttribute("key", value); ``` 4. 从ServletContext中获取数据:可以使用ServletContext对象的getAttribute()方法来从ServletContext中获取数据,例如获取其他Servlet保存的数据。 ```java Object value = context.getAttribute("key"); ``` 需要注意的是,ServletContext对象的作用域为整个Web应用程序,因此需要注意数据的安全性和可靠性。另外,ServletContext对象是在Web应用程序启动时创建的,因此可以在Servlet的init()方法中获取ServletContext对象并进行初始化操作,例如读取配置文件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值