ServletContext的介绍与用法

1.什么是ServletContext

1.1 SevrvletContext:Servlet上下文

服务器会为每一个Web工程创建一个ServletContext对象,ServletContext对象全局唯一,且工程内部的所有Servlet共享这个对象,所以叫全局应用程序共享对象

1.2 ServletContext对象如何得到

 //最常用的获取域对象的方法
 this.getServletContext();
 //不常用
 this.getServletConfig().getServletContext();

2.作用

2.1.是一个域对象

域对象介绍:

域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据。

2.2.可以读取全局配置参数

ServletContext读取全局参数核心方法

 Enumeration<String> getInitParameterNames();
 getServletContext().getInitParameterNames();//获取所有参数名称列表,返回的是枚举类Enumeration的对象,泛型为String
 ​
 String getInitParameter(String var1);
 getServletContext().getInitParameter(name);//根据指定的参数名获取参数值,返回的类型是String

2.2.1 实现步骤

  1. 在web.xml中配置全局参数

 <!--在Servlet里参数配置方法只针对一个特定的Servlet有效,-->
   <servlet>
     <servlet-name>Receive</servlet-name>
     <servlet-class>com.zixin.servlet.ReceiveServlet</servlet-class>
     <init-param>
       <param-name>user3</param-name>
       <param-value>xiaoliu</param-value>
     </init-param>
   </servlet>
   <servlet-mapping>
     <servlet-name>Receive</servlet-name>
     <url-pattern>/receive</url-pattern>
   </servlet-mapping>
 <!-- 全局配置参数,因为不属于任何一个servlet,但是所有的servlet都可以通过servletContext读取这个数据 -->
   <context-param>
     <param-name>user1</param-name>
     <param-value>xiaoming</param-value>
   </context-param>
 ​
   <context-param>
     <param-name>user2</param-name>
     <param-value>xiaoli</param-value>
   </context-param>
  1. 在动态资源servlet里面使用ServletContext读取全局参数代码

       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             System.out.println("进入了另外一个Servlet");
             resp.setContentType("text/html;charset=utf-8");
             ServletContext servletContext = this.getServletContext();
     //       String value = (String)servletContext.getAttribute("username");
             String  value1 = servletContext.getInitParameter("user1");
             String  value2 = servletContext.getInitParameter("user2");
             String  value3 = this.getServletConfig().getInitParameter("user3");
             PrintWriter writer = resp.getWriter();
     //       writer.println("获取到的名字为"+value);
             writer.println("获取到的全局Servlet初始化参数user1为"+value1);
             writer.println("获取到的全局Servlet初始化参数user2为"+value2);
             writer.println("获取到的局部Servlet初始化参数user3为"+value3);
      }

3.生命周期

ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

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

4.域对象方法

凡是域对象都有如下3个方法:

 void setAttribute(String name,Object value);name是String类型,value是Object类型;
 ​
 往域对象里面添加数据,添加时以key-value形式添加
 ​
 Object getAttribute(String name);
 ​
 根据指定的key读取域对象里面的数据并返回为一个Object对象,
     
 要是想获取value,可以直接使用强转
 String value =(String)servletcontext.getAttribute(String name);
 ​
 ​
 void removeAttribute(String name);
 ​
 根据指定的key从域对象里面删除数据

5.域对象功能代码

向域作用对象中添加数据

   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // 设置编码格式
         System.out.println("进入了Post()");
         resp.setContentType("text/html;charset=utf-8");
 ​
         // 获取ServletContext作用域对象
         ServletContext servletContext = this.getServletContext();
         // 向ServletContext作用域添加数据
         servletContext.setAttribute("username","小明");
 ​
         PrintWriter writer = resp.getWriter();
         writer.println("这是一个Test,成功向作用域添加数据");
    }
 }

从域作用对象中读取数据

 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     System.out.println("进入了另外一个Servlet");
     resp.setContentType("text/html;charset=utf-8");
     ServletContext servletContext = this.getServletContext();
     String  value = (String)servletContext.getAttribute("username");
     PrintWriter writer = resp.getWriter();
     writer.println("获取到的名字为"+value);
 ​
 ​
 }

ServletContext存储数据特点:

