java中的上下文,servletContext以及idea中提示配置默认spring上下文
简单理解context在当前环境下你能拿到的参数都可以从context出发去拿,而不仅仅是放URL的.从里面可以拿到request,session,response…,可以说只要你拿到了context就可以访问任何你有权限访问的东西context就是“容器”,放的就是应用程序的所有资源,要用时候就访问它,所以context里面的东西,在同一个应用程序里面是全局的。是一个包含各种cont...
简单理解
- context
在当前环境下你能拿到的参数都可以从context出发去拿,而不仅仅是放URL的.从里面可以拿到request,
session,response…,可以说只要你拿到了context就可以访问任何你有权限访问的东西 - context就是“容器”,放的就是应用程序的所有资源,要用时候就访问它,所以context里面的东西,在同一个应用程序里面是全局的。
- 是一个包含各种context的设置的对象
例如:pageContext就包含了该页面的各种设置。可以通过他得到该页面所在服务器路径等等。
Context 用于在 Request 操作中指定上下文对象的对象,上下文字符串在与请求调用一起被发送之前,必须在该指定的上下文对象中进行解析。Context 对象包含 NamedValue 对象形式的属性列表。这些属性表示关于客户端、环境或请求情形的信息,它们通常是一些可能不方便作为参数传递的属性。
所谓上下文,它是用来存储系统的一些初始化信息,例如在jboss中通过配置文件指定了数据源,那么在jboss启动的时候就把这个文件的相关信息上下文中,于是在我们使用这个数据源的时候,就需要先获得系统的上下文,然后再通过一定的方式将数据源取出来。至于在系统启动时,是如何将这些初始化信息加载到上下文中,而上下文在程序中具体又是以什么形式体现的,应该随着系统的不同而不同。
上下文即ServletContext,(在java web中,代表整个web应用,可以和整个应用的容器,即服务器,进行交互)是一个全局的储存信息的空间,服务器启动,其就存在,服务器关闭,其才释放。所有用户共用一个ServletContext。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。如,做一个购物类的网站,要从数据库中提取物品信息,如果用session保存这些物品信息,每个用户都访问一便数据库,效率就太低了;所以要用来Servlet上下文来保存,在服务器开始时,就访问数据库,将物品信息存入Servlet上下文中,这样,每个用户只用从上下文中读入物品信息就行了。
获取ServletContext的方法:
HttpSession session = request.getSession();
session.getServletContext();
在百科上还有一种说法是:文件所在的路径
顺便整体整理和理解了一波ServletContext
ServletContext
引用自百度百科,xmind文档[笔记15]
概要
每个应用都会有一个ServletContext对象与之关联,当容器分布在多个虚拟机上时,web应用在所分布的每个虚拟机上都拥有一个ServletContext实例。缺省情况下,ServletContext不是分布式的,并且只存在于一个虚拟机上。
通过ServletContext可以访问应用范围的初始化参数和属性:
- 初始化参数
ServletContext对象是在Web应用程序装载时初始化的。正像Servlet具有初始化参数一样,ServletContext也有初始化参数。Servlet上下文初始化参数指定应用程序范围内的信息。
在web.xml中配置初始化参数:
<context-param>
<param-name>adminEmail</param-name>
<param-value>webmaster</param-value>
</context-param>
元素是针对整个应用的,所以并不嵌套在某个元素中,该元素是元 素的直接子元素。
从Servlet中访问初始化参数:
ServletContext application=this.getServletContext();
out.println("send us your")
out.println(application.getInitParameter("email"));
out.println("'>email");
- 属性
可以通过编程的方式绑定,也可以作为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);
注:web应用范围具有以下两层含义:
(1) 表示有web应用的生命周期构成的时间段.
(2) 表示在web应用的生命周期内所有web组件的集合。
setAttribute(String name,java.lang.Objectobject):
把一个java 对象和一个属性名绑定,并存放到ServletContext 中,参数name 指定属性名,参数Object 表示共享数据。
getAttribute(String name):
根据参数给定的属性名,返回一个Object类型的对象。
getAttributeNames():
返回一个Enumeration 对象,该对象包含了所有存放在ServletContext 中的属性名
removeAttribute(String name) :
根 据 参 数 指 定 的 属 性 名 , 从servletContext 对象中删除匹配的属性。
getRealPath("/"):
得到绝对路径
访问web应用的静态资源
使用ServletContext接口可以直接访问web应用中的静态内容文档结构.包括HTML,GIF和JPEG文件。如以下方法:
.getResource
.getResourceAsStream
这两个方法的参数都是以"/“开头的字符串,表示资源相对于context根的相对路径.文档结构可以存在于服务器文件系统,或是war包中,或是在远程服务器上,抑或其他位置.不可以用来获得动态资源,比如,getResource(”/index.jsp"),这个方法将返回该jsp文件的源码,而不是动态页面.可以用"Dispatching
Requests"获得动态内容.
列出web应用中可被访问的资源,可以使用getResourcePaths(String path)方法。
跨多个请求,用户和Servlets
web服务器支持在一台机器上共享一个IP的多个逻辑主机,这种能力被称为"虚拟主机",每个逻辑主机都拥有它自己的servlet context。servlet context不能跨虚拟主机共享。
spring容器以及上下文
应用上下文即是Spring容器抽象的一种实现;而我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口.
Spring的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;还有一种就是继承了BeanFactory后派生而来的应用上下文,其抽象接口也就是我们上面提到的的ApplicationContext,它能提供更多企业级的服务,例如解析配置文本信息等等,这也是应用上下文实例对象最常见的应用场景。有了上下文对象,我们就能向容器注册需要Spring管理的对象了。对于上下文抽象接口,Spring也为我们提供了多种类型的容器实现,供我们在不同的应用场景选择——
① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
有了以上理解,问题就很好办了。你只要将你需要IOC容器替你管理的对象基于xml也罢,java注解也好,总之你要将需要管理的对象(Spring中我们都称之问bean)、bean之间的协作关系配置好,然后利用应用上下文对象加载进我们的Spring容器,容器就能为你的程序提供你想要的对象管理服务了。
到这儿就懂了idea报的这个配置默认的上下文的提示.其实也是过分纠结了,但是也知识整合了不少~
> 关于这一点,更详细的解释https://www.cnblogs.com/chenbenbuyi/p/8166304.html
更多推荐
所有评论(0)