文章目录
- ServletContext接口简介
- 获取一个ServletContext对象
- ServletContext接口中的相关方法
- 获取应用域配置参数
- 关于应用域参数的配置要求
- getContextPath获取项目路径
ServletContext接口简介
ServletContext
接口和Servlet和ServletConfig
接口一样, 都是位于jakarta.servlet
这个包下的接口, 其中Servlet
接口的实现对象, 代表着提供服务的类的对象, ServletConfig
接口对应的相应的Servlet
对象的一些配置信息(位于web.xml
文件下的servlet
标签中的信息)
ServletContext
对象, 代表的是应用域
信息,
每一个webapp
项目, 有且仅有一个ServletContext
对象
关于上面三个接口之间的关系, 我想我们可以通过下面的视图来简单描述一下
学校与班级的例子:
对于一个Tomcat服务器(Servlet容器)
来说, 相当于一个学校, 其中管理许多不同的webapp
我们类比为班级, 每个班级的相关规定所对应的对象, 也就是ServletContext
对象, 他对班级中的所有对象都生效, 也就是应用域
的概念, 班里有许多的同学, 这些对象我们称之为一个个的Servlet
对象, 每一个同学都对应一个独属于自己的信息对象, 也就是ServletConfig
对象, 通过这样的类比, 我们对这三个接口所对应的对象的体会应该就更深了…
获取一个ServletContext对象
上一节我们说了, ServletConfig
接口中有一个getServletContext
方法, 这个方法就是返回一个ServletContext
对象, 下面是代码信息
// 获取一个 ServletContext 对象// 第一种方法是通过 this.ServletConfig 获取 ServletConfig 对象, // 然后再通过这个对象中的 getServletContext 获取到...ServletContext servletContext = this.getServletConfig().getServletContext();// 第二种方法是直接通过 this.getServletContext 直接获得(底层和上面的机制一样)ServletContext servletContext1 = this.getServletContext();
我们输出一下关于实现ServletContext
接口的类的信息
其实查看相关源码就可以发现, 这个类其中存在的许多map
的结构(好多保存的就是关于全局的映射信息)
ServletContext接口中的相关方法
我们这个章节只简单介绍其中的部分方法, 大多数方法我们下面的章节会介绍
获取应用域配置参数
以下的方法和ServletConfig
中的功能是一样的, 我们不再多说
下面是我们的全局配置, 全局配置对所有的Servlet
对象都可见
执行下面的代码逻辑, 获得web.xml中的关于全局配置的相关信息
response.setContentType("text/html");PrintWriter out = response.getWriter();// 获取全局配置的参数(和ServletConfig中的方法意义是一样的)ServletContext application = this.getServletContext();// 获得全局的配置集合名称(name)Enumeration<String> initParameterNames = application.getInitParameterNames();while (initParameterNames.hasMoreElements()) {// 获得nameString initParameterName = initParameterNames.nextElement();// 获得valueString initParameterValue = application.getInitParameter(initParameterName);out.print("<h1>" + initParameterName + " : " + initParameterValue + "</h1>");out.print("<br/>");}
在浏览器上获得信息如下
关于应用域参数的配置要求
- 共享 : 最基本的要求, 只有需要共享的内容才建议放到应用域配置文件中
- 小 & 少 : 只有数据量小的数据才建议放到应用域中配置, 因为应用域参数相当于一种缓存机制, 如果大量的内容都在应用域会增加系统对相关参数的处理负担
- 不修改 & 很少修改: 因为是全局的变量配置, 就必然存在并发修改的线程安全问题, 所以我们存放在应用域的参数应该不修改或者很少修改以减少并发造成的线程安全问题
getContextPath获取项目路径
下面是项目配置的路径
我们使用getContextPath
获取项目配置的路径
执行下面的逻辑
response.setContentType("text/html");PrintWriter out = response.getWriter();// 在idea中, 我们的项目路径是自己配置在 Tomcat 服务器上面的, 所以我们要是想要获取真实的项目路径根目录// 可以通过 getContextPath 方法获得ServletContext application = this.getServletContext();String contextPath = application.getContextPath();out.print("<h1>" + contextPath + "</h1>");
输出结果