全局共享,里面的数据所有动态资源都可以写入和获取

服务器启动的时候创建,服务器关闭的时候销毁,因为这是全局应用程序对象,全局共享对象。

6.Servlet使用建议

因为存在ServletContext中的数据在服务器中会长时间,这样就会占用很多内存,因此在使用ServletContext时,建议不要往里面添加过大的数据!

Day06 ServletContext的更多相关文章

  1. Servlet深层知识

    一.ServletContext实现请求转发1.得到请求分发器:RequestDispatcherServletContext.getRequestDispatcher(String path):pa ...

  2. ServletContext对象

    **1 ServletContext对象   1)在web应用中,由服务器创建的唯一的一个对象是ServletContext   2)ServletContext对象在每一个Servlet中取得都是相 ...

  3. ServletContext对象(每个工程只有一个此对象)

    一]重点方法:        1>存取对象                        void setAttribute(String name, Object object);//将obj ...

  4. JavaWeb——ServletContext

    一.基本概念 说起ServletContext,一些人会产生误解,以为一个servlet对应一个ServletContext.其实不是这样的,事实是一个web应用对应一个ServletContext, ...

  5. The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory 这是由于项目里面的一些 ...

  6. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  7. 如何获得Webapp的根项目路径 即ServletContext.getRealPath() 的输入参数要以"/"开头

    ServletContext.getRealPath() 的输入参数要以"/"开头 2014-03-26 15:54 5738人阅读 评论(1) 收藏 举报 版权声明:本文为博主原 ...

  8. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  9. Servlet 之 ServletContext

    package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException; import java.io.PrintWrite ...

  10. Tomcat启动后,从spring容器中获取Bean和ServletContext

    public static Object getBean(String beanName){ ApplicationContext context = ContextLoader.getCurrent ...

随机推荐

  1. 全国分乡镇第五次人口普查数据shp数据库省市区县街道

    ==名称:全国第五次人口普查任意十个乡镇的乡镇界地图==数据说明:精确到乡镇级别.==数据:面数据,属性列表(乡镇名.乡镇代码,第六次人口普查分乡镇属性数据)==时间:截止2000年12月31日==格 ...

  2. ValueError: Unable to determine SOCKS version from socks

    unset all_proxy && unset ALL_PROXY export all_proxy="socks5://127.0.0.1:1080" 参考: ...

  3. 【笔记】DDD实战课-人保架构欧创新

    目录 开篇 学好DDD,你能做什么? 基础 领域驱动设计:微服务设计为什么要选择 DDD? DDD的两层设计 DDD与微服务的关系 领域.子域.核心域.通用域和支撑域:傻傻分不清? 领域和子域 核心域 ...

  4. concat()函数

    该函数可以将多个字符串连成一个字符串.使用语法concat(str1, str2, ...)返回结果参数拼接成的字符串,如果有任何一个参数为null,则返回值为null例子1.从person表查出数据 ...

  5. SOJ1711 题解

    题意 给定 \(n\) 个在数轴的区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\). 定义 \(I(x)\) 为所有包含 \([x,x+1]\) 的区间形成的集合,即 ...

  6. Django+VUE.js实现图片上传

    vue里的代码 <template> <div> 添加商品<input v-model="name"><br> 价格<inpu ...

  7. mac上创建第一个C程序

    在mac电脑上,写C语言程序一般用终端来写,我们学习C主要是为了学习iOS的话,我们今天换Xcode来写C. 一.去App Store或者苹果开发者网站上下载Xcode.打开Xcode,创建项目. 二 ...

  8. Assetbundle 打包加载场景

    public class CreateAssetBundle : Editor{ // 打包unity场景文件 [MenuItem("Assets/Build AssetBundle Sce ...

  9. The operation was rejected by your operating system.

    我在新项目开启的时候使用npm install来初始化前端代码的开发环境 但是遇到一个问题,一直报: The operation was rejected by your operating syst ...

  10. vue3 vite等笔记

    1.脚手架 vue-cli基于webpack封装,生态非常强大,可配置性也非常高,几乎能够满足前端工程化的所有要求.缺点就是配置复杂,甚至有公司有专门的webpack工程师专门做配置,另外就是webp ...